zoukankan      html  css  js  c++  java
  • [BUUCTF]REVERSE——CrackRTF

    CrackRTF

    附件

    步骤:

    1. 例行查壳儿,32位程序,无壳儿
      在这里插入图片描述
    2. 32位ida载入,main函数开始分析程序
      在这里插入图片描述
    3. 破解第一个密码
      sub_40100A()是一个加密函数,具体的写的算法没去分析,但是CryptCreateHash很眼熟,他是windows里的哈希加密,有了解过哈希的是可以知道,哈希是很多算法放在一起,然后随机抽一个算法来加密,第二个参数是加密时所用的方法标号。0x8004u是shl加密
      在这里插入图片描述
      具体的可以去微软的相关网站查看
      在这里插入图片描述
      我们先来破解第一个密码
      由于是6位,并且给了范围,是100000~999999,我就直接暴力破解了(主要是去网站在线解密要money,有免费的好用的求分享)
    import hashlib
    
    string = "@DBApp"
    
    for i in range(100000,999999):
    	s = str(i)+string
    	x = hashlib.sha1(s.encode())
    	cnt = x.hexdigest()
    	if "6e32d0943418c2c33385bc35a1470250dd8923a9" == cnt:
    		print(str(i)+string)
    

    在这里插入图片描述第一个密码123321

    1. 破解第二个密码
      在这里插入图片描述
      sub_401019()函数是md5加密,我试了好多在线的解密网站,都没有得到结果,6位全字符,这要是写爆破脚本还真不懂什么时候跑的出来
      在这里插入图片描述

    在这里插入图片描述看了一下下面的一个函数sub_40100F()
    在这里插入图片描述
    好怕这种系统封装的函数,看不懂,看完这篇文章,才知道这段代码的大概意思是查找一个叫AAA的文件,然后获取资源,之后就是一个函数,等等去看,然后CreateFileA创建或者打开了dbapp.rtf

    FindResourceA:找到模块中的资源,这句话是找到AAA类型的叫0x65的资源
    SizeRecource:根据名字也容易知道函数返回的是字节数
    LockResource:返回资源地址
    

    先看一下sub_401005()函数
    在这里插入图片描述
    理清楚各个传参代表的意思,这段代码大概就是将我们从AAA取出的值和第二次密码连接后的字符串进行异或。 现在得要想办法去知道从AAA中取来的什么值

    在百度了其他师傅的wp之后知道了有一个叫做ResourceHacker的工具可以提取出文件中的资源,它的文章里有下载地址
    在这里插入图片描述

    然后这题的关键是
    [根据题目猜测,为了创建RTF文件,将资源再输入进去,为了保证创建成功所以,必须符合格式,所以RTF文件的文件头是个关键

    这个异或的作用就是将我们的第二次输入的密码+123321@DBApp与AAA中取出来的值进行异或后创建了一个rtf的文件,创一个rtf文件,看一下rtf的文件头
    在这里插入图片描述
    因此我们第二次输入的密码(6位)与AAA中的前6位异或后肯定是{ tf1
    异或一下就能算出第二次的密码了

    s = "{\rtf1"
    
    a = [0x05,0x7D,0x41,0x15,0x26,0x01]
    
    flag = ""
    for i in range(0,len(s)):
    	x = ord(s[i]) ^ a[i]
    	flag += chr(x)
    print(flag)
    

    在这里插入图片描述

    第二次密码:~!3a@0
    之后就是运行题目附件,输入两次的密码,运行结束后会生成一个rtf文件,里面就是flag
    根据之前看到的函数里的提示,这个rtf文件应该是dbapp.rtf
    在这里插入图片描述

    flag{N0_M0re_Free_Bugs}

  • 相关阅读:
    App开发Native.js入门指南
    C# Dapper 基本使用 增删改查事务等
    特殊字符码
    assert
    俩个高斯分布之间的KL散度
    np.random.normal(loc=0,scale=1e-2,size=shape)
    解决Github加载ipynb文件缓慢/失败
    画出8个高斯分布散点图
    解决tensorflow报错ValueError: Variable conv1/weights already exists, disallowed.原因:第二次使用的是第一次的就的变量
    互信息
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273659.html
Copyright © 2011-2022 走看看