0
点赞
收藏
分享

微信扫一扫

BUUCTF [De1CTF2019]cplusplus

以沫的窝 2022-01-04 阅读 80

拿到文件,IDA打开,进入主函数main():

通过分析,函数第60行为标志性的获取输入函数。

然后在第104行出现了关键函数判断:

 其中v47是我们输入的字符串,所以第108行和109行也是关键函数,对我们的输入进行了加密。

先进入104行sub_140005910函数:

函数中有三个sub_140005A90函数 ,通过动态调试发现,就是将我们输入的字符串每一个都转化为十六进制数。

进入sub_140005A90函数:

 因为在关键判断的函数中一共有三个将输入的字符转为16进制的函数,所以猜想flag一共有三段,并且发现,在关键函数sub_140005910中:

 

 发现了两个判断,动调一下:

 

 对应两个判断的汇编语句,然后就对应:

所以flag的格式应该是123@123#123 

接下来我们需要找到这三个数,在main函数中:

先找到sub_1400029B0函数:

 这里有个判断,如果不正确就会exit,所以,需要让这个语句成立,也就是flag的第一个数,

我们通过动态调试和爆破修改传入的参数的值,最终得到0x4e,即78。

再看这五个判断:

这五个判断可以得到五位数:

a = "eQDtW91a0qwryuLZvbXCEK8VghjklzxIOPASBNM2RsdfF56TYU34p7ioGHJcnm"
b = "De1ta"
c = ""
for i in range(len(b)):
    c += str(a.index(b[i]))
print(c)

# 20637

得到flag中间的五位。

在main函数的147行: 

也是一个判断语句,如果不成立就会exit,所以这句也必须成立。

通过动态调试:

得到v47为0x22

爆破一下:

for v47 in range(10000):
    if (v47%0x22 == 12) and (v47//0x22 == 3):
        print(v47)
#114

最终得到flag:

flag{78@20637#114}
举报

相关推荐

0 条评论