reverse
观察sub_7FF712C21AB0这个函数的实现过程,刘大神说是xtea算法,我对比了一下实现方法,发现有一些差异的地方
从这里看到一个特征,然后百度到了一篇文章
这里面有xxtea的算法,似乎对上了,在调试的时候,发现这个函数的key是取输入的前四个字符,所以大胆猜测是flag
最下面是字符串比较,以及v18和v19的算法


提取最终字符串,脚本很容易还原出最初的内容
1 | # -*- coding: UTF-8 -*- |
然后使用xxtea解密
1 | # -*- coding: UTF-8 -*- |
easyRE
这道题应该是签到题吧,看到字符串中有很长的一段经过很多次base64编码的一段代码:返回了一个链接:
https://bbs.pediy.com/thread-254172.htm
在这个链接里我们可以看到一种思路

也就是诱导攻击者去认为他觉得正确的地方,这道题比较人性化的地方是,你在算出第一个值的时候,他提示你:
1 | Info:The first four chars are `flag` |
而且可能流程并不在我们算的地方,那么我们可以看到sub_400D35这个函数中有一些处理
很明显是一个数组的比较,第一个字符和第四个字符,分别和f g进行异或,而这个数组的长度刚好是4,所以稍微偏了一点脑洞
1 | #v5=[0x85,0xaa,0x12,0xf5] |
childRE
首先是输入31个字符串

在调试时发现v6正常状态下怎么都不会是62
修改程序流程之后,很容易算出来outputString的值:
1 | # -*- coding: UTF-8 -*- |
竟然返回了这样一个字符串
1 | private: char * __thiscall R0Pxx::My_Aut0_PWN(unsigned char *) |
某大神提示是C++的修饰名,遂百度了一下C++的修饰名规则

这里直接在vs新建一个工程
写入如下代码
1 | // b.cpp : 定义控制台应用程序的入口点。 |
然后编译后,使用ida打开,成功获得了一个修饰名

flag为?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z的md5值