BUUCTF - re - CrackRTF
ida分析,需要输入两次密码,估计是两段flag
先看"27019e688a4e62a649fd99cadaafdb4e"是经过sub_401019()函数,跟进过去,应该是一种什么加密方式
这段字符是32位,猜测md5,继续看,还有一个函数,跟进看看
里面有关键信息,生成了一个dbapp.rtf文件
看sub_401005函数
将我们从AAA取出的值和第二次密码连接后的字符串进行异或,但是需要知道AAA中的值,使用ResourceHacker查看,取前六个
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
data = [0x05,0x7D,0x41,0x15,0x26,0x01]
然后找rtf的头文件前六个字符{\rtf1\ansi\ansicpg936\deff0\deflang1033
就是"{\rtf1"
s = "{\\rtf1"
data = [0x05,0x7D,0x41,0x15,0x26,0x01]
flag =""
for i in range (0,6):
flag+=chr(ord(s[i])^data[i])
print(flag)
#~!3a@0
在解"6E32D0943418C2C33385BC35A1470250DD8923A9",看到sub_40100A()函数
很类似,40位的加密后的字符串很有可能是shal加密,网上的爆破脚本
import hashlib
flag = "@DBApp"
for i in range(100000,999999):
s = str(i)+flag
x = hashlib.sha1(s.encode())
cnt = x.hexdigest()
if "6e32d0943418c2c" in cnt:
print(cnt)
print(str(i)+flag)
#6e32d0943418c2c33385bc35a1470250dd8923a9
#123321@DBApp
得到第一个密码123321第二个密码是~!3a@0
然后运行一下这个程序,生成一个dbapp.rtf,里面就有flag