-
-
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编辑
,原因: 添加附件