Buuctf-Reverse(逆向) CrackRTF Write up

0x00 查壳

日常丢进查壳查位数(一般跑一下比较好 本机一开始跑不了就没跑了)

0x01 简单的流程

丢进ida32查看

直接查看主函数看

大概浏览程序是输入两次秘钥然后就bye了

0x02 第一次输入分析

分析第一次输入

进入40100A函数查看 查看官方文档

第二个参数是所对应的加密方式

看别人博客直接判断出8004是sha1,有点搞不懂是怎么看出来的

另一个依据是这串字符按字节分长度是20,而sha1算法得出sha1长度值长度是160位也就是20个字节

既然知道是sha1算法就可以进行爆破

import hashlib

flag = "@DBApp"

for i in range(100000,1000000):
    s = str(i) + flag
    x = hashlib.sha1(s.encode())            #创建一个sha1实例 将s加密
    c = x.hexdigest()                     #sha1处理过的字符串
    if "6e32d094341" in c:                #hashlib解密后是小写
        print(c)
        print(str(i)+flag)

得到第一次的秘钥 123321

0x03 第二次输入分析

第二次的秘钥两个关键函数

先分析401019 又是一个加密

可以继续看winAPI 8003是代表哪里 但我没找到

所以可以根据这是16个字节 而md5值也是 所以这应该是md5加密

但md5爆不出来!?继续看下面那个函数

查看40100F

查看401005

有个AAA资源用一个工具可以查看

ResourceHacker

附上下载链接:爱盘 - 最新的在线破解工具包

确实有个aaa的资源

现在分析一下

1.MD5加密没法爆出第二次秘钥

2.有个aaa的资源和第二次秘钥异或然后创建一个RTF文件

3.那么就可以通过aaa的资源和RTF的头文件就可以得到第二次秘钥

随便打开一个RTF文件 取首六位即可 因为秘钥长度为6

rtf1 = "{\\rtf1"                                #记得转义
rtf2 = [0x05,0x7D,0x41,0x15,0x26,0x01]
flag = ""

for i in range(0,len(rtf2)):
    x = ord(rtf1[i]) ^ rtf2[i]                 #直接异或不行 之前这边经常报错 注意数据转换
    flag += chr(x)
print(flag)

爆出第二次秘钥

0x04 GetFlag!

拿到win7上跑

然后会创建一个文件

GetFlag!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值