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位异或后肯定是{\rtf1
异或一下就能算出第二次的密码了

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}

最新文章

  1. JavaScript 秘密花园 学习心得
  2. 【BZOJ】1106: [POI2007]立方体大作战tet
  3. zju(4)使用busybox制作根文件系统
  4. gradle大体内容
  5. c++子类调用基类方法的一个例子
  6. JavaEE基础(二十五)/多线程、GUI
  7. poj 3060 Visible Lattice Points
  8. 类和ID选择器的区别
  9. (IOS)N duplicate symbols for architecture i386
  10. 【LeetCode with Python】 Rotate Image
  11. android 开机自启动实现
  12. java连接mysql源码
  13. pyqt pyside 设置窗口关闭时删除自身
  14. rabbitMQ Management http://localhost:15672/ 打不开
  15. docker swarm 部署服务时,限制服务启动后所在的机器
  16. PM2.5环境检测系统的设计与分析
  17. 2017-2018-2 20165315 实验四《Android程序设计》实验报告
  18. nginx如何处理请求
  19. React-Native 之 ScrollView介绍和使用
  20. Linq“条件排序”

热门文章

  1. [loj3368]数蘑菇
  2. maven项目打包不带版本号的操作
  3. 『学了就忘』Linux文件系统管理 — 58、常用硬盘管理相关命令
  4. Redis基本数据类型底层数据结构
  5. Codeforces 497E - Subsequences Return(矩阵乘法)
  6. 【基因组组装】HiC挂载软件以及如何用Juice_box手工纠错?
  7. 【shell】真正解决syntax error:unexpected end of file?
  8. C语言 文本字符串存入二维数组
  9. Mysql的delimiter
  10. linux中对errno是EINTR的处理