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