[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 A1103—DFS
Integer Factorization The K−P factorization of a positive integer N is to write N as the sum of the ...
- <C#任务导引教程>练习五
//27,创建一个控制台应用程序,声明两个DateTime类型的变量dt,获取系统的当前日期时间,然后使用Format格式化进行规范using System;class Program{ sta ...
- [cf566C]Logistical Questions
记$d(x,y)$为$x$到$y$的距离,$cost_{x}=\sum_{i=1}^{n}w_{i}d(x,i)^{\frac{3}{2}}$为$x$的代价 取$C$为足够大量,对于一条边权为$w$的 ...
- [atAGC050E]Three Traffic Lights
原题意可能略微有一些复杂,这里给出简述的题意-- 给定$g_{i}$和$r_{i}$(其中$1\le i\le 3$),求有多少个整数$t$满足: $0\le t< \prod_{i=1}^{3 ...
- [atAGC045F]Division into Multiples
令$d=\gcd(a,b)$,可以发现$c|(ax+by)$等价于$lcm(c,d)|(ax+by)$,因此不妨令$c'=lcm(c,d)$,然后将$a$.$b$和$c$同时除以$d$ 接下来设$(a ...
- SimpleNVR安防监控RTSP/FLV/HLS直播流服务如何分权限添加用户指定通道观看
背景分析 随着SimpleNVR的用户越来越多,很多客户反馈给了我们很宝贵的简易以及用户体验.在此非常感谢大家对我们的支持.其中很多客户不想把所有的视频直播展现出来,想分权限添加新用户,指定通道让其观 ...
- c链表中指针的一些用法要点
/* 结构体不能含有同类型的结构,但是可以含有指向同类型结构的指针.这样的定义是定义一个链表的基础. */1 typedef int Element; 2 3 typedef struct node{ ...
- alpine切换源 安装慢 apk add很慢
alpine切换源 安装慢 apk add很慢 阿里镜像 sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/reposit ...
- 利用plink软件基于LD信息过滤SNP
最近有需求,对WGS测序获得SNP信息进行筛减,可问题是测序个体少,call rate,maf,hwe,等条件过滤后,snp数量还是千万级别,所以后面利用plink工具根据LD信息来滤除大量SNP标记 ...
- Perl哈希%hash
哈希是 key/value 键/值对的集合. Perl中哈希变量以百分号 (%) 标记开始. 访问哈希元素格式:${key}. 以下是一个简单的哈希实例: 实例 #!/usr/bin/perl %da ...