2023-re4(SEH异常控制流+花指令+异或)
拿到题我们可以发现,有一个简单的反调试,调试很好过,我们直接NOP或者进行附加调试皆可
限制了输入,指定输入的flag的长度为40.
这一部分实现了SHE异常处理,人为的做出了访问不可地址的访问。
如果是熟悉SEH这个考点的话,那就方向其实很简单。直接找它所隐藏的代码即可。
但是对于这道题,我们可以发现一个很有趣的地方,我们直接静态分析,是不能直接分析出隐藏代码在哪儿的。
我们仔细看可以发现一个可疑地方
对于这里有一个jmp_except 就是我们需要处理的代码,我们可以看到,有一个是退出,一个是向下执行,我们所以下面的那段代码就是我们需要的隐藏代码,这里我们只需修改jmp即可。
修改之后,被隐藏的代码逻辑就出现了
所以对于此方面的处理,由于出题人会将我们的关键代码,放入SEH断下来之后,从而实现了代码的隐藏,所以处理此类题目我们的思路就是,就是去寻找出题人隐藏的代码,其中有两方面,一方面就是观察主程序的汇编,对于jmp要特别主要,大多数,就会出现一个莫名的jmp跳过了一大段的内容,这是因为使用了SEH处理机制,将SEH断入,就会执行我们那跳过的代码。所以我们只需修改跳转即可,另外如果主程序没有而是在其他地方调用,这就需要我们进行动态调试了,通过动态调试确定我们数据被修改的地方,也能找到被出题人隐藏的代码。
我们可以知道,前面的循环并没有对我们的输入数据进行处理,下面的函数对我们的数据进行了修改(v19)
进入之后,我们可以发现有一个小花指令,很简单,将无关数据nop掉就行。
很简单的异或
下面的,又对v19进行了异或操作,这里我们动态调试,但是我们不能直接查看具体v10的值为多少,这里我是进行前后数据调试,将前后数据dump下来进行异或,可以得出对前32为异或上139,对后八位异或上1.
写出我们的脚本
1 |
|
DASCTF{SEH_1s_fan_and_fmyy_1s_shenxian!}