2016年8月16日 星期二

《有趣的二進制:軟件安全與逆向分析》筆記

1.常用匯編指令:


參考來源: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 是否異常
補充資料:


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.其他工具:

沒有留言:

張貼留言