使用x64dbg調試dll程序
這篇筆記是根據Lab16使用x64dbg調試帶參數程序新增加的,記錄瞭如何調試一個dll文件。
在很多時候一些程序會將核心功能放在dll
文件內來完成,這樣避免程序被查殺或者被逆向分析,主要手段是通過LoadLibrayA
函數來加載一個dll
文件,同時這個dll
的DllMain
函數會被調用以此來達到執行dll
的程序。
在Windows
上要獨立執行一個dll
程序,那麼需要用到rundl32.exe
來完成,因此可以藉助這個程序來達到調試dll的目的。
分析dll程序的啓動方式
這個樣本使用的是《惡意代碼分析實戰》第三章的Lab03-02.dll
,查看這個dll的導出符號
這個dll
的啓動方式可以使用rundll32.exe dllname,ExportName arguments
的格式來啓動,啓動如下
rundll32.exe Lab03-02.dll,installA
下面用調試器來加載調試。
調試方式加載dll
爲了能調試成功,先檢查一下調試器的配置,開啓system breakpoints Entry point的選項
如果不開啓程序不能被正確中斷下來,接着開始調試dll
- 打開
rundll32.exe
-
配置調試參數
將要調試的dll和dll要使用的參數配置並啓動,在啓動參數的後面配置常規的
rundll32.exe dllname,exportName argumetns
的格式即可
接着打開斷點窗口右鍵選擇Add Dll breakpoint
然後輸入要調試的dll名稱,如下
設置好斷點後如下
接着按下F9
逐個加載dll,觀察好加載的狀態,當被調試的dll執行到入口處就表示程序已經啓動成功
如果沒有提示來到入口就一次一次的按下F9
,接着就能正確調試了。
注意
這裏加載的dll最好放在C:\myDir
等這樣的目錄,例如我這裏的是
加載的參數也要寫對同樣的路徑
程序中斷下來後,接着在關鍵位置設置斷點分析,例如這裏要觀察dll的程序在入口的睡眠時間是否一致,
在調試器內設置這個斷點並運行查看
這樣就能正確調試dll程序了,後續有別的再繼續補充。
總結
調試dll程序的步驟是
-
使用x64dbg打開rundll32.exe
-
接着設置命令行參數爲
C:\WINDOWS\system32\rundll32.exe C:\malwaredll\dllName,exportDllFunctionName arg1 arg2,...,argn
-
設置好命令參數之後,打開斷點窗口,右鍵
Add Dll breakpoint
寫入要調試的dll的名稱這裏需要注意的是這個dll最好在
C:\malwaredll
這個目錄下 -
最後按下
F9
運行觀察加載的dll,當加載到目標的dll的入口時就表示程序加載成功並且可以正常調試 -
最後按照正常的調試思路進行即可。