171021 逆向-Xp0intCTF(re300)

1625-5 王子昂 总结《2017年10月21日》 【连续第386天总结】
A. Xpoint-暨南大学校赛
B.

re300

排在最上面的就是分数最高的题目,我们就先搞它吧~
直接拖入IDA反编译,找到main函数:
这里写图片描述
虽然字符串都被重新命名了有点困难, 不过大概还是能看清楚的~
v5是input的缓冲区,送入sub_4012EF进行运算,返回值为1时就正确了
那么我们跟进去看看
这里写图片描述
这个函数对长度进行了基本校验,return 1的时候要求i==60
也就是说v3中的内容必须和且仅和407030数组的内容有60个比特相等

要输入45个字符,经过sub_401100变换后的数组长度为60,那么再看看变换函数吧:
这里写图片描述
这里其实挺明显的
v4累加
每个数相加后v4左移8位即1比特
当累加了3个数后,进行一次清空运算
给新的数组依次赋4个值,值来源于之前初始化的表v3

下标则是最有特征的地方了
累加3个数,每个数占1个字节8位,共24位
然后每次取6位赋值作为下标查表赋值

这就是base64的原理嘛,将3个8位数变为4个6位数

最后退出的时候看计数器v2是否为0,非0则说明累加器中还有多余的字符,处理后以’=’填补

那么关键在于初始化的表是否与base64相同了
这里写图片描述
这个初始化……有点烦人哦,首先分为前后两半
每一半以4个为一组进行了改变顺序的操作
因此把off_407034dump下来以后也需要照样变换一下表

这样我们就把变换算法理清了
最后要求编码字符串为off_4070300,dump下来进行逆变换就可以了

首先确定它的结尾没有’=’,(输入长度45为3的倍数,也印证了没有’=’)
然后进行逆变换

由于变换的时候是将3变4然后查表输出,因此逆变换就应该是先反查表(即以值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值