參考來源:1.4.1 沒必要記住所有的組譯指令
2.常用分析工具:
(1)OllyDbg
(2)IDA
(3)WinHex
(4)Process Monitor
(5)Wireshark
(6)Visual Studio
3.反調試技術:
- IsDebuggerPresent
- CheckRemoteDebuggerPresent
- 檢查 popf 和 SINGLE_STEP 是否異常
- 檢查 int 2dh 是否異常
- Windows Anti-Debug Reference
- An Anti-Reverse Engineering Guide
- Malware Analysis 3: int2d anti-debugging (Part I)
- Malware Analysis Tutorial 4: Int2dh Anti-Debugging (Part II)
4.加殼工具:
5.軟體斷點原理:debugger 將斷點位置的指令改寫為 0xCC(int3h)。當處理器遇到 0xCC 指令,會透過作業系統將異常報告給 debugger。因此,只要在指定位置寫入 0xCC,就可以在任意的時間或位置中斷程式執行。
6.硬體斷點原理:透過 register(DR register)讓作業系統將異常報告給 debugger。
7.常用 gdb 指令:
- r:執行程式
- b:設置斷點
- c:在斷點處中斷後,繼續執行程式
- x/[數字]i、disas:對指定數量的指令進行反匯編
- x/[數字]x:顯示指定長度的資料
- x/[數字]s:以字串形式顯示任意長度的資料
- i r:顯示 register 的值
- set:向 register 或記憶體寫入值
- q:結束 debug
8.防禦緩衝區溢出:
(1)ASLR:對 stack、registers、module、動態分配的記憶體空間等位址進行隨機配置。
繞過方式:ROP:利用未隨機化的那些 module 裡的組合語言,拼湊出需要的程式邏輯。
(2)Exec-Shield:限制記憶體空間的讀寫和執行權限。
繞過方式:Return-into-libc:透過調整參數和 stack 的設定,使得城市能夠跳轉到 libc.so 中的 system 函數、exec 類的函數,藉此執行 /bin/sh 等程式。
(3)StackGuard:編譯時,在各個函數入口和出口插入用於檢測 stack 資料完整性的程式碼。它所保護的是 ebp 和 ret_addr。
9.DLL 注入:
- SetWindowsHookEx:設定鉤子
- CallNextHookEx:繼續鉤子
- UnhookWindowsHookEx:釋放鉤子
- CreateRemoteThread:在其他 process 中建立執行緒,並讓該執行緒執行 LoadLibrary,進而使其他 process 強制載入某個 DLL
10.API 鉤子類型:
(1)改寫目標函數的開頭幾個字節
(2)改寫 IAT(Import Address Table,導入地址表):Detours
補充資料:
11.其他工具:
- 漏洞緩解工具:Enhanced Mitigation Experience Toolkit
- 惡意軟體分析 VM:REMnux
- 惡意軟體分析框架:Zero Wine Tryouts
- 惡意軟體檢測引擎(啟發式):Malware Classifier
沒有留言:
張貼留言