[WP]XCTF-simple-check-100

1、载入 IDA 中,我使用的是 32 位的 ELF 文件,那个 exe 文件有些问题。进入 main 函数。

 2、进入 interesting_function,首先将四个一组的组合的值与 0xDEADBEEF 进行异或操作,得到的结果再与 flag_data 中的值进行异或得到 result。

我们从 main 函数中可以得知传入 interesting_function 的参数为 v8,查看内存可以得到 v8~v37(v37未被使用到,因为两层循环中用到的值为 28 个)的相对分布如下

 

3、需要注意到在内存中为小端存储

 

 4、分组一起异或,当然也可以分开分别进行异或,我这里采取的是第二种,之后写出 EXP

flag_data = [0xDC, 0x17, 0xBF, 0x5B, 0xD4, 0x0A, 0xD2, 0x1B, 0x7D, 0xDA, 0xA7, 0x95, 0xB5, 0x32, 0x10, 0xF6, 0x1C, 0x65, 0x53, 0x53, 0x67, 0xBA, 0xEA, 0x6E, 0x78, 0x22, 0x72, 0xD3]
v = [0x54, 0xC8, 0x7E, 0xE3, 0x64, 0xC7, 0x16, 0x9A, 0xCD, 0x11, 0x65, 0x32, 0x2D, 0xE3, 0xD3, 0x43, 0x92, 0xA9, 0x9D, 0xD2, 0xE6, 0x6D, 0x2C, 0xD3, 0xB6, 0xBD, 0xFE, 0x6A, 0x13]
s = 0xDEADBEEF
flag = ''
for i in range(7):
    a = v[i*4] ^ 0xEF
    b = v[i*4+1] ^ 0xBE
    c = v[i*4+2] ^ 0xAD
    d = v[i*4+3] ^ 0xDE
    t = [a, b, c, d]
    r = ''
    print(t)
    for j in range(4):
        k = t[j] ^ flag_data[4*i+j]
        r = chr(k) + r
    flag += r
print(flag)

原文地址:https://www.cnblogs.com/Tsuiyields/p/13732386.html