8_InlineHook
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个字节
计算偏移 是最重要的;
注意 步骤:
计算到目标code 的偏移 (或者直接使用寄存器)
将当前位置的 opcode 修改 为跳转 指令 char * [] = {0xe9,0x.....0x..}
然后在目标地址那个做好处理后 最好将 执行流 交换原来的执行流;所以再计算偏移(或使用寄存器)跳回去;
f7 单步调试触发 的是 idt 里面的 1号处理
使用 pchunter 查看idt 里面的序号为 1 的向量的地址;然后 使用ida 调试 查看;
hook;
大致如下:
程序1 : 挂钩gdt内存地址到 目标函数

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

8_InlineHook的更多相关文章
随机推荐
- 拾遗:nmcli 连接 wifi
... nmcli device wifi list nmcli device wifi connect SSID password PASSWORD ...
- 获取hdfs集群信息(fs.defaultFS)
[root@hive-dp-7bd6fd4d55-wctjn hive-1.1.0-cdh5.14.0]# hdfs getconf -confKey fs.default.name19/12/04 ...
- linux 服务器修改密码
登录服务器后直接输入命令行passwd root 然后输入两次新密码就行
- ios网络学习------2 用非代理方法实现同步post请求
#pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...
- 集成 Swagger2 构建强大的 RESTful API 文档
微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoo ...
- 新项目UX设计0到1的正确开启方式
无论是在BAT还是创业小公司,都随时可能接到从0开始的新项目,那么作为负责新项目的主设OR独立设计师,我们应该从何开启工作呢?
- linux 下无法输入# 显示为£
在键盘布局里面,(Keyboard Layout)设置为中国,汉语.解决问题
- nginx 自启动
转载:https://www.cnblogs.com/cxscode/p/8262319.html 安装Nginx 下载windows版nginx (http://nginx.org/download ...
- 启动eclipse出现JVM terminated. Exit code=127 错误解决办法
https://blog.csdn.net/wpzsidis/article/details/72954387 进去第二次又错
- boost asio tcp 多线程异步读写,服务器与客户端。
// server.cpp #if 0 多个线程对同一个io_service 对象处理 用到第三方库:log4cplus, google::protobuf 用到C++11的特性,Windows 需要 ...

