【攻防世界逆向】【高手题】《simple-check-100》《re2-cpp-is-awesome》《secret-galaxy-300》《elrond32》《hackme》
昨天去参加LitCTF了,一共7道re题目,做出来了4道,后面的几道看了一下,不是现在的我能够解出来的,一没思路二没经验。不过也算满意了,这也算是我第一次参加比赛独立做题,加油吧。
题目simple-check-100

解法
这道题我先打开idapro看了一下,
看起来也不太复杂,不过这种很明显的判断题目,我更想通过动态调试把它解出来,于是我去学习了一下gdb的调试。
先来分析一下这道题的汇编吧。
我们直接锁定
这里的判断函数应该是重中之重。看汇编代码。

也就是这个地方,jz指令很关键。
要先看test是什么意思

这是两个不同的值进行比较,所有测试位为0时,令ZF为1
而这里是test eax,eax来判断eax是否为空,只要不为空那ZF必定是0,为空则ZF为1。
jz和je一样,都是相等时跳转(eax为0时跳转),所以这里题目的本来意图是,通过call一个函数让eax为0,从而通过test置zf为1,让je或者jz跳转。
我们要修改的就是不让test成功置zf为0,怎么做?答案就是在它执行前,我们令eax为1就可以了。思路就是这样。
具体操作就是如下
首先gdb 文件,b main在主函数下断点,然后单步执行,到test的地方。

可以看到马上就要执行test了,输入i r eax看一下现在eax的情况

果然为0,我们通过set $eax=1,再看一下

ok修改成功,直接c

成功了!
题目re2-cpp-is-awesome

解法
先用exeinfo打开看看。

无壳elf64位
扔进ida里面找到main函数

一大长串还是比较复杂的
放进linux里面./跑一下

告诉我们在尝试。
那我们只能转图去看ida了。一点点的分析吧,

可以看到是一个输出函数

应该是把输入的内容给了v3

这是后面a2的出现内容,可以看到这里有个取地址,那很有可能是我们输入的内容给了这个v12

又把v12的内容给了v11

v11的头又给了v10的头

这里不断把v11的尾部给v13,再和v10作对比


可以看到这里在判断传的字符是不是最后一个字。
主要看里面的判断

哦意思就是我们输入的东西和这个所谓的off_6020A0[dword_6020C0[v14]]是否相等,点进去具体看一下

是一个相当长的东西
另外一个

存了很多数字,并以3个0为填充。
基本上明白了,我们输入的东西应该是第一个字符串当中以第二个中的数,拼起来的一个字符串,写脚本

得到flag
题目secret-galaxy-300

解法
这道题也是一个很抽象的题目,给了我们三个文件,一个elf64,一个elf32,一个win32.
win32的我电脑跑不起来,拿到kali里面跑一下elf格式的。

给我了个这么东西,很没头绪。
看了别人的wp,恍然大悟,题目隐藏的信息,那应该还有一个星系啊!打开ida追踪到星系名

这货没出现过,看一下在那些函数用过他。

是这么一个函数,这个应该就是我们要找的flag了,使用动态调试

跟进按a显示字符串,出现flag。
也可以用odg

题目elrond32

解法
exeinfo打开看一下,
用kali运行一下

大概知道会有什么回显信息。用ida打开看看

过程很了然,一个判断函数是关键。

输入的a2是0,也就是到了
这个地方,如果我们输入的是i也就是105的话,就会跳转到

a2变成7,到了115,也就是u,以此类推,要输入的应该是isengard。
我们直接输入

flag出现。
也有别的办法。

flag是通过这个地方的运算才出来的是什么东西。v2为何
一个数组。a1也就是我们输入的东西isengard
写个脚本flag也能出现
题目hackme

解法
又给我看超载了,直接去看了别人的wp。
先是kali中运行。

ok有回显,ida通过字符串锁定函数位置。

东西很多慢慢来,从下往上。

要让v21为1,就要让v16等于v19^15
再往上看,v16是什么
跟进看看
一个数组
那它的下标是什么?
看别人的wp,跟进去慢慢看发现这是一个随机数!
很迷茫,再看看v15
涉及到v11
跟输入有关,应该是我们输入的东西存储的地方。下标居然也是v17?
好,这题出的很飘逸啊。他是将我们输入的东西,去随机数k为下标,以同样的k去文件自己的字符串同样的位置是不是一样的,原来如此。那我们就不用去纠结v17的取值就行了。唯一要注意的也就是为什么是22以内的,看到文件自带的字符串反应过来原来我们要输入的就是22位的!
下面就是一些处理过程了,因为跟主逻辑没什么关系,在进行异或的时候直接照抄就可以了。
写出脚本

得到了flag


浙公网安备 33010602011771号