[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 ...
随机推荐
- PAT A1060——string的常见用法详解
string 常用函数实例 (1)operator += 可以将两个string直接拼接起来 (2)compare operator 可以直接使用==.!=.<.<=.>.>= ...
- C#窗体学习
//进度条控件 private void button1_Click(object sender, EventArgs e) { int i; ...
- CVPR 之 老照片修复
周末闲来无事,随手整理电脑里的照片,望着一张物是人非的老相片,勾起了斑驳的回忆.忽尔转念一想,何不 PS 下,但 PhotoShop 有些大且不免费自己懒得装,于是,转向免费的图像复原软件. 网上搜来 ...
- [hdu7035]Game
称区间$[i,j]$为普通区间,当且仅当$j-i\ge 3$且其操作两次内不会变为给定区间 结论:若$[i,j]$为普通区间,则$[i,j]$和$[i+1,j-1]$的状态( ...
- [loj3501]图函数
$f(i,G)_{x}$为$x$对$i$是否有贡献,即在枚举到$x$时,$i$与$x$是否强连通 事实上,$f(i,G)_{x}=1$即不经过$[1,x)$中的点且$i$与$x$强连通 首先,当存在这 ...
- [cf1219G]Harvester
分类讨论(以下仅考虑行,列的情况):1.4行的,求出每一行的和后找到4个最大值即可:2.3行1列,枚举列,再将每一行最大值减去那一列的值后取3个最大值得和即可:3.2行2列,发现行和列是等价的,因此可 ...
- C/C++ Qt 选择夹TabWidget组件应用
在Qt中通过使用选择夹组件可以实现在一个页面中集成多种功能,我们以TabWidget选择夹组件为例,实现在单个页面中集成多个功能,并给每一个子夹增加对应的Ico图标. 如果我们使用选择夹组件,必须提前 ...
- 【GitHub】本地代码上传
本地代码上传GitHub 2019-11-18 20:03:45 by冲冲 1.注册GitHub https://github.com/ 2.安装Git工具 https://git-for-win ...
- 【JavaSE】异常
Java异常 2019-07-06 22:16:29 by冲冲 1. 引例 任何程序都有出错的可能.比如代码少一个分号,那么运行的结果是 java.lang.Error.比如运行 System.o ...
- Ubuntu怎么修改DNS
有时候会出现配置好网络之后,可以ping通网关却ping不通www.baidu.com orangepi@orangepi3:~$ ping 192.168.1.1 PING 192.168.1.1 ...