刘功瑞的博客

有一天你突然惊醒,发现这一切,都只不过是一场梦。

攻防世界 XCTF Reverse hackme Writeup(&0xff,positive sp value has been found)

image.png

ida生成伪代码报错,百度一下,解决方法:

image.png


image.png

然后点确定,再次按F5,可以看到报错的地址 400E74

image.png


然后按g,输入地址400E74跳转到该位置

image.png

在上一行点击光标,然后按alt+k,默认弹出的数值是8,修改为0,确定保存

image.png


可以看到左侧地址栏没有负数了,这样就可以按f5生成伪代码了

image.png

image.png

可以看到主要函数和算法,外层循环22次,内层循环10次, sub_406D90系统自带生成随机数的函数,大概意思是生成十次随机数对22取余数后进行验证??

只需要把22个字符全部验证一边就好了,不用管那个10次的循环。


arr = [0x5f, 0x0f2, 0x5e, 0x8b, 0x4e, 0x0e, 0x0a3, 0x0aa, 0x0c7, 0x93, 0x81, 0x3d, 0x5f, 0x74, 0x0a3, 0x9, 0x91, 0x2b,
       0x49, 0x28, 0x93, 0x67, 0x0, 0x0]
flag = ''
for i in range(22):
    v4 = i + 1
    v8 = 0
    v9 = 0
    while v8 < v4:
        v8 = v8 + 1
        v9 = 1828812941 * v9 + 12345
    v6 = arr[i]
    #print v6 ^ v9
    c = (v6 ^ v9) & 0xff
    #print c
    flag += chr(c)
print flag


发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.