Lab16使用x64dbg調試帶參數程序
在分析一些樣本的時候,無論是.exe / .dll
程序,或多或少都需要給程序添加參數。尤其是通過命令行給參數使得程序運行起來的。這篇筆記主要記錄的兩個調試方式
- 調試帶參數啓動的
.exe
程序 - 調試帶參數啓動的
'.dll'程序
看下一篇文章
今天分析的程序是來自《惡意代碼分析實戰》的第十六章實驗,第二個程序是一個crackme
的程序,本來這個樣本的重點是關注反調試部分的知識點,筆者在分析的時候發現這個有一個知識點–如何使用x64dbg
調試帶參數啓動的程序,因此這裏就一併記錄了。
Lab16-02 分析反調試–TLS回調
首先查看這個PE文件知道這是一個cmdline
的程序
直接運行後提示要求輸入四個字符的密碼
同時發現了.tls
段
使用ida分析這個程序配合Ctrl+E
快捷鍵打開程序的入口,這個技巧會將程序的入口程序都列出來,如下
第一個就是TlsCallback_0
接着是start
,進入第一個函數調用分析知道,這裏主要調用FindWindowA
函數獲取當前最頂部的程序窗口名稱,這裏主要獲取OLLYDBG
這個程序,很明顯是反調試手段,如果找到就退出,否則就進入主程序調用
這個bypass也很好辦,使用x64dbg
即可,也可以在動態調試階段修改ZF
的狀態即可。接着來到main
程序後分析可知道要求輸入一個password才能獲得正確提示
經過逆向分析這個程序知道,程序會調用比較一個字符串內容
但 這個程序在靜態時的數據是加密的,需要在運行時才能獲取得到
這個解密函數就在CreateThread
函數的lpStartAddress
,進入分析這個函數如下
這個計算過程比較複雜,一個簡單的方式就是運行時獲取這個password
的內容。因此需要在調試啓動的時候賦值參數給程序,下面進入動態調試階段直接獲取password
調試帶參數啓動的.exe
程序
有些樣本要求啓動時給定參數,例如
test.exe -l aa -c bb
如果用x64dbg
這裏的版本是
我們用x64dbg
啓動程序的步驟通常是open --> 待調試程序
的方式
選擇打開程序後,調試器就會加載Lab16-02.exe
這個樣本,
要想調試這個程序還要給參數,在打開程序後給程序添加參數的方式File–>Chang Command line
在彈出的對話框中輸入參數,格式爲
"path\to\aaa.exe" "arg1" "arg2" "arg3"
如下是
接着確定之後會看到調試器提示程序已經修改了程序的啓動參數
這樣就設置好了,接着在strncmp
函數設置斷點並觀察參數就能獲取到解密的password
了。
到此程序就分析完成了。輸入正確的密碼後如下
正確輸出
這個題在cmd下輸入的byqrp@ss
不能的得到正確結果才選擇用調試器查看了。如下是cmd下執行的結果
總結
-
查看程序的PE結構觀察是否存在
.tls
段的內容 -
程序的反調試通過TLS來預先執行,可以通過ida的
Ctrl+E
的方式來定位tls
的回調 -
可以使用
x64dbg
調試帶參數的程序- 先加載程序
- 通過
File->change command line
的方式來給程序添加參數。