这是一道内部测试的ctf题目,源程序的md5是684294011CE93D61D7B7EB41AEBE08BD


分析程序

直接运行程序会发现程序直接退出了

image-20200417170514463.png

直接利用 ida 分析main函数,发现程序会打开一个文件 KERNEL.dll

image-20200417170629124.png

  1. 分析下去应该是会读文件
  2. 代码设计到了大量c++的函数调用,ida识别不是别正确
  3. 接下来配和 动态调试来

动态调试

首先根据动态调试可以发现v25应该就是从文件读取的字符串

image-20200417203035467.png

接着发现 主程序会以字符\t对输入字符串进行切割

程序接下来会将 两个子字符串分别保存到 ptr_str - 28ptr_str

image-20200417203743169.png

核心比对

继续阅读源码会发现如下的关键比对源码

image-20200417203917358.png

这里的 ptr_str_2实际上与之前 ptr_str 是同一个指针

程序逻辑

那么到这里程序就清晰了:

  1. 程序启动后会读取 文件KERNEL.dll中的数据到内存中,这里称为 总字符串
  2. 接着按照 \t总字符串进行切割,切割出sub1sub2
  3. sub1就是用户名,sub2就是密码
Last modification:April 17, 2020
如果觉得我的文章对你有用,请随意赞赏