攻防世界 BABYRE

攻防世界 BABYRE

链接

BABYRE

思路

之前我还以为judge是182个字符的名字。后来发现他就是指向了一段指令。

__fastcall是调用约定,judge是函数地址,(unsigned int (__fastcall **)(char*))个人觉得是一个强制类型转换转换为返回值为unsigned int,参数为char*的函数类型。s为传入的参数。

看wp有人说是花指令,我个人感觉更像是一个简单的壳。。

总之idc运行一次脚本

1
2
3
4
5
6
7
auto addr = 0x600b00;
auto i = 0;

for(i=0;i<182;i++){
auto temp = Byte(addr+i) ^ 0x0c;
PatchByte(addr+i, temp);
}

PathByte(addr,替换内容)

然后将judge的内容全选上按P。

然后就可以反编译了。

这代码挺简单的就不解释了。

python脚本:

1
2
3
4
5
6
7
8
9
import bitstring


s = "fmcd\x7Fk7d;V`;np"
res = ""
for i in range(len(s)):
res += chr(ord(s[i]) ^ i)
# print("".join([chr(i) for i in res]))
print(res)

请我喝杯咖啡吧~

支付宝
微信