Windows Reverse1 通过DIE查壳发现存在upx,在linux上upx -d脱壳即可,拖入IDA,通过关键字符串找到关键函数: main函数中也没有什么,将输入的字符串带到sub_401000函数去处理,之后和处理过后的字符串和正确字符串进行比较,若一致则是正确flag
DDCTF_2019_re_Reverse1
跟进sub_401000,首先计算了输出字符串的长度,然后根据每一个字符的ascii码再加上一个常量作为地址,取里面的值,循环,每一位都是这样
DDCTF_2019_re_Reverse1
在main函数中我们知道正确的字符串,那么我们就可以反推处flag exp:
1
2
3
4
5
| data = [0x403052,0x403052,0x403053,0x403042,0x403050,0x40301B,0x403024,0x403031,0x403020,0x403031,0x403024,0x403023,0x403031,0x403049,0x403051,0x403019]
flag = ""
for x in range(len(data)):
flag+=chr(data[x]-0x402ff8)
print "DDCTF{"+flag+"}"
|
flag:DDCTF{ZZ[JX#,9(9,+9QY!}
|