1. 题目背景与环境准备
这道CTF逆向题目来自2020年羊城杯比赛,题目名为"babyre"。题目主要考察了逆向工程中常见的加密算法分析和自修改代码(SMC)处理技巧。我们先从环境搭建开始讲起。
在Kali Linux环境下运行题目提供的二进制文件时,会遇到一个常见错误:
code复制./re: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
这是因为程序依赖了OpenSSL 1.0.0版本的动态链接库。解决方法很简单:
code复制sudo apt-get install libssl1.0.0
如果找不到这个包,也可以考虑使用以下替代方案:
- 从源码编译OpenSSL 1.0.0并安装
- 使用LD_LIBRARY_PATH指定库路径
- 在Docker容器中运行(推荐)
注意:在实际CTF比赛中,建议使用Docker容器来隔离不同版本的库依赖,避免污染主机环境。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 初步分析与DES解密
2.1 主函数逻辑分析
使用IDA Pro打开二进制文件,可以看到主函数结构相对清晰。程序主要使用了DES加密算法,采用CBC模式。关键数据如下:
- 密文存储在byte_6040C0数组
- 初始向量(IV)存储在v7变量
- 密钥长度为8字节(DES标准密钥长度)
通过动态调试(推荐使用gdb配合pwndbg插件),我们可以输入任意16个字符作为测试输入,然后观察内存中的密钥数据。
2.2 密钥提取与解密
在动态调试过程中,我们发现密钥实际上只使用了8位(虽然输入了16个字符)。通过内存查看,可以提取出完整的密钥:
python复制key = [0xAD, 0x52, 0xF2, 0x4C, 0xE3, 0x2C, 0x20, 0xD6]
使用Python的Crypto库进行DES解密:
python复制from Crypto.Cipher import DES
byte_6040C0 = [
0x0A, 0xF4, 0xEE, 0xC8, 0x42, 0x8A, 0x9B, 0xD
