監控本地並將內容遠程輸出
新版本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,也可以打開手動輸入保存。把文件復制起來,所有監控從客戶端收到的截屏和內容都會存儲在MKB\images 和MKB\Monitor_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進制后會顯示\x20\x0A空格和換行類似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:\Users\Administrator\Desktop\myProject\venvs\KBMonitor\upx-3.96-win64" --clean SocketWinClient.spec
這時候我們還不能正常運行,必須把剛剛的VCRUNTIME140.dll動態配置文件粘貼到剛優化的目錄中。
pyinstaller -c -i ico/1.ico -D sourcecode/SocketWinServer.py
這里服務端用的是-c需要彈窗,因為我們如果不用就能直接關閉不會掛后台影響速度,還有需要看具體傳輸的數據。
pyinstaller --upx-dir "C:\Users\Administrator\Desktop\myProject\venvs\KBMonitor\upx-3.96-win64" --clean SocketWinServer.spec
把VCRUNTIME140.dll動態配置文件粘貼
TO THE END