还挺有价值的,记录一下
题目
DIE
PE文件在Windows操作系统下默认使用小端序
IDA
main函数
绿框:输入长度要20
红框:base64加密
黄框:加密后的结果要与关键数据相等
获取数据,我一般喜欢调试看栈,这样就少一次翻转了
取出15个数据:0x46, 0xED, 0x18, 0x96, 0x56, 0x9E, 0xD2, 0x72, 0xB2, 0xB3, 0x80, 0x70, 0xFF, 0x00, 0x00
根据 base64 加密规则,输入数据的字节数必须是 3 的倍数
输入如果是12个,加密后16个
12*8=96
96/6=16输入如果是15个,加密后20个
15*8=120
120/6=20
综上,关键数据12个:
0x46, 0xED, 0x18, 0x96, 0x56, 0x9E, 0xD2, 0x72, 0xB2, 0xB3, 0x80, 0x70
base64加密后: Ru0Yllae0nKys4Bw
因为这是 32 位程序及小端序,故每 4 个字节倒一次顺序,得到
Y0uReallyKn0wB4s
根据题目提示,后面还有3个’=‘,输入需要20位,已经得出19位,还差1位
可以根据MD5爆破
EXP
1 import hashlib 2 en_flag = 'Y0uReallyKn0wB4s' 3 for i in range(32,127): 4 end = en_flag + chr(i) + '===' 5 if hashlib.md5(end.encode()).hexdigest() == '5a3ebb487ad0046e52db00570339aace': 6 print(end) 7 exit()
flag
Y0uReallyKn0wB4s3===