JACTF baby_reverse writeup
最近一直在学习逆向,所以把自己做过的题记录下来.
发现jactf的题还不错,所以就从jactf开始刷题吧。。
下载之后查看一下文件类型,发现是64位elf文件
放到我的64位kali里面运行一下看看
发现是输入Key,然后程序判断对错。
接下来放IDA里面看看程序的内容。
发现主函数很简单,
大体的意思就是先初始化一个数组,这个数组的长度是0x1E,并且全部赋值为0。
之后就是输入Key,然后有一个encode函数,看名字是一个加密函数,
最后再将加密后的Key和enflag比较。
大体意思明白了,我们就先看看这个enflag是什么.
双击点击enflag。
看到enflag=‘bIwhroo8cwqgwrxusi’
之后我们再看看encode函数.
这里其实有个小坑。。。 当你在程序中输入上面的enflag后会出现
让你以为是flag…其实是个假flag(打ctf英语真是得学好,facker…假的)
仔细看看这个encode函数,加密的过程就在for循环中,
我们要做的就是如何写出decode解密函数,把加密过程逆回来。
仔细看这个循环。
从后边开始分析。
返回的a2就是经过加密的enflag
所以a2=‘bIwhroo8cwqgwrxusi’
for (i=0;i<v7;i+=3)
每循环一次i就加3
而每次循环a2的值其实就是由v5,v4,v3控制的
也就是可以吧a2分组,3个字符一组。
v5就是a2[i]
v4就是a2[i+1]
v3就是a2[i+2]
分析到这里,就已经可以吧v5,v4,v3这三个字符串是什么求出来了。
上python:
因为异或是可逆的。
加密前^密匙=加密后
加密后^密匙=加密前
所以我们可以逆出a2加密前的原始字符串
其实就是把v5,v4,v3这三个字符串逆回去
最终的decode脚本就是:
flag就不放出了。。
这题其实也不难,考验的就是静态分析。
这题我也是做了好久,才分析清楚。
刚开始学习逆向,加油,明天继续。