ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

逆向工程入门

逆向工程入门

Day 16: 逆向工程入门

本章介绍逆向工程的基本概念和常用工具,开始进入二进制分析领域。


1. 逆向工程概述

逆向工程:从二进制程序还原设计思路 应用场景: 1. 恶意软件分析 2. 漏洞研究 3. 软件兼容性 4. 学习理解 法律注意: - 仅用于学习和安全研究 - 尊重软件许可协议

2. 常用工具

反汇编器: - IDA Pro (商业,业界标准) - Ghidra (NSA开源,免费) - radare2 (开源) - Binary Ninja 调试器: - x64dbg (Windows) - OllyDbg (Windows 32位) - GDB (Linux) - WinDbg (Windows内核) 辅助工具: - PE-bear (PE分析) - Detect It Easy (查壳) - HxD (十六进制编辑)

3. 识别编译器和优化

; MSVC特征 call __security_check_cookie push ebp mov ebp, esp ; GCC特征 push rbp mov rbp, rsp sub rsp, 0x20 ; 优化特征 lea eax, [ebx + ebx*4] ; 乘5优化 xor eax, eax ; 清零

4. 识别常见结构

4.1 if-else

; if (eax > 10) cmp eax, 10 jle else_branch ; then分支 jmp endif else_branch: ; else分支 endif:

4.2 循环

; for循环 mov ecx, 0 ; i = 0 loop_start: cmp ecx, 10 ; i < 10 jge loop_end ; 循环体 inc ecx ; i++ jmp loop_start loop_end: ; while循环 while_start: cmp eax, 0 je while_end ; 循环体 jmp while_start while_end:

4.3 switch

; 跳转表实现 cmp eax, 4 ja default jmp [jump_table + eax*4]

5. 识别函数

; 函数序言 push ebp mov ebp, esp sub esp, 0x20 ; 函数尾声 mov esp, ebp pop ebp ret ; 或 leave ret ; 参数位置 [ebp+8] - 第一个参数 [ebp+12] - 第二个参数 ; 局部变量 [ebp-4] - 第一个局部变量

6. 字符串分析

1. 查找字符串引用 - IDA: Shift+F12 - strings命令 2. 跟踪字符串使用 - 交叉引用分析 3. 加密字符串 - 观察解密函数 - 动态调试获取

7. 练习

1. 使用Ghidra打开一个简单程序 2. 找到main函数 3. 分析程序逻辑 4. 重命名变量和函数

8. 小结

[工具] 1. IDA/Ghidra反汇编 2. x64dbg/GDB调试 [识别模式] 3. 编译器特征 4. 控制流结构 5. 函数边界 [分析方法] 6. 静态分析 7. 动态调试 8. 字符串追踪

下一篇预告:Day 17 - PE文件格式


返回列表