刘功瑞的博客

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

攻防世界 XCTF Reverse elrond32 Writeup

image.png


ida打开 主程序

image.png

第一个if

image.png

当a2=0时,a1必须等于i,然后跳转到sub_8048414函数

image.png

计算一下第二个是多少,a1+1 意思是第二个字符,第一步的a2=0,第二步的a2=7*(0+1)%11=7,case==7的时候a1必须为s

以此类推,字符串为isengard

接着计算第二个函数的算法

image.png

把这个数组弄下来

image.png

然后逆推计算即可

a = 'ie ndags r'
x = 0
s = []
for i in range(8):
    x = 7 * x % 11
    print x
    s.append(a[x])
    x += 1
print(''.join(s))

arr = [0x0F, 0x1F, 0x4, 0x9, 0x1C, 0x12, 0x42, 0x9, 0x0C, 0x44, 0x0D, 0x7, 0x9, 0x6, 0x2D, 0x37, 0x59, 0x1E, 0x0, 0x59,
       0x0F, 0x8, 0x1C, 0x23, 0x36, 0x7, 0x55, 0x2, 0x0C, 0x8, 0x41, 0x0A, 0x14]
s = 'isengard'
k = 0
flag = ''
for i in arr:
    c = i ^ ord(s[k % 8])
    flag += chr(c)
    k = k + 1
print flag
#flag{s0me7hing_S0me7hinG_t0lki3n}


发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.