逆向工程
逆向工程通常是在没有源代码的情况下对软件进行分析,相对于正向的代码编程来说,逻辑通常是反过来的,需要有好的代码分析和反向思维能力。
0x01. 学习 C 语言代码
C 语言是逆向工程的基础,务必重点学习以下内容。
- 流程控制:if、switch、goto、break
- 指针操作:引用,解引用,取地址,数组与指针转化
- 数据类型:熟记 char、int、int64 等类型大小
- 可逆运算:异或运算、算数运算、移位与循环移位运算
0x02. 学习常见加密
加密是逆向工程对抗的核心,务必熟记加密算法原理和特征,这样在面对混淆和魔改加密时才能游刃有余。
- TEA 系列加密: TEA、XTEA、XXTEA
- RC4 加密
- AES/DES 加密
- 16 进制编码
- Base64 编码
加密特征识别可参阅:常见加密算法特征识别
常见加密不是一成不变的模板,死记硬背不可能通杀,请务必读懂加密过程和大致原理。
0x03. 脚本代码编写
脚本编写是一项很重要的能力,你需要熟悉 C 语言和 Python,并且减少代码出错的可能性。平时的解题脚本一定要收集好,并找时间整理,比赛争分夺秒,好的解题模板可以帮你快速夺得一血。
0x04. 逆向工具的使用
- IDA: 二进制方向工具,90% 的题都会用到,务必熟悉使用
- Jadx-gui: Java 代码反编译工具,安卓软件和 Java 程序都会用到。
- Jeb: 面相安卓逆向的利器,有 Java 代码反混淆功能
- Pyinstxtractor: 解包 Python 编写的 exe 文件
- Uncompyle6: 反编译 Python 大部分版本字节码(PYC 文件)
- Xdbg: 动调神器