[BUUCTF]REVERSE——CrackRTF
CrackRTF
步骤:
- 例行查壳儿,32位程序,无壳儿
- 32位ida载入,main函数开始分析程序
- 破解第一个密码
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
- 破解第二个密码
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}
[BUUCTF]REVERSE——CrackRTF的更多相关文章
- [BUUCTF]REVERSE——[ACTF新生赛2020]Oruga
[ACTF新生赛2020]Oruga 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索字符串,根据提示来到关键函数 14行~18行就是让字符串的前5位是 actf{ ,sub_78A( ...
- [BUUCTF]REVERSE——firmware
firmware 附件 步骤: 检查文件没有看出什么,ida载入一堆乱码,看了其他师傅的wp才知道要先binwalk对文件进行提取 120200.squashfs这是一个linux的压缩文件 我们需要 ...
- [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun
[WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...
- [BUUCTF]REVERSE——[FlareOn6]Overlong
[FlareOn6]Overlong 附件 步骤: 例行检查,32位程序,不懂是个啥 32位ida载入,main函数很简单 处理函数 sub_401000 程序只对unk_402008的28位进行了处 ...
- [BUUCTF]REVERSE——[WUSTCTF2020]level3
[WUSTCTF2020]level3 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,找到关键函数 看样子是个base64加密,但又感觉没那么简单,再翻翻左边的函数,找到了base64加 ...
- [BUUCTF]REVERSE——[MRCTF2020]hello_world_go
[MRCTF2020]hello_world_go 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,有很多,直接检索flag 一个一个点过去,找到了flag 按a,提取 ...
- [BUUCTF]REVERSE——[GKCTF2020]BabyDriver
[GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关 ...
- [BUUCTF]REVERSE——[MRCTF2020]Xor
[MRCTF2020]Xor 附件 步骤: 例行检查,32位程序,无壳 32位ida载入,首先检索程序里的字符串,根据字符串的提示,跳转到程序的关键函数 根据flag,跳转到sub_401090函数 ...
- [BUUCTF]REVERSE——[FlareOn4]IgniteMe
[FlareOn4]IgniteMe 附件 步骤: 例行检查,32位程序,无壳 32位ida载入 当满足第10行的if条件时,输出G00d j0b!提示我们成功,看一下sub_401050函数 3.s ...
随机推荐
- Java-ASM框架学习-从零构建类的字节码
Tips: ASM使用访问者模式,学会访问者模式再看ASM更加清晰 什么是ASM ASM是一个操作Java字节码的类库 学习这个类库之前,希望大家对Java 基本IO和字节码有一定的了解. 高版本的A ...
- Electron快速入门之事件
const { app, BrowserWindow } = require('electron') function createWindow () { const win = new Brow ...
- JavaScript 函数声明和变量声明
声明语句:声明语句是用来声明或定义标识符(变量和函数名)并给其赋值. 1:var 变量声明(5.3.1节): var语句用来声明一个或多个变量:var name_1 = [= value_1] [ , ...
- 软虹sdk基本使用
虹软SDK的简单使用 Java实现人脸识别,但是又不会自己实现算法,找SDK时发现了虹软.虹软SDK具有免费.识别率高等优点,然后到网上搜这个SDK的教程,没搜到,就自己探索,发现它自带的官方文档其实 ...
- P2336 [SCOI2012]喵星球上的点名(SA+莫队)
题面传送门 一道还算有点含金量的 SA 罢-- 首先按照套路我们把读入的所有字符串都粘在一起,中间用分隔符隔开并建出后缀数组出来. 我们考虑对于一个固定的字符串 \(s\),什么样的字符串 \(t\) ...
- Linux下脚本文件第一行的作用
Linux下脚本文件第一行的作用 在Linux/Unix系统中,你可以在脚本hello.py顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行: #! /usr/bin/env py ...
- Python编译工具Anaconda(含有spyder+jupyter)
Anaconda的下载和安装 官方的下载地址:https://www.anaconda.com/distribution/ 安装程序为一个可执行程序文件,下载完成后双击执行程序即可完成安装.安装过程一 ...
- C语言小练习 微型学生管理系统
很简陋,没有做输入校验,以写出来为第一目的,中间出了不少问题,尤其是结构体内字符串赋值的时候(理解不透彻),字符串比较用strcmp不能直接==判定,逻辑也很重要,不然会出现莫名其妙的问题. 涉及知识 ...
- linux下面升级 Python版本并修改yum属性信息
最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...
- 42-Remove Nth Node From End of List
Remove Nth Node From End of List My Submissions QuestionEditorial Solution Total Accepted: 106592 To ...