Lab16使用x64dbg調試帶參數程序

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的方式來給程序添加參數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章