ida打开 F5
程序分为两部分输入,第一次输入后,将输入的字符串通过atoi()
转换成整型,之后strcat()
函数与@DBApp
连接代入sub_40100A
函数,跟进此函数
推测此函数为hash加密函数,通过对CryCreateHash函数的了解,查询其中一参数ALG_ID 0x8004,得到此函数为sha1算法
可利用python的hashlib对第一段输入进行爆破求解,结果为 123321
1 | import hashlib |
将结果输入程序,通过验证,进入第二次输入
将输入与之前12位字符连接,代入sub_401019
,经查询此函数为MD5算法,由于没有足够的信息,对其爆破难度大,放弃此方法。发现下文还有一判断函数sub_40100F
,跟进
API函数FindResourceA
查找文件中包含名为AAA的文件,通过sub_401005
把AAA的文件中取出字符和输入的字符串进行异或得到一个.rtf文件,通过ResourceHacker
这个软件查看包含文件AAA
因为需要得到的只有前6/18位字符,所以可通过rtf文件头的格式对前6位字符进行还原
随便创建一个rtf文件,用winhex打开,即可得到文件头前6位“{\\rtf1”,注意 \ 还需要一个 \ 进行转义
1 | s = [0x05,0x7D,0x41,0x15,0x26,0x01] |
得到前6位字符为~!3a@0
,输入程序,程序运行结束即可在当前目录下生成dbapp.rtf文件,打开得到flag