CISCN&CCB 2025 初赛


CISCN&CCB 2025 初赛

ezCsky

题目分析

IDA缺少插件,无法分析,那——直接用8086或者选择别的解析方式呢?

image-20241216133245971

确实可以,但是模模糊糊的!

但还是能看到大致的逻辑,先异或、再rc4初始化加密、最后对比

image-20241216134011830

比赛时候解出来”}“没想到是最后一位逐位异或(qwq可惜)

可以看到check和xor长得特别想,一想啊,check从头开始逐位检查,xor从头开始异或(怪不得一模一样(原来如此

image-20241216133645027image-20241216133700066

还是要吐槽!!!!这密钥是testkey我真服了!!!!!(怀疑了很久(

解题脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from Crypto.Cipher import ARC4

key = b'testkey'
encrypted_data = bytes([
0x96, 0x8F, 0xB8, 0x08, 0x5D, 0xA7, 0x68, 0x44, 0xF2, 0x64,
0x92, 0x64, 0x42, 0x7A, 0x78, 0xE6, 0xEA, 0xC2, 0x78, 0xB8,
0x63, 0x9E, 0x5B, 0x3D, 0xD9, 0x28, 0x3F, 0xC8, 0x73, 0x06,
0xEE, 0x6B, 0x8D, 0x0C, 0x4B, 0xA3, 0x23, 0xAE, 0xCA, 0x40,
0xED, 0xD1
])

cipher = ARC4.new(key)

decrypted_data = bytearray(cipher.decrypt(encrypted_data))


for i in range(len(decrypted_data)):
index1 = len(decrypted_data) - 2 - i
index2 = len(decrypted_data) - 1 - i
if index1 < 0 or index2 < 0:
break
decrypted_data[index1] ^= decrypted_data[index2]

decrypted_text = decrypted_data.decode('utf-8')
print(decrypted_text)

#flag{d0f5b330-9a74-11ef-9afd-acde48001122}

dump

1
./re.exe 123

打表对应每一位,手动爆破

rand0m

A1natas 2024 CISCN x 长城杯铁人三项 初赛 WriteUp

参考文章


文章作者: W3nL0u
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 W3nL0u !
  目录