監控鍵盤和鼠標記錄內容和截屏,更新版本2.0,增加了Linux服務端!!!


 監控本地並將內容遠程輸出


 新版本1.0更新版本2.0

主要更新核心    1.增加了linux服務端(直接python3運行)  2.優化占磁盤容量(30MB減至5MB)   3.解決大部分BUG優化了速度和穩定性    4.解決了WINDOWS客戶端微小頻率彈窗BUG.

 先上結果圖,由於是張我之前錄制視頻的截圖,過程沒有進行截圖,所以很不詳細。你大致可以理解是個后門信息傳輸的一個交互工具。在后面我們詳細講講原理和其功能。

 這里先把更新版本的LINUX服務端配置教程放台面,客戶端IP與LINUX服務端一致。保存放入客戶端

 HR.exe則是我們監控鍵盤和鼠標的監控軟件,監控好的內容都會存儲在QQdata文件夾里面,QQ.exe則也會監控里面把內容實時傳輸給服務端。

用起來非常簡單,這時候服務端就會收到在QQdata上面的jpg格式的截屏和Monitor_log.txt里面的數據。

 

 進入MKB

 

 

分別是截屏接收images,鍵盤監聽源碼(這里是亂碼一般不看),鍵盤監聽明文Monitor_log_chinese.txt 

 賬號密碼,以及截屏,全部到手。 

 

 開發靈感以及環境


 

開發環境環境:windows,開發語言:python3.78
由於在我測試滲透的過程中,發現meterpreter的鍵盤監聽功能過於單調,沒有我心目中想要的功能,網上搜索也是大同小異。於是乎就開啟了沒日沒夜碰瓷之旅。
從設備行為檢測Hook學習到遠程傳輸交互Socket,於是也就是此次軟件慢慢形成的雛形。完成一次完整的監控交互涉及到所設計出的三個軟件
1.MonitorNoWin.py  2.SocketWinClient.py 3.SocketWinServer.py 這都是我放github上面的源碼名稱,如果翻譯理解就是1.監控無窗口 2.傳輸客戶端 3.傳輸服務端,。下面我們先講講成品怎么使用,之后會將原理和源碼分析。
目前共開發了  網絡傳輸windows客戶端 和win服務端,以及一個監控windows軟件。 那么還少個用於我們kali linux的服務端,會在近期內開發出來。

成品監控工具怎么使用


 源碼和成品我已經上傳githubhttps://github.com/EternalNight996/KBMonitor 手動下載或命令行下載

如果在linux上git clone感到速度慢,那么可以加代理去下載。如果不加代理建議用瀏覽器打開上面網址,手動下載zip包后解壓即可。

git clone https://github.com/EternalNight996/KBMonitor.git 
由於kali linux 的服務端還沒開發出來,暫時用於windows去展示。我們將這個github先下載解壓或者git clone如下.
ico就是軟件圖標后面會教怎么打包修改圖標會說,output則是我們成品輸出的目錄,sourcecode則是源碼,README說明書,如果你是看這個博客就可以不去閱讀。VCRUNTIME140.dll這個是后面打包壓縮時候需要替換用到的,現在我們講成品只需要打開output.會出現兩個文件夾 客戶端無彈窗、服務端彈窗。
1.先在你的電腦打開服務端

 

輸入你這台服務器掛公網的域名或者IP和端口,不一定是6666主要是你開放能接受訪問的端口。不能輸入被占用的端口。如果輸入錯誤的IP或域名則會直接退出窗口,這時候你需要把配置文件刪除,才能重新輸入配置。

如果不能打開軟件則刪除這個配置文件Monitor_config.txt,也可以打開手動輸入保存。把文件復制起來,所有監控從客戶端收到的截屏和內容都會存儲在MKB\images 和MKB\Monitor_log.txt里面,

 開打進入到客戶端無彈窗,我們先把復制好的配置文件粘貼到客戶端替換。

在目標機器用管理權限打開,這里的  QQ.exe是我們的遠程傳輸客戶端。

HR.exe則是我們監控鍵盤和鼠標的監控軟件,監控好的內容都會存儲在QQdata文件夾里面,QQ.exe則也會監控里面把內容實時傳輸給服務端。

用起來非常簡單,這時候服務端就會收到在QQdata上面的jpg格式的截屏和Monitor_log.txt里面的數據。

監控源碼分析


打開剛剛git clone到的文件夾里的sourcecode
其對應的成品分別是,MonitorNoWin.py==火絨.exe、SocketWinClient.py==QQ.exe、SocketWinServer.py==雙擊運行服務端.exe
這里只講部分核心源碼,如果要看全碼直接打開源碼即可。

MonitorNoWin.py


導入的庫有幾個是第三方庫需要pip或其他方式安裝,先講講安裝方式。如果你是兩個版本的python則用pip3,如果下載的是python3則pip。python2不適用
win32api  主要功能比較雞肋,不過可以有效減緩內存占有率。

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 

接下來我們挑幾段核心代碼去理解

先講講鍵盤監聽所寫的代碼,導入event則是PyHook3所導入監聽去監聽里面的事件,其中
event.Ascii(國際標准碼十進制表示)、chr(event.Ascii)(將十進制表示轉換明文,但是只有部分32-127內)、event.Key(大部分轉義都能明文顯示,如right mouse等,但是無法顯示大小寫字母,所以才需要chr(event.Ascii))、event.WindowName(想必看名字就知道了,窗口名稱如我們現在用的編輯器)

 紅線畫的一條就是窗口顯示的名稱,如果你打開QQ或微信和嗶哩嗶哩。如果系統檢測到你是中文系統環境則是QQ或微信 嗶哩嗶哩,如果英文則是wechat QQ bilibili,所以我們這個先的列表按格式添加需要監控的窗口。如果你想監控微博則添加微博,如果想監控github 或 博客,則添加即可。

 如果我們再QQ聊天中換了增加了一個會話,則要么多幾個字符要改變數字。這樣就無法精准去判斷它是不是我們需要監聽,程序則會忽略些重要信息,我們這段代碼,則是判斷開頭,如果窗口開頭有含百度 或 QQ password則會加入后面判斷

我們這段算法,因為們所有記錄的消息都有全局變量 MSG去記錄,如果每次只記錄一次按鍵就去傳輸寫進文件,就傳輸一次。那么我們一條等浪費多數bytes去傳輸,我們后面會將socket傳輸文本傳輸一次1024bytes既8192bit,一個字符加上換行也就幾個bytes就浪費了1000bytes。。。。
只需要我們在寫進數據和清零數據,前加個開關即可,判斷是否持續累計記錄字符。status=0既開啟寫入並清零累計,我們試當回車的時候會這么做。

.

下面則是鼠標監聽,由於我們設置了標題開關全局,所以當鍵盤識別到的窗口為列表內則打開開關,這時候鼠標左右鍵點擊才會生效觸發。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客戶端我不在使用全局變量,而是改成了導入變量,這樣可以大大的提高效率和界面整潔。

 

 在上面我們可以看到有三處都有用這個多線程去帶入函數,是因為我們發送數據包到服務器。很容易出現堵塞尤其學我們傳輸這個圖片,截屏大小是根據你電腦分辨率大小決定。

 

OK我們來看看,由於我電腦分辨率為2550x1440既2K,則產生的截屏大小800kb,和我們平均一次輸入幾十個字符大小均為167bytes。也就是說圖片是一次文本的大小的4900倍,當然這其中也有不少不准確,因為我們用的模塊平均一張圖的大小是在500kb既3000倍。那么我們按1024去算則是發1次圖片相當500次文本。這壓力就大很多,如果我們沒有多線程,則會卡頓。如這次500還沒發完另一個任務就下來了,以此類推。我也特別設置了8192為圖片發包大小只需要發63次,當然也容易造成丟失,如果不穩定則改成4092大小即可。
發包格式我們用的是"gbk"GBK是中文編碼格式,正常用的是utf-8但是如果我們發包內容含中文,則會出現亂碼。所以收包和發包都需要一套相同的編碼格式。

 這個函數是當檢測到特定目錄和文件有內容,就會則是這條函數,導入絕對文件名。'rb'則是二進制讀取,在我們轉16進制后會顯示\x20\x0A空格和換行類似b''前面則有個b。

我們可以看到'{}|{}|{}'其中管道是為了我們服務端收取數據包后,做分割為數組區分。把長度(剛剛計算的字符長度)和類型(txt,pic)文件名 編譯十六進制gbk格式發送到服務端,這時候.recv(文本大小1024)監聽,當服務端發送來OK收到了。我我們則把數據返回給上層領導去發全部包。

發完全部包后服務端會發來類型確認存儲完畢"pic done"或“txt done”我們就會清理痕跡。到這里我們核心內容也就講完了。服務端更簡單

SocketWinServer.py服務端


 核心代碼好好理解下面代碼,我們想把配置好的數據提取放入.bind我們就可以搭建服務器。這種只是微型服務器搭建的一種。

(socket.AF_INET, socket.SOCK_STREAM)則是表示IP4網絡層 和 TCP傳輸層。。。我們客戶端設置的傳輸層和網絡層必須和服務層一樣,否則無法傳輸數據。當我們需要面向大眾配置各式各樣的路網類型,我們就需要用到多進程和多線程。前面講過多線程是分化路線阻止堵塞用的,如果你開的服務器,有幾十台客戶肉雞,或幾百台肉雞。你需要向他們發送不同的指令和他們向你發送數據包,這時候就容易造成任務堵塞或數據包堵塞。最后崩潰死機類似DDOS攻擊,他們利用世界各地所控制的肉雞向同一個建立服務器連接並發送大量數據包。造成擁堵的原理就是這樣。暫時先講這么多
1.threading多線程則是共享函數之間的數據,占內存速度快,結束線程也快。支線PID相同,主線一樣。
2.multiprocessing多進程則是函數或類之間與其他互不干涉,獨立PID進程每個PID都是獨立的,結束掉其他函數PID也能獨立存活,不占內存但占CPU,速度沒這么快,函數之間的數據不共享。如果我們需要批量發包給多台肉雞,並利用肉雞去形成DDOS攻擊,我們就會首要考慮multiprocessing.
講完區別我們接着看上面代碼,listen(20)最大IP訪問量,我們最多允許20個人訪問服務器。
之后進入循環語句,接收客戶端訪問.accept()  rADDR是訪問IP和端口,clientSocket則是客戶端內存分配地址和其他,我們發包也是通過這個發送。
接着我們可以clientSocket.recv接收包,其他都會客戶端差不多。最后我們講講如何打包,和打包的小技巧。

python如何打包?


python打包模塊有很多,我自己用的比較舒服的是pyinstaller,雖然也有不少問題,但是都能相對克服。之前我發過篇打包的詳細分析,這里就不細講了。
pip install pyinstaller
pip install pywin32 
就安裝我這個成品標准打包,打包這個監聽器。我們的ICO圖標取材與實際的火絨exe圖標直接提取,不可以快連接。 -F則是輸出單個文件大小為14.6MB本身是可以優化壓縮大小的。但是pyinstaller會出現一些動態鏈接文件替換問題,然后導致無法打開。還是比較簡單,一段代碼就可以完成,-w是不彈出窗口
pyinstaller -w -i ico/HR.exe -F sourcecode/MonitorNoWin.py 
 

 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM