学习笔记(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}

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值