Ring3下Inline Hook API

Ring3 下 API Inline Hook 优化方案探索与实现 本博文由优快云博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.youkuaiyun.com/zuishikonghuan/article/details/51302024  以前写过两篇“[Win32] API Hook(1)在32/64位系统上的实现”博客,介绍并给出了 API inline hook 代码,如下: bl 阅读详情

用CreateFile为例子,讲解一下Ring3下的Inline Hook API,基本原理很简单

1、获取CreateFile函数的地址

2、读取CreateFile函数的前8个字节

3、将CreateFile函数的前8个字节,修改成mov eax,我的函数地址  jmp eax

4、进入我的函数地址之后,记得恢复CreateFile函数原来的8个字节,不然没法正常使用CreateFile

 

代码如下:

#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <tchar.h>

//修改API入口为 mov eax, 00400000;jmp eax是程序能跳转到自己的函数
BYTE NewBytes[8] = {0xB8, 0x0, 0x0, 0x40, 0x0, 0xFF, 0xE0, 0x0};
BYTE OldBytes[8] = {0};

FARPROC CreateFile_Addr;

HANDLE WINAPI MyCreateFile(
		__in          LPCTSTR lpFileName,
		__in          DWORD dwDesiredAccess,
		__in          DWORD dwShareMode,
		__in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
		__in          DWORD dwCreationDisposition,
		__in          DWORD dwFlagsAndAttributes,
		__in          HANDLE hTemplateFile
		)
{
	MessageBox(0,"MyCreateFile",0,0);
	//恢复API头8个字节
	WriteProcessMemory( INVALID_HANDLE_VALUE, (void*)CreateFile_Addr,
		(void*)OldBytes, 8, NULL);

	printf("lpFileName is %s\n",lpFileName);

	//调用正确的函数
	HANDLE hFile=CreateFileA(lpFileName,dwDesiredAccess,dwShareMode,
		lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile);
		
	//写入跳转语句,继续Hook
       WriteProcessMemory(INVALID_HANDLE_VALUE, (void*)CreateFile_Addr,
       (void*)NewBytes, 8, NULL);

	return hFile;
}


void main()
{
	HMODULE hModule_Kernel32 = LoadLibrary("Kernel32.dll");
	CreateFile_Addr = GetProcAddress(hModule_Kernel32, "CreateFileA");

	printf("CreateFileA_Addr is %x\n",CreateFile_Addr);
	printf("MyCreateFile Addr is %x\n",MyCreateFile);
	
	//读CreateFile函数的前8个字节
	if(ReadProcessMemory(INVALID_HANDLE_VALUE,CreateFile_Addr,OldBytes,8,NULL)==0)
	{
		printf("ReadProcessMemory error\n");
		return;
	}
	
	printf("OldBytes is %x%x%x%x%x%x%x%x\n",OldBytes[0],OldBytes[1],OldBytes[2],
		OldBytes[3],OldBytes[4],OldBytes[5],OldBytes[6],OldBytes[7]);
	
	//将NewBytes改成My函数地址
	*(DWORD*)(NewBytes + 1) = (DWORD)MyCreateFile;
	
	printf("NewBytes is %x%x%x%x%x%x%x%x\n",NewBytes[0],NewBytes[1],NewBytes[2],NewBytes[3],
		NewBytes[4],NewBytes[5],NewBytes[6],NewBytes[7]);
	
	//写入跳转,开始Hook
	WriteProcessMemory(INVALID_HANDLE_VALUE,CreateFile_Addr,NewBytes,8,NULL);

	//调用CreateFileA测试一下。
	HANDLE hFile=CreateFileA("C:\\1.txt",GENERIC_ALL,FILE_SHARE_READ,0,CREATE_ALWAYS,0,0);
	CloseHandle(hFile);
}


 

 

InlineHook--Ring3 实现思路: 使用GetProcAddress得到函数地址,将函数入口点的前5字节进行替换,使用e9指令进行跳转到Fake函数的地址,然后去执行挂钩函数。 在程序的实现过程中注意的问题有两个: 保存源函数实现的前5字节指令,为了恢复钩子。 e9指令后4字节的偏移计算 //e9指令后面的数据计算,就是跳转到当前地址加5字节偏移,加e9后面的偏移地址 //例如:00DB15E6 E9 A5 3B... 阅读详情

相关推荐

深入解析Ring3环境下Inline Hook绕过技术与Delphi实战

htmltable {th, td {th {pre {简介:在Windows系统中,Ring3即用户模式,是应用程序运行的常规环境,而Inline Hook作为一种常见的调试与监控手段,通过修改函数入口指令实现控制流劫持,广泛应用于恶意软件分析、逆向工程等领域。本文深入探讨在Ring3下如何有效绕过Inline Hook机制,并结合提供的Delphi源码进行技术剖析。

weixin_35019679的博客 1184

MacOS动态注入的三种方式及hook方案

1.静态注入 https://cloud.tencent.com/developer/article/1193647 insert_dylib 将dylib注入到二进制文件中生成新的二进制。 2.DYLD_INSERT_LIBRARIES动态注入 https://blog.nswebfrog.com/2018/02/09/make-injection-app-for-mac/ xcode创建一个...

Tesi1a的充电桩 1万+

apihook,inlinehook

hook,apihook,inlinehook

ring3 Inline Hook 恢复(附源码)

链 接: http://bbs.pediy.com/showthread.php?t=145825 最近调试一网游,加了tmd壳,HOOK了三个API:DbgBreakPoint、DbgUiRemoteBreakin、DbgUserBreakPoint,平时调试前都用XT还原,突然想自己试试自己编码还原,于是简单写了个类,用于ring3 Inline Hook的还原。     先回顾一

cqyczj的专栏 2892

完美支持64&32位InlineHook,C语言,C++类 都有

Windows 64位和32位Inline Hook的例子。包括C语言代码,和封装好的C++类,绝对超值,超简单实用的例子,可以直接运行,用了绝对说好!

InlineHookOpenProcess之例子的软件源码

InlineHookOpenProcess之例子自己收藏的源码,特意贡献给大家

ring3 inline hook例子

ring3 inline hook例子 #include #include #include //修改API入口为mov eax,00400000; jmp eax 跳转到自己的函数 BYTE NewBytes[8] = {0xB8,0x0,0x0,0x40,0x0,0xFF,0xE0,0x0}; BYTE OldBytes[8] = {0}; FARPROC Crea

yxuenong的专栏 819

APIHook、InlineHook库,使用C++11编写,可将回调函数绑定到类成员函数

APIHook、InlineHook库,使用C++11编写,可将回调函数绑定到类成员函数。代码风格良好,适合学习。

HOOK API

一个简单的console工程,vc6,vc7在win2k pro,server上调试通过. #include #include #include #pragma comment(lib,"dbghelp.lib") #pragma comment(lib,"user32.lib") typedef int (__stdcall *old_messagebo

千里之外 1232

API hook(inline)超简入门代码

简单的API hook的入门用代码参考,hook目标MessageBoxW。hook形式:inline hook

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 308

API拦截——实现Ring3全局HOOK

首先来解释一下这次的目标。由于windows的copy-on-write机制(Ring0下可以用CR0寄存器关掉它),Ring3下的HOOK只对当前进程有效,其他进程的API还是正常的。这就是说我们必须枚举进程,然后对每个Ring3进程执行一遍HOOK操作。 但是,系统中总有新进程产生,对于这些新进程我们怎么处理呢?最容易想到的就是设置一个TIMER,每隔一段时间就枚举一遍进程然后把新的挂钩

zqf_office的专栏 888

python爬取淘宝数据

python爬取淘宝数据淘宝评论 淘宝评论 打开淘宝,选择打开需要爬取的商品的评论。在谷歌浏览器选择开发者工具,选择network,找到list_detail_rate.htm?itemId=624466733121,点击headers、previews,可以看见相应的评论数据。 爬取一页屏评论代码如下 import re import requests headers = { 'Referer': '在headers中', 'User-Agent': '在

qq_36333776的博客 5800

我的学习笔记之四——inline使用DLL进行全局HOOK的改进(ring3_inline_dll_hook_Messagebox_临界区)

2008-12-24 19:26:30|  分类: 编程与电脑技术|字号 订阅 JMP HOOK API最简单的就是在MyFun()中先调用Hookoff,再调用原fun,再调用hookon,关于原理就不再多说。而它明显的不足也就在此,在瞬间两次修改系统API的代码,如果某个程序(不要说我自己的程序没使用多线程,这是全局HOOK,你不能保证其它程序没使用),使用了

zqf_office的专栏 745

”COMSOL“竟然如此简单!我悟了!!

COMSOL Multiphysics具有强大的多物理场全耦合仿真分析功能、高效的计算性能,可以保证数值仿真的高度精确,已被广泛应用于各个学科领域,近年来运用COMSOL来解决电化学实际工程问题也越来越普遍。

C1012562281的博客 3449

OnlyOffice Docker部署全攻略:解除连接限制+文件大小限制+中文字体优化

本文详细介绍了OnlyOffice企业级Docker部署的完整解决方案,重点破解连接限制、文件大小限制和中文字体优化三大核心痛点。通过定制化镜像部署、性能调优配置和中文字体深度优化,帮助企业实现高效稳定的文档协作平台。

weixin_28837817的博客 369

Inline Hook(ring3) 简单源码

很久之前写的,练手之用。 #include #include #include #pragma comment(lib, "psapi.lib") //BYTE      Org_Code[7];    // 备份dll法, 因此就可以不需要 BYTE        New_Code[7]; HMODULE

zqf_office的专栏 902

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 486

我的学习笔记之三——inline使用DLL进行全局HOOK(ring3_inline_dll_hook_Messagebox)

前一篇学习了修改导入表来HOOK API,虽然是自己HOOK自己,但稍改一下,变成DLL就可以全局HOOK,因为windows有数据执行保护会拦截,所以就不再深入。 还有一种HOOK API法叫INLINE HOOK就是采用JMP法。长话短说,所谓的API HOOK指的就是 :系统函数接口的钩子。当系统函数进行调用时,首先进入我们指定的函数,然后再执行系统的函数。IAT是修改EXE的导入地址,而

zqf_office的专栏 767

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 232

Java全栈:电影数据检索与推荐系统实战

全文检索个性化推荐数据缓存容器化部署通过这个项目,我们不仅实践了Java全栈开发的各项技术,还接触了推荐系统的核心算法实现。用户历史行为数据物品特征数据上下文信息实时反馈算法的准确性推荐的多样性系统的实时性冷启动问题性能优化效果评估VIEW, // 浏览CLICK, // 点击SEARCH, // 搜索RATE, // 评分COMMENT, // 评论SHARE, // 分享WATCH_TIME, // 观看时长。

exlink2012的专栏 892

我的学习笔记之五——inline_HOOK完美篇(ring3_inline_EXE_hook_Messagebox完美篇)

2008-12-25 12:50:30|  分类: 编程与电脑技术|字号 订阅 以下内容转载自看雪 标 题: 【原创】RING3代码HOOK的原理实现 (学习笔记1) 作 者: bzhkl 时 间: 2008-12-10,14:13 链 接: http://bbs.pediy.com/showthread.php?t=78418 最初看见俄国一份DE

zqf_office的专栏 772

【花雕学编程】Arduino动手做(249)---ESP32+GC9A01之播放GIF的空战锁定动画

摘要: 本实验基于ESP32开发板,驱动1.28寸圆形IPS彩色TFT显示屏(GC9A01驱动,240×240分辨率),通过SPI接口实现GIF动画播放。利用TFT_eSPI和AnimatedGIF库,成功加载并循环播放预置的科幻风格GIF动画(如HUD界面、X翼战机等)。代码实现了GIF解码、逐帧渲染及动态显示功能,通过串口调试监控运行状态。实验验证了该显示屏在动态图像显示中的流畅性,为嵌入式图形应用提供了实用方案,适用于智能穿戴、交互设备等场景。 关键词: ESP32、GC9A01、圆形TFT、GIF播

雕爷学编程 492

Ring3下Inline Hook MessageBox

 这是学习Ring3 下Inline Hook 的代码,写的很菜,部分代码参考了邪8中“我非我”的代码,在此表示感谢。原文中有二处错误,后面好多人都说运行不成功,不知道原作者是怎样编译成功的,原代码参见ring3 inline hook demo由于在邪8中等级太低,不能发贴,借用宝地说明下提前声明下,我调试的VC++为6.0的,在VC++编译器生成EXE中,函数也像API一样进行了中间跳转如

1120

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 网页/脚本练习笔记
下一篇: Hook小记
sysprogram
博客等级 码龄17年 298粉丝 442原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值