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查看伪代码


浙公网安备 33010602011771号