怎么去patch格式化串漏洞的程序

<–more–>

方法 —–> 替换printf 为puts

0x1 确定计算方法

由于地址是相对的 所以

新地址 = 目标地址(这里即为 puts的plt地址) - 当前修改指令地址的下一指令地址

0x02 确定目标地址

在plt 段 可以看到 puts_plt 地址为 0x08048410

0x03 确定当前地址

当前指令 call _printf的地址为 0x08048618 下一指令地址为 0x0804861D

0x04 计算

计算结果 如果为负数 记得补码~

1
2
3
4
5
6
7
8
9
>>> puts_plt = 0x8048410
>>> call_net_addr = 0x0804861d
>>> offset = puts_plt - call_next_addr
>>> offset
-525
>>> hex(offset)
'-0x20d'
>>> hex(0xffffffff-0x20d+1)
'0xfffffdf3L'

0x05 修改

Edit –> Patch Program –> Change Byte

E8 是操作码 后四位是偏移 即 又因为高字节在后面~

E8 C3 FD FF FF C7 04 24 72 87 04 08 E8 E7 FD FF

我们需要修改 C3 FD FF FF —> F3 FD FF FF

修改后 F5 伪代码~

0x06 保存

Edit –> Patch Program –> Apply patches to input file

运行情况~

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 方法 —–> 替换printf 为puts
    1. 1.1. 0x1 确定计算方法
    2. 1.2. 0x02 确定目标地址
    3. 1.3. 0x03 确定当前地址
    4. 1.4. 0x04 计算
    5. 1.5. 0x05 修改
    6. 1.6. 0x06 保存
,