• [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)

  • 相关阅读:
    7-1 N个数求和
    3662. 最大上升子序列和
    树状数组
    堆优化Dijkstra java模板
    皮亚诺曲线距离
    最长公共子序列(计数问题)
    最小路径覆盖
    极角排序
    2619. 询问
    Hessian矩阵与局部极小值
  • 原文地址:https://www.cnblogs.com/Tsuiyields/p/13732386.html
Copyright © 2020-2023  润新知