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

内核挂钩子

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

方法1(申请):

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

方法2(偷内存):

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

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

如:gdtr 中的 空向量。

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

裸函数注意:

在裸函数中没有自动的 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内存地址到 目标函数

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

最新文章

  1. C#数组的声明
  2. FPM打包工具
  3. C#设计模式——访问者模式(Visitor Pattern)
  4. 微软推出首个Microsoft Azure Stack技术预览版
  5. Android版本分布——2016年10月更新
  6. 转载:Java多线程中join方法的理解
  7. iOS 9之New System Fonts(San Francisco 字体)
  8. 双线服务器和CDN的区别
  9. android 适配器 ArrayAdapter,SimpleAdapter的学习
  10. Xamarin.Android中实现延迟跳转
  11. Dijkstra算法 Java实现
  12. Linux 文本处理工具记录
  13. JavaScript入门学习笔记(二)
  14. Delphi 对ini文件的操作
  15. solr插件导入数据库中的数据
  16. Python3-socket网络知识储备
  17. 【Odoo 8开发教程】第二章:Odoo生产环境部署设置
  18. tkinter 打包成exe可执行文件
  19. es中级部分知识点总结
  20. PAT甲级 1126. Eulerian Path (25)

热门文章

  1. 洛谷 P3369 【模板】普通平衡树 (Treap)
  2. vs设置html的模板快
  3. Lambda表达式底层分析
  4. iptables简介及常用命令
  5. phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引
  6. rest_framework 认证组件 权限组件
  7. vue-cli搭建vue开发环境
  8. Swift 环境搭建
  9. js基础用法 ,基础语法
  10. QueryList getData()方法中多次调用来实现递归多级采集。