原由
最近作病毒分析的時候遇到遠控馬,須要記錄鏈接的遠程地址!用火絨劍
或者ProcessMonitr
能夠看到一部分,可是我想要更全面的信息,因而搗鼓了WireShark
和Fiddler
。Filddler 使用比較簡單,可是隻能看到http
的流量,WireShark 雖然能捕獲全部流量,但無法過濾特定進程的包,並且過濾規則對我來講太複雜了。感慨之際找到了一個名爲openQPA
的開源項目,這裏是項目主頁css
體驗
而後開開心心下載源碼下來,程序是用PyQt4
寫的,還有兩個依賴庫httplib2
和dpkt
,pip install
安裝好後雙擊 QPA.py 打開程序,第一印象:醜,這佈局也太醜了吧!窗口還不能拉伸...html
吐槽了一下界面,而後體驗下功能,發現捕獲進程包這功能是真的太強了python
還有數據包分析的功能,P.S.這佈局我真的很難忍受app
除此以外還能添加數據包分析,整體來講功能十分強大,若是你沒有強迫症就使用這個吧!反正我不太能忍受這界面,且我只須要捕獲進程數據包
那個功能,而後本身用 WireShark 分析數據包。因此就須要在下面這麼多文件中定位到捕獲進程數據包的代碼位置函數
梳理項目
能夠看到項目 ReadMe 中說明了其中幾個文件的做用佈局
而後用VS Code
和python插件
來調試源碼梳理項目流程,開始就是針對性下斷點,先猜想功能而後下斷點印證,這是個比較漫長的過程,我就不截圖了!最後知道數據包分析的文件是analysis2.py
,dpcap.py
以及calc.py
,程序的界面主要是在html
,css
和js
的地方,Window.py
用於初始化界面以及捕獲進程包,QPA.py
是程序的入口文件。我須要捕獲進程數據包功能,因此直接聚焦於Window.py
和QPA.py
文件spa
核心功能定位
先大體看下函數名稱,在可疑函數處下斷,而後點擊開始捕獲看程序是否可以斷下,過程就是這樣!最終找到的兩個函數是readCap
和stopCap
插件
斷點下好後,而後轉到QPA.py
點擊開始調試,程序成功斷在stopCap
,此處會殺掉了一個Cap.exe
的進程命令行
而後 F11 繼續跟,跟到了名爲wa
的函數,這裏會調用connect
中的exeCap
函數,這個看上去有點像捕獲數據包的意思翻譯
在exeCap
運行先後分別記錄下文件的內容,最後證明確實是在connect.exeCap
中開始捕獲數據包的
而後繼續向下運行,發現readCap
函數是一個相似消息循環的地方,會一直讀取數據包而後顯示在界面上,直到點擊了中止捕獲就會跳出循環再次執行stopCap
來殺掉進程
總結一下就是核心捕獲進程數據包的功能在connect
文件中的exeCap
函數
逆pyc文件
先在項目文件中找到了connect.pyc
沒有.py
源碼,爲何會沒有源碼呢?說明核心功能就在裏面
逆向pyc
很簡單,先放網上或者下載uncompyle
反編譯一下,稍微難一點的都是反編譯不了的,而後就是看字節碼還原python
源碼,這東西網上有指令照着翻譯就好了!可是這個 pyc 挺簡單的,在線反編譯都能搞定
原來捕獲功能是connect
目錄下的CAP.exe
,經過調試得知參數形式是U H U 1 dir 0
,其中 dir 就是目錄名
這幾個文件的做用分別是:cap.exe
捕獲進程數據,.dll
是它的運行時庫,NIC.exe
查看本地網卡,其它的沒什麼用了,我都 IDA 看了的!WinPcap
須要提早裝好否則該程序會幫你安裝一個
逆Cap.exe
什麼保護措施都沒有的程序,開始會判斷你傳入的命令行參數
而後通過一系列判斷後,開始捕獲進程數據
這個程序運行的參數很麻煩,須要這麼寫cap U H U 1 Dir 0
才能捕獲進程的流量。因爲代碼不是很是多,有興趣能夠本身重寫一份了。但我不想重寫也不想這麼複雜,就只有本身patch
程序了,思路就是:先一個jmp
跳到參數判斷以後,而後利用中間的無用數據寫一個賦值的代碼,以後賦值跳轉到上面去賦值再跳轉回來。程序修改以後只須要cap dir
就能捕獲進程的數據包了
P.S.
本來項目就是開源的,我還給人把核心功能提出來了,要是再把patch
後的程序放出來簡直非人哉!因此我就不放打補丁的程序了,有須要的能夠私信我!