拿到题目用die扫一下
然后拖入32位ida看看
发现有很多函数 不知道关键函数在哪 shift f12看看
找到关键语句进去看看
结果发现有花指令 全是jx 1 jx 1的这种结构
对着跳转的位置按D转换成数据 然后把花指令nop掉 然后再把数据C一下转换成代码 最后P一下创建函数就可以了
后面的jx 1 jx 1 这样的花指令都是这样做
然后就可以f5看伪代码了
但有个地方堆栈不平衡
要手动改一下
改完之后再去看伪代码
发现这题要两个flag
先搞第一个
找到加密算法部分 发现是把 is flag八个字符加在输入的32个字符后面然后加密
加密完之后再跟byte_817004进行比较
分析一下flag1的加密算法 Str就是上一个v7的高十六位和低十六位互换 然后v7又变成异或完之后的Str的高十六位和低十六位互换 以此类推 看脚本就行了
一开始用c语言写的脚本 写的有问题 也挂出来丢脸一下把
后面用python重新写了个。这是算法分析部分
得到flag1 Syclover{0ne_M0RE_step_To_f1nal}
然后去解flag2
脚本关键代码如下
Syclover{st3psCanBeAccumu1ated~}
写个总结:
此题主要考察花指令 反调试 栈指针平衡 剩下的就是逆向功底和代码功底了python脚本不熟练 写的缓慢 报错还多 要加强coding能力 python还是方便打比赛啥的位运算不一定是爆破 之前77也说过 看情况来吧 耐心一点说不定就可逆了逆向能力有待提高 还是慢了


