CTF中的逆向工程-从0到0.01
CTF中的逆向工程-从0到0.01
什么是逆向工程呢?
CTF中的逆向工程(Reverse Engineering)是指通过分析目标程序的机器代码,还原出其设计和功能的过程。在CTF比赛中,逆向工程通常用于解密密码、绕过安全机制、理解恶意软件等方面。
逆向工程可以涉及到以下几个方面:
静态分析:使用反汇编工具(如IDA Pro、Ghidra)将程序的二进制代码转换为可读性较高的汇编代码,以便理解程序的结构和功能。
动态分析:通过调试器(如GDB、OllyDbg、x64dbg)来执行程序,并跟踪程序在运行过程中的行为,包括寄存器的变化、内存的读写等,以获取更多有关程序行为的信息。
逻辑分析:分析程序的算法、数据结构和控制流程,以识别关键的功能点和漏洞。
密码破解:通过逆向分析密码算法和相关的密钥生成过程,尝试还原出原始的密码或者找出密码的漏洞。
漏洞挖掘:通过逆向分析程序的代码和运行行为,寻找其中的安全漏洞,例如缓冲区溢出、格式字符串漏洞等。
IDA Pro的使用
IDA Pro几乎是逆向佬必备的一个工具,本文将简单介绍一些使用方法。
快捷键
按键 | 功能 |
---|---|
SHIFT + F12 | 打开字符串窗口,一键查找所有字符串 |
CTRL + F12 | 打开函数调用图 |
CTRL + X | 跳转到对操作数的交叉引用 |
ESC | 在反汇编窗口可回退到上一操作的视图 |
F5 | 一键反汇编 |
D | 在反汇编窗口中可以将代码转换成数据 |
C | 在反汇编窗口中可以将数据转换成代码 |
P | 在反汇编窗口中可以生成一个新函数 |
常见的一些算法
换表BASE64
这个算法在另一篇文章中有所涉及,这里不过多赘述。
传送门:换表Base64 - Cristrik010 (dotfogtme.ltd)
RC4
该算法特点见下图,该加密函数是需要密钥的,所以我们需要知道密钥才能调用RC4加密函数。
XOR
这个的特点用一段代码表示一下:
a = 4^5
print(f"a ^ 4 = {a ^ 4}" )
print(f"a ^ 5 = {a ^ 5}" )
# 输出:
# a ^ 4 = 5
# a ^ 5 = 4
花指令
什么是花指令?
花指令简单来说就是一段垃圾代码,不会影响程序运行,但是会影响反编译。
手动清除花指令
步骤可以总结为:找到花指令然后nop
以2023MoeCTF的一道题为例
找到main
函数,然后反编译得到
从这里我们可以知道flag为36位。下面两个函数应该与flag有关,我们点进去看看。
可以看到应该就是花指令了,我们进入反汇编窗口看看。
然后我们手动清除,选中00460612
然后按D
将代码转换成数据,然后右键nop
掉。
然后选中变黄的代码,按C
转换成代码。
最后找到函数开始处,按P
生成新函数。
回到主函数,发现反汇编已经正常。
这道题有两个花指令,另一个处理方法相同。