ida打开 主程序
第一个if
当a2=0时,a1必须等于i,然后跳转到sub_8048414函数
计算一下第二个是多少,a1+1 意思是第二个字符,第一步的a2=0,第二步的a2=7*(0+1)%11=7,case==7的时候a1必须为s
以此类推,字符串为isengard
接着计算第二个函数的算法
把这个数组弄下来
然后逆推计算即可
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}