这是一道内部测试的ctf题目,源程序的md5是684294011CE93D61D7B7EB41AEBE08BD
分析程序
直接运行程序会发现程序直接退出了
直接利用 ida 分析main函数
,发现程序会打开一个文件 KERNEL.dll
- 分析下去应该是会读文件
- 代码设计到了大量c++的函数调用,ida识别不是别正确
- 接下来配和 动态调试来
动态调试
首先根据动态调试可以发现v25
应该就是从文件读取的字符串
接着发现 主程序会以字符\t
对输入字符串进行切割
程序接下来会将 两个子字符串分别保存到 ptr_str - 28
和ptr_str
核心比对
继续阅读源码会发现如下的关键比对源码
这里的 ptr_str_2
实际上与之前 ptr_str
是同一个指针
程序逻辑
那么到这里程序就清晰了:
- 程序启动后会读取 文件
KERNEL.dll
中的数据到内存中,这里称为总字符串
- 接着按照
\t
最总字符串
进行切割,切割出sub1
与sub2
sub1
就是用户名,sub2
就是密码