攻防世界BABYRE
攻防世界BABYRE
分析
首先查壳,64位无壳
然后放入IDA分析
这里的逻辑很简单,大概就是一个简单的异或再去if语句进行判断得出是否正确,但是我发现第12行这里的(*(unsigned int (__fastcall **)(char *))judge)(s)很奇怪,但我也没多去管了就去直接写脚本了
发现不对,再回去看看那个奇怪的地方所以这里(*(unsigned int (__fastcall **)(char *))judge)(s)应该这样分析,unsigned int 是judge函数的返回类型(无符号整型),(fastcall )是函数的调用约定,(char *)这个是提取judge的数组头的一连串字符串做函数名。也就是说这不是真正的judge,judge应该是个函数而不是数组,那么我们要去把真正的judge弄出来
函数调用约定具体可以去看这个:(46条消息) __fastcall具体含义_阿齐兹的博客-CSDN博客__fastcall
这里就直接用ida python弄(这也是我初次使用这个东西)
已经改好了,发现还是数组然后就按c转换成数据再按p声明一下
这里v3是接在v2后面的,因为都是传到一个寄存器中的
接着就能写真正的脚本了
脚本
|
总结
对花指令不是很熟悉,没有第一眼认出来,要多练多看。第一次用ida python不熟练,大家可以去看看这个
IDAPython入门教程 基于IDA7.5_Python3 第一讲 简介与地址获取 - iBinary - 博客园 (cnblogs.com)
但这都是基础的,还应该多加练习!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逆向上分之路!
评论