逆向工程工具及环境配置1次课
什么是逆向
通俗一点讲就是:从结果倒推过程,从成品倒推原理。比如你拿到一个可执行文件、APK、驱动、固件、协议流量,不知道它内部怎么实现,就通过反汇编、反编译、调试、Hook、抓包、日志分析等方法去倒推它的逻辑,这就叫逆向。
它不只限于软件,也可以是:
- 软件程序
- 安卓 APK
- 固件 / IoT 设备
- 通信协议
- 硬件电路板
- 文件格式
- 加密算法实现 我们通过一个图来演示一下

必备技能
编程语言方面
1.最重要的是要能看懂C语言代码,因为大量二进制、汇编、反编译伪代码,本质上都和 C 的思维强相关。
你至少得熟悉这些东西:
- 变量、数组、指针
- 函数调用
if / switch / for / while- 结构体
- 内存操作,比如
memcpy、strcpy、strcmp - 字符串处理
- 位运算:
& | ^ << >>
2.同样十分重要的Python:写脚本、解密、批量处理数据很方便
3.次要但是要会的:C++:后面碰到复杂程序时有用,但前期不用太深;Java:做 Android 逆向时很有用;JavaScript:写 Frida hook 时常用
计算机底层基础方面
大概就是程序是怎么运行的,要了解程序运行的过程以及每一段都代表什么内容,一些基本操作,比如进程线程这些,以及系统函数等等,这些可以在后续学习中慢慢去掌握,不用现在就具备,但是越早掌握越容易使自己对逆向的了解更加深刻而具体
汇编语言方面
虽然我们看的大多都是伪代码,但是常见的汇编指令我们还是要清楚的,比如后面我们提到的花指令就会在汇编层面给我们的程序反汇编造成影响,这个时候就需要我们能看得懂汇编去解决问题了
常见的一些汇编指令:
- 常见寄存器:
eax/ebx/ecx/edx、rax/rbx/... movpush / popcall / retcmp / testjmp / jz / jneleaadd / suband / or / xorshl / shr
数据表示与常见编码
逆向里很常见的坑其实不是算法,而是“这串东西到底是什么”。
- 十六进制
- 大端 / 小端
- ASCII
- Unicode / UTF-8
- Base64
- 常见 hash:MD5、SHA1、SHA256
- 常见对称加密:AES、DES、TEA、RC4
- 简单异或、移位、替换表
可执行文件格式
Windows 方向
重点学 PE 格式:
- DOS 头
- NT 头
- 节表
- 导入表
- 导出表
- 重定位
- 资源节
Linux 方向
重点学 ELF 格式:
- ELF Header
- Program Header
- Section Header
- GOT / PLT
- 动态链接
Android 方向
重点学:
- APK 结构
- DEX
- SO 动态库
- Java 层和 Native 层关系
- JNI
这部分不需要一开始背很细,但得知道这些东西是干嘛的。
否则看到导入表、重定位、PLT/GOT,只会满头雾水。
调试能力
逆向不是只看静态代码,很多时候必须动态调试。
- 下断点
- 单步执行
- 看寄存器
- 看内存
- 改内存
- 跟调用栈
- 找关键分支
- 找输入校验点
工具!!!!
按照做题步骤来分
查壳工具:
windows/linux逆向工具
神器专武!!!!!!!!-------IDA
在52pojie论坛去下载
插件下载:
在github上有许多插件,可以自行探索下载,下载后的插件放在ida安装目录下的plugins文件夹即可使用,常见必备插件findcrypt、patching,其他插件用到的时候可以去自行下载体验,初学者这两个插件足以
动态调试工具
IDA自身可以动态调试,下次课会有另一位学长给大家介绍
然后我们常用的是X64/X32dbg这个软件(汇编语言)
文件编辑器
010editor
环境配置!!!!
逆向其实不需要任何环境,只要配置c++跟python的环境目前就足够了
首先搞清楚什么是编译器(Compiler)跟IDE(Integrated Development Environment,集成开发环境)


GCC编译器
gcc 是 GNU 编译器集合,用于编译 C、C++ 等语言程序。选项 -l 和 -I 是常用的编译器参数,用于链接库和指定头文件路径。
MinGW
MinGW(Minimalist GNU for Windows)是一个轻量级的开发环境,主要用于在Windows系统上构建本地应用程序。它提供了GCC编译器工具链的支持,包括C、C++、Fortran等语言的编译器,以及相关的库和工具。MinGW的一个重要分支是MinGW-w64,它扩展了对64位系统和新API的支持。
其他编译器不做详细介绍,想学可以在网上自行寻找
python配置
推荐使用pycharm或者vscode去写python,相关配置方法可以在网上直接搜到保姆级教学,十分简单易懂
conda管理python版本
python逆向时很多题目都是要特定版本的python,用conda虚拟环境可以同时让这些版本的python存在且不发生冲突

conda常见命令:


最后给出学习建议
一定一定要自己手写代码,代码能力永远是第一位的,包括C/C++、python、java、javascripts
多刷题
题目在buuctf,xctf,西电的moectf(适合新生去打)上刷都可以
多看文章
看雪论坛、吾爱破解、csdn等等都有很多高质量不错的文章
Comments NOTHING