[BUUCTF] REVERSE CrackRTF 跳步解法

题目地址BUUCTF在线评测

1.首先看看程序有没有壳

无壳,32位,直接放到ida32里

看main函数jmp到了main_0里了,那就看main_0,直接F5大法

2.逐条分析代码,大概就是先第一次输入密码,然后进行各种拼接和校验,然后输入第二次密码,拼接并校验

3.这里直接说几个重要函数吧,首先就是atoi函数,它会将把字符串转换成整型,简单演示一下

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int ret = atoi("123.1");
	printf("%d", ret);
}//123

 然后就是sub_40100A函数,点进去看下

看大佬的wp这就是个hash加密函数,具体看这位大佬的wp,重点看这个0x8004,它对应的加密方式是sha1,具体可以看这张表去比对,加密后的数会和6E32D0943418C2C33385BC35A1470250DD8923A9去进行比较所以我们就可以写脚本去爆破出第一次的密码了

import hashlib
for i in range(100000,1000000):#因为前面校验了密码的长度为6位,且数值大于100000
    key = str(i)+"@DBApp"
    if hashlib.sha1(key.encode('utf-8')).hexdigest()=="6e32d0943418c2c33385bc35a1470250dd8923a9": #注意这里比较的是小写,从ida上复制的是大写
        break
print(key)
#123321@DBApp

然后继续接着走,输入第二次密码,同样校验了长度,但是没有校验数值的大小,所以应该前面的爆破就不能用了

4.在第二次输入密码后它使用了sub_401019函数对密码进行了处理

同样还是个hash加密,但它使用的是0x8003,对比前面的表,知道了是MD5加密

那到这里就可以直接对加密后的MD5值进行在线解密了,然后删除第一次的密码,就会得到第二次的密码了,看其他大佬的wp是手动解的,我这里应该是前人栽树,后人乘凉了,MD5解密直接就解出来了

得到第二次密码~!3a@0

5.最后往后看找到sub_40100F函数

具体是什么没仔细去看,重要的是它Create了一个名为dbapp.rtf的文件,应该就是如果前面的密码校验全通过,就会生成一个dbapp.rtf文件,rtf是一个word文档类型的文件

5.最后我们输入得到的两次密码,就会有dbapp.rtf文件了,为了方便展示程序运行完的结果,我们直接用动态调试

成功得到flag

我这里演示的是后来者的版本,有些地方没去了解,更详细的可以看这位大佬的wp

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值