反跟蹤技術
1、調試器分類:用戶模式調試器(OD、VC++調試器、DRW2000)和內核模式調試器(SoftICE)
2、反調試技術:
a、窗口方法檢測:利用WIN API函數查找調試器窗口類名或者標題窗口,找到則表示監視程序運行。幾種調試器類名:flyOD或者OllyDBG(檢測flyODBUG)、SICE(檢測softICE)、DRW(檢測DRW2000)
b、檢查父進程:遍歷操作系統所有進程,檢查出當前進程是否為父進程。win32中一般的父進程:Explorer.exe、Cmd.exe、Service.exe
3、斷點檢測技術:
a、檢測軟件斷點:調試器調試時常用int3斷點,,檢測時只需要檢測函數首地址的機器碼是否為0xCC(INT3)
b、屏蔽硬件斷點:在調試器中能用的硬件斷點只能存在Dr0-Dr3寄存器中,因此可以不間斷地占用全部4個硬件斷點組織軟件的斷點調試。
c、中間調用API:將API函數的一部分代碼放到執行代碼中,在執行這段代碼后跳轉到API函數剩余的代碼,這樣設置的斷點就會失效。
4、花指令反靜態分析:加入無用指令擾亂反匯編軟件使其無法找到指令的其實位置(操作碼)。去花方式:找到花指令后NOP掉。
5、CRC校驗:散列函數的一種,檢測文件完整性。將字串轉換成CRC32值后存儲,運行時重新轉換后與之前的對比檢測是否完整
6、程序自生成技術:利用前面的程序生成將要執行的代碼,反匯編指令並不是要執行的代碼,而且可以隱蔽關鍵指令。
軟件調試
調試需求
1、調試功能函數:軟件的加密、解密函數、網絡軟件的數據包發送函數、接收函數、窗口函數、算法函數、文件處理函數。
2、條件判斷查找:修改跳轉去向。
3、解密資源文件:存在用戶信息、監測數據、資源等
4、截獲網絡數據包
5、還原數據結構:數組、鏈表、二叉樹、結構體、類
6、調試尋址方式:函數入口地址、數據結構的訪問地址、某個對象的this指針地址。
調試過程
1、查看軟件是否加殼(保護殼、壓縮殼、混合殼)、查看軟件開發語言、查看軟件本身提示信息。
2、反匯編可執行程序,找突破口。
3、反響追蹤,找到代碼位置。
4、記錄調試過程,編寫文檔。
調試方法
1、設置斷點:代碼定位斷點、數據斷點、調試斷點。
2、字符串追蹤
3、API函數追蹤。常見的有:GetWindowText、CreateFile、LoadLibrary、CreateProcess
4、代碼屏蔽:屏蔽后推斷這段代碼實現了什么功能。測試某段代碼和某個函數功能。
5、內存修改:測試內存中某段數據的實際意義。
