C/C++教程

学习笔记(2)BUUCTF-RE-CrackRTF

本文主要是介绍学习笔记(2)BUUCTF-RE-CrackRTF,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

下载文件后发现无壳,用IDA打开

找到主函数,发现一共要求我们输入两次密码

先对第一次输入进行分析,首先要求我们输入的字符串长度为6位,然后通过atoi函数将字符串转换成整型数并保存到v7中,且要求该整型数需要大于100000

经过上述操作后将v7与字符串@DBApp连接,通过函数sub_40100A进行加密,然后再与6E32D0943418C2C33385BC35A1470250DD8923A9进行比较,若相同则继续向下

 

此时对我们来说最重要的就是搞清函数sub_40100A是如何加密的,进入该函数发现应该是应用了CryptAPI函数库,其中CryptCreateHash最为重要,0x8004u为标识值,经查询这是Hash函数中的SHA1

 

已知加密函数为SHA1,且输入有限制那么只需要对100000-999999后加@DBApp进行SHA1加密与密文进行比较暴力破解明文,得到明文123321@DBApp

接下来看第二个输入的字符串,限制输入字符串长度为6,并将第一部分得到的明文连接在后面,分析函数sub_401019,发现CryptCreateHash的标识码为0x8003u,为MD5,但是该部分对输入并没有任何限制,直接暴力破解无限制六位数时间过于漫长,于是我们继续向下分析

对sub_40100F进行分析,其中重要函数为FindResourceA,用于确定指定模块中具有指定类型和名称的资源的位置,SizeofResource函数用于计算长度,LoadResource函数用于加载资源,LockResource指向了AAA文件的资源

继续分析函数sub_401005,该函数将输入的密码与AAA中的资源进行了异或操作,返回后得到了dbapp.rtf文件

 

至此我们只需要将AAA中的资源与dbapp.rtf文件代码中的六位进行异或操作即可,这样就能得到输入的密码

将我们下载的文件用ResourceHacker打开,即可得到AAA文件中的字符

然后上网搜索一下RTF文件的代码,发现前六位都为"{\rtf1"

写一个脚本将他们异或即可得到输入的密码为"~!3a@0"

打开程序输入两次密码,文件夹中会生成一个文件,打开即可得到Flag{N0_M0re_Free_Bugs}

 

 

 

 

 

 

这篇关于学习笔记(2)BUUCTF-RE-CrackRTF的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!