逆向工程核心名詞詳解
一、調試與執行類
1. 斷點(Breakpoint)
- 定義:在代碼中設置標記,使程序執行到此處時暫停
- 類型:
- 普通斷點:通過
INT3
指令實現 - 條件斷點:滿足特定條件時觸發
- 內存斷點:監控指定內存區域的讀寫操作
- 硬件斷點:利用CPU調試寄存器(DR0-DR3)
- 普通斷點:通過
2. 步進(Step Over/Into)
-
Step Over
- 逐行執行代碼,跳過函數內部邏輯
- 示例:調試
printf()
時不進入C標準庫源碼
-
Step Into
- 進入被調用函數的內部實現
- 示例:分析自定義函數
CalculateDamage()
的算法
3. 調用棧(Call Stack)
- 定義:記錄函數調用關系的動態數據結構
- 特征:
- 后進先出(LIFO)結構
- 每個棧幀包含參數、返回地址、局部變量
- 通過
EBP
寄存器訪問當前棧幀
二、內存操作類
4. 游戲基址(Game Base Address)
- 核心概念:程序模塊加載到內存的起始地址
- 技術難點:
- ASLR(地址空間隨機化)導致基址動態變化
- 靜態基址特征:
// Unity引擎常見基址 GameAssembly.dll + 0x00123456
5. 偏移(Offset)
-
定義:相對于基址的地址位移量
-
層級結構:
最終地址 = [[基址 + 偏移1] + 偏移2] + 偏移3
-
尋址類比:
類似GPS導航:從市中心(基址)出發,向東走500米(偏移1),再向北300米(偏移2)
6. 指針(Pointer)
- 本質:存儲內存地址的特殊變量
- 多級指針:
int** ppValue = &pValue; // 二級指針
- 內存模型:
指針變量 → 地址A → 地址B → 目標數據
三、數據結構類
7. 棧(Stack)
- 操作特性:
PUSH
:壓入數據,ESP減4(32位系統)POP
:彈出數據,ESP加4
- 函數調用原理:
; 典型調用過程 push 參數3 push 參數2 push 參數1 call 函數地址
8. 堆(Heap)
- 對比棧:
特性 棧 堆 管理方式 編譯器自動分配釋放 程序員手動管理 分配速度 快 慢 內存碎片 無 可能產生 典型應用 局部變量 動態內存分配
四、匯編核心類
9. 寄存器(Register)
-
通用寄存器:
寄存器 特殊用途 示例指令 EAX 函數返回值存儲 mov eax, [ebp+8]
ECX 循環計數器 loop 標簽
EDX I/O端口操作 out dx, eax
ESP 始終指向棧頂 push/pop
-
標志寄存器(EFLAGS):
標志位 觸發條件 應用場景 ZF 運算結果為0 jz/jnz
跳轉CF 無符號運算溢出 進位判斷 OF 有符號運算溢出 溢出異常處理
10. 常見匯編指令
指令 | 功能說明 | 典型應用場景 |
---|---|---|
MOV | 數據傳送 | mov eax, ebx |
LEA | 加載有效地址 | lea eax, [ebx+4] |
CMP | 比較操作數 | cmp eax, 10 |
JMP | 無條件跳轉 | jmp 0x401000 |
CALL | 調用子程序 | call printf |
RET | 函數返回 | ret 4 |
五、逆向工具類
11. CheatEngine關鍵功能
-
地址掃描三階段:
- 首次掃描:精確數值匹配
- 變化篩選:數值增加/減少過濾
- 指針掃描:建立地址關聯鏈
-
內存修改技巧:
# 典型修改流程 if 找到目標地址:凍結數值 → 防止游戲重置鎖定數值 → 持續保持特定值
12. 反匯編(Disassembly)
- 核心價值:將機器碼轉換為可讀匯編代碼
- 工具對比:
工具 特點 IDA Pro 支持多架構,交互式分析 Ghidra 開源逆向框架,NSA開發 OllyDbg 動態調試利器,適合Windows程序
六、擴展概念
13. Hook技術
- 定義:劫持程序執行流程的技術
- 類型:
- Inline Hook:修改函數入口指令
- IAT Hook:修改導入地址表
- SSDT Hook:內核級系統服務表劫持
14. 內存分頁(Memory Paging)
- 關鍵機制:
- 4KB分頁單位(x86架構)
- CR3寄存器控制頁表基址
- 逆向意義:
// 虛擬地址轉物理地址 物理地址 = 頁目錄[DIR]→頁表[TABLE]→頁內偏移[OFFSET]
附:逆向工程學習路徑圖
如果本教程幫助您解決了問題,請點贊??收藏?支持!歡迎在評論區留言交流技術細節!欲了解更深密碼學知識,請訂閱《密碼學實戰》專欄 → 密碼學實戰