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

posted @ 2024-09-08 19:20  BattleofZhongDinghe  阅读(12)  评论(0编辑  收藏  举报