0%

攻防世界Babyre

攻防世界Babyre

关键在于judge函数,judge函数无法正确反编译,显然是被加密了,main函数第8行即为加密过程

方法一:用ida python解密

已知judge函数的起始地址为0x600B00,且已知judge函数共182个字节,可以用ida python还原加密前的judge函数

运行如上脚本,发现数值发生了变化

然后按U(取消原来定义),再按 C(重新生成汇编代码),按P(重新生成 function)后即可f5反编译,得到加密前的judge函数

脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
v2_str = 'fmcd'
v2 = []
for x in v2_str:
v2.append(ord(x))
v2.append(127)
v3 = 'k7d;V`;np'
for x in v3:
v2.append(ord(x))
for i in range(0,14):
v2[i] ^= i
for i in v2:
print(chr(i),end='')

运行既得flag

方法二:注意到main函数的第8行即为解密judge函数的过程,所以可以采用动态调试的方法求解judge函数

由于文件为elf文件,所以将ida的dbgsrv得linux_server64复制到linux虚拟机中,在ida种启动远程调试,断点下在12行即可

此时judge函数已解密,双击进入

同样执行U、C、P后按f5即可看到解密后的函数