1 shellcode低2Gb警告、应使用高2GB 稳定 :
在内核挂钩子:
方法1(申请):
方法2(偷内存):
注意: 偷的时候 看一下 页属性 是否可读可写可执行
裸函数注意:
Hook kifastcallentry
重点结论:注意 当
jmp 寄存器 和call寄存器一样 也 不需要计算什么偏移;寄存器是什么就跳到什么。
push 0xAddr;ret 也不需要 计算偏移;但是需要 6个字节;计算偏移的需要5个字节
计算偏移 是最重要的;
注意 步骤:
计算到目标code 的偏移 (或者直接使用寄存器)
将当前位置的 opcode 修改 为跳转 指令 char * [] = {0xe9,0x.....0x..}
然后在目标地址那个做好处理后 最好将 执行流 交换原来的执行流;所以再计算偏移(或使用寄存器)跳回去;
f7 单步调试触发 的是 idt 里面的 1号处理
使用 pchunter 查看idt 里面的序号为 1 的向量的地址;然后 使用ida 调试 查看;
hook;
大致如下:
程序1 : 挂钩gdt内存地址到 目标函数
程序2 :hook 逻辑操作 代码: