强网杯 2024 All RE wp
字数 1004 2025-08-20 18:17:53

强网杯 2024 All RE WP 逆向工程详细解析


1. MIPS逆向分析

题目特征

  • 使用QEMU模拟器加载MIPS二进制文件,存在反调试陷阱(调试/attach状态下无法获取关键异或值)。
  • 虚假Flag:直接解MIPS二进制会得到假Flag。

关键步骤

  1. 定位关键函数

    • IDA中搜索23000,定位校验函数,交叉引用发现对Flag头部和长度的检查。
    • 魔改RC4加密:对输入字符串进行加密并异或操作。
  2. 解密脚本

    #include <stdio.h>
    #include <malloc.h>
    unsigned char N_str[] = {0xDE, 0xAD, 0xBE, 0xEF};
    unsigned char map1[256], map2[256];
    
    void swap(unsigned char *inp, int x, int y) {
        unsigned char ch = inp[x];
        inp[x] = inp[y];
        inp[y] = ch;
    }
    
    void init() {
        for (int i = 0; i < 256; i++) {
            unsigned char v3 = ((((i << 7) | (i >> 1)) << 6) ^ 0xC0 | (((i << 7) | (i >> 1)) >> 2) ^ 0x3B) ^ 0xBE;
            unsigned char out = ((((16 * (((32 * v3) | (v3 >> 3)) ^ 0xAD)) | ((((32 * v3) | (v3 >> 3)) ^ 0xAD) >> 4)) ^ 0xDE) >> 5) | (8 * (((16 * (((32 * v3) | (v3 >> 3)) ^ 0xAD)) | ((((32 * v3) | (v3 >> 3)) ^ 0xAD) >> 4)) ^ 0xDE)));
            map1[out] = i;
            map2[i] = out;
        }
    }
    
    unsigned char *de_rc4(unsigned char *inp) {
        // RC4解密逻辑(略)
        // 关键操作:交换字节、异或0xA、解密映射
    }
    
    int main() {
        init();
        unsigned char cip[] = {0xC4, 0xEE, 0x3C, 0xBB, 0xE7, 0xFD, 0x67, 0x1D, 0xF8, 0x97, 0x68, 0x9D, 0x0B, 0x7F, 0xC7, 0x80, 0xDF, 0xF9, 0x4B, 0xA0, 0x46, 0x91};
        swap(cip, 12, 16);
        swap(cip, 7, 11);
        for (int i = 0; i < 22; i++) cip[i] ^= 0xa;
        unsigned char *m = de_rc4(cip);
        printf("flag{%.*s}", 22, m);
        return 0;
    }
    

    Flag: flag{QeMu_r3v3rs3in9_h@ck6}


2. REMEM (AES白盒逆向)

题目特征

  • ELF文件修复后,程序通过mmap动态加载Shellcode片段执行。
  • 收集所有Shellcode片段后,识别为AES白盒加密。

解题步骤

  1. 收集Shellcode

    • 动态调试获取所有mmap的Shellcode片段(如0x7F722B883000处的指令流)。
    • 整理出AES的轮密钥加、字节代换、行移位等操作。
  2. 差分故障分析

    • 通过注入故障获取中间状态,推导出密钥。
    • 关键脚本(Python):
      from struct import pack
      flag = pack(">I",0x33636662) + pack(">I",0x336f1d5 + 0x5e2f4391) + ...  # 拼接各part
      print("flag{" + flag.hex() + "}")
      

    Flag: flag{3cfbaf5f9a18382aa23}


3. EZ_VM (虚拟化逆向)

题目特征

  • 实现自定义虚拟机,系统调用通过syscalls/nt/64/表恢复符号。
  • 手动定义虚拟机上下文结构体(包含寄存器、内存等)。

逆向步骤

  1. 结构体恢复
    struct context {
        _QWORD regs[16];  // 寄存器
        _QWORD stack_base; // 栈基址
        _QWORD opcode;     // 操作码
    };
    
  2. 动态跟踪
    • 对输入流下内存断点,记录数据流变化(如AES行移位特征)。

4. SNAKE (贪吃蛇算法)

题目特征

  • 输入序列需最小化移动步数,通过箱子的移动次数生成Flag的MD5。

解题步骤

  1. 自动求解

    • 使用开源推箱子求解器配置地图,获取最优路径。
    • 移动序列:2,12,13,9,21,13,25,31,3
  2. Flag生成

    import hashlib
    moves = [2,12,13,9,21,13,25,31,3]
    md5 = hashlib.md5(','.join(map(str, moves)).encode()).hexdigest()
    print("flag{" + md5 + "qwb!}")
    

5. SOLVE2-APK (Android逆向)

题目特征

  • JEB反编译关键函数,发现混淆严重的TEA变种加密。

解密流程

  1. TEA解密核心
    void decrypt(uint32_t v[2], uint32_t k[4]) {
        uint32_t sum = 0x61C88647 * 32;
        for (int i = 0; i < 32; i++) {
            v[1] -= ((v[0] << 4) ^ (v[0] >> 5)) + v[0] ^ (sum + k[(sum >> 11) & 3]);
            sum += 0x61C88647;
            v[0] -= ((v[1] << 4) ^ (v[1] >> 5)) + v[1] ^ (sum + k[sum & 3]);
        }
    }
    
  2. 多层校验
    • 第一层:TEA解密后校验。
    • 第二层:后32字节异或校验。

Final Flag: flag{iT3N0t7H@tH@E6D0YOV7hInkS0}


总结

  • 工具链:IDA/QEMU/JEB/BPFtrace/Frida。
  • 技巧:动态插桩、差分分析、结构体恢复、自动化求解。
  • 关键点:魔改算法识别、反调试绕过、数据流跟踪。
强网杯 2024 All RE WP 逆向工程详细解析 1. MIPS逆向分析 题目特征 使用QEMU模拟器加载MIPS二进制文件,存在反调试陷阱(调试/attach状态下无法获取关键异或值)。 虚假Flag:直接解MIPS二进制会得到假Flag。 关键步骤 定位关键函数 IDA中搜索 23000 ,定位校验函数,交叉引用发现对Flag头部和长度的检查。 魔改RC4加密:对输入字符串进行加密并异或操作。 解密脚本 Flag : flag{QeMu_r3v3rs3in9_h@ck6} 2. REMEM (AES白盒逆向) 题目特征 ELF文件修复后,程序通过mmap动态加载Shellcode片段执行。 收集所有Shellcode片段后,识别为AES白盒加密。 解题步骤 收集Shellcode 动态调试获取所有mmap的Shellcode片段(如 0x7F722B883000 处的指令流)。 整理出AES的轮密钥加、字节代换、行移位等操作。 差分故障分析 通过注入故障获取中间状态,推导出密钥。 关键脚本(Python): Flag : flag{3cfbaf5f9a18382aa23} 3. EZ_ VM (虚拟化逆向) 题目特征 实现自定义虚拟机,系统调用通过 syscalls/nt/64/ 表恢复符号。 手动定义虚拟机上下文结构体(包含寄存器、内存等)。 逆向步骤 结构体恢复 动态跟踪 对输入流下内存断点,记录数据流变化(如AES行移位特征)。 4. SNAKE (贪吃蛇算法) 题目特征 输入序列需最小化移动步数,通过箱子的移动次数生成Flag的MD5。 解题步骤 自动求解 使用开源推箱子求解器配置地图,获取最优路径。 移动序列: 2,12,13,9,21,13,25,31,3 。 Flag生成 5. SOLVE2-APK (Android逆向) 题目特征 JEB反编译关键函数,发现混淆严重的TEA变种加密。 解密流程 TEA解密核心 多层校验 第一层:TEA解密后校验。 第二层:后32字节异或校验。 Final Flag : flag{iT3N0t7H@tH@E6D0YOV7hInkS0} 总结 工具链 :IDA/QEMU/JEB/BPFtrace/Frida。 技巧 :动态插桩、差分分析、结构体恢复、自动化求解。 关键点 :魔改算法识别、反调试绕过、数据流跟踪。