zoukankan      html  css  js  c++  java
  • 8_InlineHook

    1 shellcode低2Gb警告、应使用高2GB 稳定 :

    内核挂钩子

    由于每个进程的低2gb 的数据是不同的;所以 在内核挂钩子 因该把 代码 放在 高 2gb。

    方法1(申请):

    比如 使用前面的 ExAllocatePool(0,size);分配非分页内存,然后把shellcode 拷贝到 非分页内存。

    方法2(偷内存):

    注意: 偷的时候 看一下 页属性 是否可读可写可执行

    在内核固定 没有使用到的地方 放上我们的 shellcode;;

    如:gdtr 中的 空向量。

    1570272839541

    起始 下面这些都没有使用到,都可以占用:

    1570272974943

    裸函数注意:

    在裸函数中没有自动的 ebp ,esp 开栈 平栈的操作;所以忌讳使用局部变量;当然可以自己管理栈,使用好局部变量。

    Hook kifastcallentry

    重点结论:注意 当

    目标地址 < 当前地址 ; jmp 的偏移 应该是 直接 目标 - 当前 -5;

    目标地址 > 当前地址 ; jmp 的偏移应该 是 目标 - 当前 -5;

    是一样的; jmp 偏移的基址 是当前指令结束位置

    jmp 寄存器 和call寄存器一样 也 不需要计算什么偏移;寄存器是什么就跳到什么。

    push 0xAddr;ret 也不需要 计算偏移;但是需要 6个字节;计算偏移的需要5个字节

    计算偏移 是最重要的;

    注意 步骤:

    1. 计算到目标code 的偏移 (或者直接使用寄存器)

    2. 将当前位置的 opcode 修改 为跳转 指令 char * [] = {0xe9,0x.....0x..}

    3. 然后在目标地址那个做好处理后 最好将 执行流 交换原来的执行流;所以再计算偏移(或使用寄存器)跳回去;

    f7 单步调试触发 的是 idt 里面的 1号处理

    使用 pchunter 查看idt 里面的序号为 1 的向量的地址;然后 使用ida 调试 查看;

    hook;

    大致如下:

    程序1 : 挂钩gdt内存地址到 目标函数

    1570289557113

    程序2 :hook 逻辑操作 代码:

    1570289111758


  • 相关阅读:
    1254:走出迷宫
    1332:【例2-1】周末舞会
    P1744 采购特价商品 题解(讲解图论)
    p1305 新二叉树
    P1069 细胞分裂
    LOJ #124. 除数函数求和 1
    P4438 [HNOI/AHOI2018]道路
    P4318 完全平方数
    P1447 [NOI2010]能量采集
    P3200 [HNOI2009]有趣的数列
  • 原文地址:https://www.cnblogs.com/leibso-cy/p/11718901.html
Copyright © 2011-2022 走看看