JACTF baby_reverse writeup

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就不放出了。。
这题其实也不难,考验的就是静态分析。
这题我也是做了好久,才分析清楚。
刚开始学习逆向,加油,明天继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值