0x00 分析

没啥好说的,签到题来的

0x01 解

查壳(Not Packed)

直接上IDA8.3

有个shuffle比较显眼,柏鹭杯的时候有理解过shuffle的意思

这里应该是将上面的那串字符打乱了

往下滑滑可以看到这个

base64没跑了

但是那串字符不太可能作为base64的表

所以看看那串字符什么操作

字符变量传递流程我贴这了

v54 → shuffle → v57 → v26 → v24

然后就是一个异或

看来这题的加密就是XOR+base64了

那这个shuffle结果是什么?

动调看看

进去之后注意寄存器RCX

运行到ret就能看到结果了

写脚本咯

1
2
3
4
5
6
7
8
9
10
11
import base64
key = "TcR@3t_3hp_5_G1H"
enc = b"fiAGBkgXN3McFy9hAHRfCwYaIjQCRDFsXC8ZYBFmEDU="

dec1 = base64.b64decode(enc)
dec1 = list(dec1)
dec2 = ""
for i in range(len(dec1)):
dec2 += chr(dec1[i] ^ ord(key[i % 16]))
print(dec2)
# *CTF{ch@tgpT_3nCRypt10n_4_FUN!!}