polar2024冬季个人挑战赛 re部分题解
字数 759 2025-08-22 18:37:15

Polar2024冬季个人挑战赛RE题解教学文档

题目1:NSpark壳脱壳与解密

脱壳步骤

  1. 使用x32dbg打开程序
  2. 按一次F9进入程序领空
  3. 一路F8单步执行
  4. 遇到两个loop时使用F4跳过
  5. 继续按F8直到跳出壳
  6. 在此处进行dump操作

解密分析

  • 程序仅使用XOR加密
  • 加密数据数组:
    a = ['lfkmqw', 'nqT', 'kixS', 'ka9jR', 'h|>cQ', 'g<}<']
    
  • 解密脚本:
    a = ['lfkmqw', 'nqT', 'kixS', 'ka9jR', 'h|>cQ', 'g<}<']
    for i in range(len(a)):
        y = 0xa + i
        print(''.join([chr(ord(x) ^ y) for x in a[i]]), end='')
    

题目2:ASPack壳脱壳与解密

脱壳步骤

  1. 使用x32dbg打开程序
  2. 按F9进入程序领空
  3. 一路F7单步执行
  4. 遇到jne指令时双击它,然后按F4跳入
  5. 跳到ret指令后再跳一次到达OEP
  6. 直接dump程序

解密分析

  • 主要加密逻辑:
    BOOL __cdecl sub_401738(int a1) {
        char Str1[50];
        int i;
    
        if(sub_40172E()) {
            sub_40160C(aDetectedDebugg);
            return 0;
        } else {
            for(i = 0; i <= 31; ++i)
                Str1[i] = *(_BYTE *)(i + a1) ^ 0xC;
            Str1[32] = 0;
            return strcmp(Str1, &Str2) == 0;
        }
    }
    
  • 解密脚本:
    a = '>4i44oo4?i=n>:m;8m4=oo4i;>?4>h9m'
    print(''.join([chr(ord(i) ^ 0xc) for i in a]))
    

题目3:UPX脱壳与解密

脱壳步骤

  • 直接使用UPX工具脱壳

解密分析

  • 第一个加密:直接加密flag
  • 第二个加密:处理字符串"hwGwg88Y"
    • 解密脚本:
      enc = list('"hwGwg88Y')
      for i in range(len(enc)):
          enc[i] = chr(ord(enc[i]) - i - 1)
      enc.reverse()
      print(''.join(enc))
      
  • 最终结果为"P01arCtf!",需要再进行MD5加密

题目4:DELF解密

解密分析

  • 加密逻辑:
    void __fastcall encrypt(const char *a1) {
        char v1;
        int v2;
        int j;
        int i;
    
        v2 = strlen(a1);
        for(i = 0; i < v2; ++i)
            a1[i] ^= 0x5Au;
        for(j = 0; j < v2 - 1; j += 2) {
            v1 = a1[j];
            a1[j] = a1[j + 1];
            a1[j + 1] = v1;
        }
    }
    
  • 解密步骤:
    1. 先交换相邻字符
    2. 然后进行XOR 0x5A操作
  • 解密脚本:
    a = [0x32, 0x0e, 0x05, 0x3f, 0x34, 0x3f, 0x05, 0x3e, 0x3c, 0x35, 0x2e, 0x05, 0x3f, 0x32, 0x2d, 0x05, 0x28, 0x35, 0x3e, 0x36, 0x33, 0x05, 0x05, 0x29, 0x33, 0x38, 0x3b, 0x34, 0x23, 0x28]
    
    for i in range(0, len(a) - 1, 2):
        v1 = a[i]
        a[i] = a[i + 1]
        a[i + 1] = v1
    
    for i in range(len(a)):
        print(chr(a[i] ^ 0x5a), end='')
    

题目5:MacOS逆向分析

分析过程

  1. 第一个循环(for)判断奇偶数,v28等于3
  2. 第二个循环(while)将每一位输入减48
  3. 第三个循环(for)进行交换操作,v19=6
  4. 第四个循环(for)进行数学运算:v11 = 8 * v10 + 2 * v10 (相当于乘以10)
  5. 第五个循环比较结果

解密脚本

a = [0x5A, 0x14, 0x0A, 0x32, 0x00, 0x00, 0x14]
for i in range(len(a)):
    a[i] //= 10
a.reverse()
print(''.join([chr(i + 48) for i in a]))
  • 最后需要对结果进行MD5加密

总结

  1. 脱壳技术要点:

    • 识别不同壳的特征
    • 掌握x32dbg的基本操作(F7/F8/F9/F4)
    • 找到OEP的正确方法
  2. 解密技术要点:

    • 识别简单的XOR加密
    • 处理字符交换操作
    • 逆向数学运算
    • 处理数组反转操作
  3. 通用技巧:

    • 静态分析与动态调试结合
    • 编写Python脚本自动化解密过程
    • 注意最终可能需要MD5等哈希操作
Polar2024冬季个人挑战赛RE题解教学文档 题目1:NSpark壳脱壳与解密 脱壳步骤 使用x32dbg打开程序 按一次F9进入程序领空 一路F8单步执行 遇到两个loop时使用F4跳过 继续按F8直到跳出壳 在此处进行dump操作 解密分析 程序仅使用XOR加密 加密数据数组: 解密脚本: 题目2:ASPack壳脱壳与解密 脱壳步骤 使用x32dbg打开程序 按F9进入程序领空 一路F7单步执行 遇到jne指令时双击它,然后按F4跳入 跳到ret指令后再跳一次到达OEP 直接dump程序 解密分析 主要加密逻辑: 解密脚本: 题目3:UPX脱壳与解密 脱壳步骤 直接使用UPX工具脱壳 解密分析 第一个加密:直接加密flag 第二个加密:处理字符串"hwGwg88Y" 解密脚本: 最终结果为"P01arCtf !",需要再进行MD5加密 题目4:DELF解密 解密分析 加密逻辑: 解密步骤: 先交换相邻字符 然后进行XOR 0x5A操作 解密脚本: 题目5:MacOS逆向分析 分析过程 第一个循环(for)判断奇偶数,v28等于3 第二个循环(while)将每一位输入减48 第三个循环(for)进行交换操作,v19=6 第四个循环(for)进行数学运算: v11 = 8 * v10 + 2 * v10 (相当于乘以10) 第五个循环比较结果 解密脚本 最后需要对结果进行MD5加密 总结 脱壳技术要点: 识别不同壳的特征 掌握x32dbg的基本操作(F7/F8/F9/F4) 找到OEP的正确方法 解密技术要点: 识别简单的XOR加密 处理字符交换操作 逆向数学运算 处理数组反转操作 通用技巧: 静态分析与动态调试结合 编写Python脚本自动化解密过程 注意最终可能需要MD5等哈希操作