2019红帽杯-CHILDRE(c++逆向+函数调用约定+c++修饰符转换+异或+黑盒分析+爆破)
[2019红帽杯]CHILDRE(c++逆向+函数调用约定+c++修饰符转换+异或+黑盒分析+爆破)
这里就直接用z3写脚本将我们的outoutstring爆出来。
outputString = private: char * __thiscall R0Pxx::My_Aut0_PWN(unsigned char *)
这个函数比关键。
官方文档,大致可以知道这个函数的作用就是将我们的flag进行转换,转换成了c++函数模式。也就是说我们的flag就是outoutstring,这个函数的C++函数名修饰
对于C++函数名修饰,这个需要了解函数调用约定
了解之后,我们可以将未转换的outoutstring得出:?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z
通过这里,我们可以判断出我们的flag有着31位
对于这一堆函数,我们进行动态调试,我们输入有序字母。
进入这个函数,我们可以发现
可以发现我们输入的数据被打乱了
我们输入31个有序数据,12345ABCDEFGHIJKLMNOPQRSTUWXYZ,
得出乱序后的表,然后写脚本进行还原。
1 |
|
得出Z0@tRAEyuP@xAAA?M_A0_WNPx@@EPDP
然后将我们函数进行md5加密即可
评论