题目名称
reverse2
题目描述
File: XDCTF2.exe
Size: 195584 bytes
File Version: 1.0.0.1
Modified: Tuesday, March 07, 2017, 00:11:41
MD5: 1B0EA0BD4B8DA116C7D590F05BE6692A
SHA1: 81174B9D39D467308818B0BB0C99D427ED80EB6C
CRC32: 4D44CF29
先点击程序运行测试,发现一闪而过。回到cmd下面进行运行。命令行运行程序,什么也没有输出。
于是觉得奇怪,一般的破解逆向程序都有输入输出提示,或者界面等消息。
于是还是先暂时用IDA载入测试一下。找到代码部分,大理一阳指F5
进入main函数。注意红色标记部分,函数入口。
又出现了多线程,注意此处我们用的是静态分析工具,代码没有执行,
不会出现逻辑分支干扰,运行错误。如果是动态分析可能已经跟踪偏了。
注意此段参数数量为1,sub_405000经过分析是计算字符串长度。
类似于我们常见的函数strlen
这是字符串计算长度函数实体部分,里面用结束\0作为判断标志位。
返回值是result
输入参数1运算,输入参数2运算,0x38,0x66文件参数运算
Name运算完成之后会得到一个TEMP字符串
lpBuffer接收返回的路径
byte_42DECC进行异或运算之后得到读写文件标记。
注意不同的逻辑判断,参数数量1,2,3。发现在3的时候有参数数量限制,长度和比较规则。
由此判断输入必须两个参数,长度为10,而且第一个解密之后和第二个相等。
算法主要函数,以及文件写入函数路径TEMP
注意释放文件函数,由于V13必须为真,才能进入数据文件写入调用阶段。
于是网上追溯,分析获取参数1和参数2值为
user:xidian2016
password:yjejbo3127
才可以生成文件。
生成 C:\Users\ROOT\AppData\Local\Temp\firefox.tmp文件
转向研究释放的文件,一般思路直接解压或者运行不行或者错误的话,
然后点击十六进制查看,发现类似压缩包文件被破坏,于是采用修复RAR测试
修复之后测试成功,但是解压需要密码。于是猜想前面的用户和密码进行尝试,
尝试了很多次,终于发现解压密码是user+pass拼接而成。于是得到解压后的
文件内容。
解压出flag.info文件。我勒个去,还是有文件,不过根据名称应该距离答案很近了。
再继续研究文件类型和内容。
尝试了各种方法,包括修复文件头。还是没有找到,不甘心,想啊想。发现文件的尾部特征,
非常像wav音频文件,可以找个各类文件结构头标志参考。没有想到竟然是倒序存储。
但是却没有完整,于是还是修复,然后写代码实现流倒叙存储。于是乎打开就听到了
美妙的声音。答案就在音频里面。
修复好文件,然后自己编码写程序实现二进制流倒叙存储
倒序输出结果如下。播放,仔细听答案,多听几遍测试。
输出结果:
XDFLAG{A1B2C3SUCCESSD4F5G6}
此题目没有提示,没有任何输出。先得逆向分析查看程序逻辑和功能。
要识别出干扰的花指令和去除冗余的代码部分。中间出现一些的错误分支。
同时有文件释放写入。此处信息关键,主要注意学习不同文件尾部和
头部特征,以及文件流式操作,最后编码逆序实现成功解题,
拿到音频答案文件。