2025 第一届启航杯 RE wp

前言:明天过年了 提前祝各位师傅新年快乐 新的一年所有比赛都能AK!

rainbow

ida打开附件 发现关键函数

rainbow

跟进发现主要逻辑就是一个xor 90

rainbow-1

密文压缩包里给了 直接赛博厨子跑一下得到flag

rainbow-2

QHCTF{a8226103-5a9a-4fa7-abcf-dea438a7ce78}

小明的note

查壳发现有upx壳 upx -d脱掉

note

ida打开附件 发现逻辑就是将输入的flag跟s2作比较

note-1

而s2在上一个函数跟dest和v6做了xor的运算

note-2

所以直接起调试 在比较的地方下个断点 直接看s2的值即可

note-4

note-5

或者也可以模拟一下decrypt的逻辑写一个脚本解密一下s2

密文

note-3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
enc = [  
0x12, 0x7D, 0xE1, 0x2C, 0x01, 0x4A, 0xC4, 0x45, 0x78, 0x5E,
0xC9, 0x46, 0x78, 0x5D, 0x83, 0x0F, 0x37, 0x12, 0xD0, 0x45,
0x63, 0x42, 0xD5, 0x57, 0x76, 0x14, 0xDE, 0x06, 0x6E, 0x04,
0x8F, 0x3E, 0x50, 0x21, 0xE1, 0x3B, 0x53, 0x72, 0xB7, 0x6C,
0x5D, 0x79, 0xF7
]
key = 0x7CA13742
flag = []
for i in range(len(enc)):
flag.append((key >> ((i % 4) * 8)) & 0xFF ^ enc[i])
flag[i] ^= (i + 1)
print(chr(flag[i]), end='')
#QHCTF{b13cc67d-cd7b-4cc3-9df1-1b34cc4c186d}

checker

ida打开附件 发现主要函数

checker

跟进可以发现逻辑就是对输入的flag进行异或0x23

checker-1

密文

checker-2

直接异或回去即可

1
2
3
4
5
6
7
8
9
enc = [0x72, 0x6B, 0x60, 0x77, 0x65, 0x58, 0x46, 0x46, 0x15, 0x40,  
0x14, 0x41, 0x1A, 0x40, 0x0E, 0x46, 0x14, 0x45, 0x16, 0x0E,
0x17, 0x45, 0x42, 0x41, 0x0E, 0x1A, 0x41, 0x47, 0x45, 0x0E,
0x46, 0x42, 0x13, 0x14, 0x46, 0x13, 0x10, 0x17, 0x45, 0x15,
0x42, 0x16, 0x5E]
for i in range(len(enc)):
enc[i] ^= 0x23
print(chr(enc[i]), end='')
#QHCTF{ee6c7b9c-e7f5-4fab-9bdf-ea07e034f6a5}