首页
社区
课程
招聘
2020GACTF逆向部分wp
发表于: 2020-9-2 16:12 6018

2020GACTF逆向部分wp

2020-9-2 16:12
6018

2020GACTF逆向部分wp,题目地址:https://adworld.xctf.org.cn/competition

逆向签到题,一直f8步过,跑飞就f7补入,最后发现调用CreateProcess()函数创建了一个新进程

新进程运行ruby解释器加载ruby源文件

ruby源文件如下:

解密脚本如下:

虚拟机题

程序首先进行smc还原关键函数loc_8048838的代码,这里我动态调试的时候没办法反编译(有一处奇怪的交叉引用不会处理),于是我把这个函数dump出来另开一个ida反编译分析

程序大概分为三个部分:

第一部分要输入一个数经过一系列运算后等于0x26F8D100,不等于则程序退出

第二部分用这个输入的数生成四个数,用于后面的异或操作

第三部分输入flag,每个字符会根据opcode选择四个数中的一个进行异或,然后与密文数据比较,不相等同样退出

这里要输入的第一个数我没有求出来,z3解不出来,运算中有逻辑右移逻辑左移应该不可逆,我这里的四个数是用flag格式GACTF{}求出来的

模拟执行的脚本:

可以从输出中拿到密文数据,最后求解flag的脚本:

要求key

xdbg定位关键函数GetWindowText,或者可以看到一串奇怪的字符串"ANNAWGALFYBKVIAHMXTFCAACLAAAAYK"(这个字符串后面会被用来异或)查找引用,即可跟踪到关键代码

验证逻辑也很清晰,首先会根据输入的字符串input中的一个字符生成一个异或值,数据取值范围是1.2.6.24.120.720...然后进过三步加密与密文做比较

第一步是与这个生成值进行异或

第二步是异或字符串"ANNAWGALFYBKVIAHMXTFCAACLAAAAYK"

第三步是循环左移

首先逆后两步,脚本如下:

生成的data就是key与某个值异或后的数据

这个值取值范围是1.2.6.24.120.720...

尝试几个数后便得到正确的key(或者直接爆破也行):

输入正确的key后会在当前目录生成flag.txt,里面就是最后的flag

同样是虚拟机题

lc3汇编,复习了下计算机系统概论,下好模拟器后直接跑,代码很短,直接分析就好

整理程序执行流程如下:

然后会发现其实就是相邻两个数进行异或,res是最后异或完的结果,最后一个字符不用进行异或,直接根据这一个字符依次异或即可得到flag


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-9-4 08:21 被Ssssone编辑 ,原因: 添加附件
上传的附件:
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
能不能将附件存放论坛本地一份?怕时间长了,原网站打不开,实例下载不了
2020-9-3 21:45
0
雪    币: 986
活跃值: (6167)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
3
Editor 能不能将附件存放论坛本地一份?怕时间长了,原网站打不开,实例下载不了
ok,已上传
2020-9-4 08:21
0
雪    币: 344
活跃值: (922)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
BIX
4
老哥,EasyRe的第一个输入可以用符号执行得到。但是像老哥的做法更简单,也没必要。
2020-9-13 14:57
0
游客
登录 | 注册 方可回帖
返回
//