软件逆向主要指对软件的结构、流程、算法、代码等进行逆向拆解和分析。
- 题目通常会给选手提供一个带有复杂算法和保护代码的程序,需要对算法进行分析,对保护代码进行破解来得到flag
- 考察内容:
- 程序的运行原理,计算机底层原理
- 各种工具的使用,各种思路的碰撞
- 对程序的熟悉程度,对多种算法的了解程度
- 需要选手分析目标程序,最后写出逆推程序来完成题目
广义的逆向
- 从目标代码反推源代码
- 从源代码理解开发者行为和目的
- 应用:软件破解、漏洞挖掘、恶意代码分析
CTF 逆向 - 狭义的逆向(保护层 -> 语言层 -> 算法层 -> flag)
- 涉及 Windows、Linux、Android 平台的多种编程技术
- 利用常用工具对源代码及二进制文件进行逆向分析
- Android 移动应用 APK 文件的逆向分析
- 加解密、内核编程、算法、反调试和代码混淆技术
- 与 Crypto 结合
- CrackMe(破密码,不改程序)
- KeygenMe(生成注册码)
- 与隐写取证结合
- Recover(恢复文件)
逆向的基础
- 逆向的基础是理解目标代码(过语言关)
- 必备知识
- 汇编、C 语言
- 操作系统原理与核心编程、程序加载
- 反编译与调试等等
- 常用工具
- PE 与 ELF 编辑、侦壳、脱壳工具
- 010Editor、WinHex、HxD
- PEID、Die、Upx、Resource hacker
- 反汇编与反编译工具
- IDA Pro、jadx、ILSpy、dnSpy
- 调试器
- Ollydbg、X64dbg、gdb、windbg
- PE 与 ELF 编辑、侦壳、脱壳工具
- 开发和运行环境分析方法
- 静态分析方法:反汇编、反编译
- 动态分析方法:调试、模拟
IDA
Ollydbg:调试 32 位
X64dbg:调试64位