CTF逆向:将数组作为函数代码执行
例题
攻防世界 BABYRE
flag判定条件为这个
if ( v5 == 14 && (*judge)(s) )
注意judge本质上是一个数组,(*judge)(s)则说明judge数组中的内容被当做代码执行
但前面又有
for ( i = 0; i <= 181; ++i )
judge[i] ^= 0xCu;
judge数组中的内容进行加密
所以需要进行patch
start=0x600b00
for i in range(182):
patch_byte(start+i,ord(get_bytes(start+i,1))^0xc)
然后选中judge按住c然后按住p,然后F5反汇编
方法二:
动态调试
先打一个断点
linux端输入一个长度为14的字符串并回车
F7单步到call rdx;judge 然后F7进入judge
在刚开始进入judge的时候按一下p
然后F5查看伪代码