高级反调试
文章目錄
- 垃圾代碼
- 擾亂代碼對齊
- Stolen Bytes
- API重定向
- Debug Blocker
- 反調試技術系列:
垃圾代碼
無意義的代碼,也就是用來磨煉逆向人員的。。
擾亂代碼對齊
這個的話,利用了代碼對齊的狀況,就中間插入了一個或者兩個字節的指令,使得指令解析的時候,發送事故。但是在執行的時候并不會出現報錯,利用跳轉來控制運行流程。舉個例子:
例1:
0041510F FFE3 JMP EBX //EBX=415117 00415111 C9 LEAVE 00415112 C2 0800 RETN 8 00415115 A3 687801FF MOV DWORD PTR DS:[FF017268],EAX 0041511A 5D POP EBP例2:
00415117 72 01 JB SHORT 0041511A 00415119 FF5D 33 CALL FAR FWORD PTR SS:[EBP+33] 0041511C C9 LEAVE 0041511E 41 INC ECX通常把糾纏混合在一起的代碼稱為“混合代碼”
Stolen Bytes
將OEP的部分代碼轉移到另一個地方,使得很難Dump;另一方面對OEP的查找也會變得困難,OEP有時還會被處理。。。
API重定向
簡單操作:把API 的實現代碼重新拷貝一份,放在內存中,然后修改IAT,執行API代碼時,去執行拷貝的那份。這樣可以防止那些直接通過API下斷點的反調試。
復雜操作:利用ASProtect進行混淆代碼生成,然后一行代碼的功能被替換成了3萬多行。不得不說。。很強。。
Debug Blocker
自我創建技術(以子進程形式運行自身進程)的演進形式。自我創建技術中,子進程負責執行實際源代碼,父進程負責負責創建子進程,修改內存(代碼/數據),更改EP位置等。
僅僅調試父進程將無法轉到OEP代碼處,但調試時若用附加命令將子進程附加到調試器,這種反調試手法將會失效。
優點:
常規的SEH技術中,異常處理器代碼位于相同的進程內存空間;但Debug Blocker技術中,(處理被調試進程所發生異常的)異常處理器代碼位于調試進程(請注意,對于被調試進程所發的異常,調試器擁有優先處理權),為了調試子程序,必須先斷開與已有的調試器的連接,但這樣子程序又無法正常運行。。
補充:
Nanomite技術由Debug Blocker 技術發展而來,該技術會查找被調試進程內部的代碼,將所有跳轉指令(Jcc指令)修改為INT3(0xCC)指令,或其它觸發異常的代碼。并且,調試器內部由表格,含有被修改的Jcc指令的實際地址位置以及要跳轉的地址。執行被調試者內部修改后的指令就會觸發異常,控制權即被轉交給調試器。調試器通過發送異常的地址從(自身持有的)表格中獲取要跳轉的地址,然后通知被調試者。
破解方法就是:通過寫腳本(目前不會)。如果手動改的話,我感覺心態會崩。
反調試技術系列:
靜態反調試技術(1)https://blog.csdn.net/CSNN2019/article/details/113105292
靜態反調試技術(2)https://blog.csdn.net/CSNN2019/article/details/113147820
靜態反調試技術(3)https://blog.csdn.net/CSNN2019/article/details/113178232
動態反調試技術 https://blog.csdn.net/CSNN2019/article/details/113181558
高級反調試技術 https://blog.csdn.net/CSNN2019/article/details/113263215
總結