JMP、Hook

WINAPI HOOK (修改前五个字节,JMP跳转法) 本文一介绍用修改API头五个字节的方法在Win2k下的使用。利用Win2k为我们提供了一个强大的内存Api操作函数---VirtualProtectEx,WriteProcessMemeory,ReadProcessMemeory,有了它们我们就能在内存中动态修改代码了,其原型为: BOOL VirtualProtectEx( HANDLE hProcess, // 要修改内存的进程句柄 LPVO 阅读详情
#include "stdio.h"
#include "tchar.h"
#include "windows.h"


//offset=目标地址-(jmp指令起始地址+5)
//跳转指令解码:[0xe9][offset]
//  offset:有符号整型,四字节.它等于jmp指令的下一指令地址到目标地址的相对距离
//  计算公式:
//  offset=目标地址-(jmp指令起始地址+5)
//其实还有0xeb等短跳转指令可用的,但用的最多的还是0xe9跳转

BYTE jmp[5]={0};
BYTE enter[5]={0};
HANDLE hProcess=NULL;
DWORD pfnMsgBox=0;
DWORD dwOld=0;

int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType)
{
 int ret=0;
 printf("this is MessageBoxProxy begin!\n");
 printf("Caption:%s\n",lpCaption);
 printf("Text:%s\n",lpText);

 memcpy((void*)pfnMsgBox,enter,5);//恢复入口指令
 FlushInstructionCache(hProcess,(void*)pfnMsgBox,5);

 ret=MessageBox(hWnd,lpText,lpCaption,uType);//调用原函数
 
 memcpy((void*)pfnMsgBox,jmp,5);//写入跳转指令
 FlushInstructionCache(hProcess,(void*)pfnMsgBox,5);
 printf("this is MessageBoxProxy end!\n");
 return ret;
}

void SetupHook(void)
{
 pfnMsgBox=(DWORD)GetProcAddress(GetModuleHandle(_T("user32.dll")),_T("MessageBoxA"));
 memcpy(enter,(void*)pfnMsgBox,5);//保存入口指令

 jmp[0]=0xe9;
 *(int*)&jmp[1]=(int)&MessageBoxProxy-((int)pfnMsgBox+5);
 
 //写入跳转指令,调用MessageBoxA时会跳到MessageBoxProxy
 VirtualProtect((void*)pfnMsgBox,5,PAGE_EXECUTE_READWRITE,&dwOld);
 memcpy((void*)pfnMsgBox,jmp,5);
}

void RemoveHook(void)
{
 DWORD dwtemp;
 memcpy((void*)pfnMsgBox,enter,5);
 FlushInstructionCache(hProcess,(void*)pfnMsgBox,5);
 VirtualProtect((void*)pfnMsgBox,5,dwOld,&dwtemp);
}

int main(void)
{
 hProcess=GetCurrentProcess();

 SetupHook();
 MessageBox(NULL,_T("Hook Demo!"),_T("API Hook"),MB_ICONINFORMATION);
 
 RemoveHook();
 MessageBox(NULL,_T("Hook Demo!"),_T("API Hook"),MB_ICONINFORMATION);
 system("pause");
 return 0;
}

JMP 编写的HOOK挂接函数 替换原API函数入口实现挂钩,PE文件,动态链接实现通用替换类,实现代码攻击。另外有文档介绍了其工作原理,再次声明本代码核心类部分非原创。 立即下载

相关推荐

hook api jmp调用底层windows

环境vs2019 c++控制台程序,这个主要是修改Kernel32.dll入口来使得在启动前就监听函数。

微软x64常用汇编指令总结

这里写目录标题lea 直接读取有效地址值ret 函数返回xor 异或add 加法sub 减法inc 自增(increase)jmpcmpjneje lea 直接读取有效地址值 lea eax ,[1001H] lea作用是把 中括号里的值存入 寄存器里 把[1001H]里面的地址赋值给eax,也就是把1001H赋值给eax,执行之后的结果,是 eax = 1001H 等价于 mov eax , 1001H 通常做给c++指针赋值的时候使用这个指令,例如: int a = 3; // mov d

小手琴师的博客 7418

Ubuntu 22.04 LTS升级OpenSSH 9.6p1完整指南(附OpenSSL 3.2.0适配方案)

本文详细介绍了在Ubuntu 22.04 LTS系统中升级OpenSSH至9.6p1版本的全流程,包括OpenSSL 3.2.0的适配方案。从准备工作、依赖库安装、源代码编译到系统集成与配置,提供了完整的操作指南和常见问题解决方法,帮助用户安全高效地完成升级,提升服务器安全性和性能。

i8j9k0l1的博客 320

Hook技术:Ring3层下的Inline Hook(mov eax xxxxxxxx;jmp eax)详解【附源码】

Ring3层下的Inline Hook详解 Ring3层下的Inline Hook是最常用的Hook手段之一,是一种通过修改机器码的方式来实现hook的技术。 探究API调用正常执行流程 探究Inline Hook中的函数调用过程

weixin_43742894的博客 1322

Halcon 简单的形状匹配定位与区域跟随

【代码】Halcon简单的形状匹配定位与区域跟随。

唐大狗 2806

PTA编程—币值转换

我对于这个题的主要思想就是把九位数分三块,对每块进行处理后,再合并。有了这个思想就开始写代码,后面就是哪有洞补哪,哪个测试用例没通过就对其特殊处理…。反正最后测试用例全通过了。 #include<iostream> #include <string> #include <algorithm> using namespace std; char a[10]={'a','b','c','d','e','f','g','h','i','j'}; //既然题目说了最多9位

uyo9ko的博客 991

逆向学习之Hook技术

IAT表:全称Import Address Table,中文名为导入地址表每一个进程都有这样一个IAT表,而这个IAT表存储着当前这个模块所用到的所有api函数地址将程序拖入OD里,随便找一个调用系统api的函数,然后数据跟随内存地址,会发现这些api函数在IAT表里的位置都是挨在一起的只要将这些函数的地址修改成指向我们自行设置的函数地址,就能实现所谓的IAT Hook又称为超级Hook, 比起IAT Hook, 它的实用性更强以及更加容易过检测。...

xf555er的博客 7285

ConvNeXt 系列改进:引入大核注意力(LKA)替换 7×7 深度卷积,涨点 2.1%

LSKA替换7×7深度卷积,在ImageNet分类任务上实现2.1%的显著提升,参数量仅增加1M。LSKA的四层1D分解将计算复杂度从O(k²)降至O(k),21×21大核的计算量仅相当于原版7×7的1.7倍,实现了感受野与计算成本的完美平衡。部署友好度极高:LSKA模块在TensorRT FP16量化后延迟仅1.2ms,精度损失<0.1%,远优于Transformer类模型。下游任务全面领先。

ZXSXJ的博客 701

JMP方法HOOK

 JMP  HOOK  IAT  detours Win9x   系统中,系统DLL被装入实际的物理存储器,然后映射到每个进程的0x80000000~0xBFFFFFFF共享内存区,如果修改这段区域的DLL代码,则对于所有进程都有效(实际Win98对主要的系统DLL作了保护,除非进入ring0才能修改)。        Win2000/NT   的进程空间不存在共享内存区,尽管DLL被装入

gezi322的专栏 1849

2026 年第十六届MathorCup数学应用挑战赛题目C题中老年人群高血脂症的风险预警及干预方案优化 2026妈妈杯 详细思路、代码、模型

2026 年第十六届MathorCup数学应用挑战赛题目 C题中老年人群高血脂症的风险预警及干预方案优化 人口老龄化进程的持续加快,使得40岁及以上中老年人群成为 慢性病防控的核心群体,其中高血脂症的发病率呈逐年攀升态势, 已成为诱发冠心病、脑梗死等心脑血管疾病的重要危险因素,严重 威胁中老年群体的心血管健康与生活质量,也加重了基层医疗的慢 病管理负担。从中医体质学视角来看,体质禀赋与偏颇是疾病发生 发展的内在根基,其中痰湿体质为中老年高血脂症的高发体质类型, 该体质人群存在痰湿内蕴、脾胃运化失常、水湿代谢

YOLO 756

使用修改为jmp指令的方式hook 32位函数

要填写jmpInstruction的最后4个字节,我们需要它们之间的偏移量payload函数和jmp指令之后的指令。//32位相对跳转jump操作码为E9,后面带着1个32位操作数作为跳转偏移量。

AppNinja 开发手记 483

五、实战pxe安装ubuntu 22.04 软raid1(实际生产pxe配置)

这段配置文件是一个cloud-init的自动安装配置,用于自动化部署Ubuntu服务器操作系统。它定义了从系统身份、键盘布局、区域设置到磁盘分区和RAID配置的一系列设置,并且包含了在安装过程的最后阶段执行的一些命令。基础设置version: 1指定了autoinstall配置文件的版本。source定义了安装源,这里是ubuntu-server。identity设置了主机名(hostname)、用户(username)和密码(password注意这里的密码是经过加密的。键盘与语言设置。

jundao1997的专栏 999

47.HOOK引擎优化支持CALL与JMP位置做HOOK

游戏逆向、游戏安全、c++、反游戏外挂

计算机王的博客 524

【NLP】第十五章:隐马尔可夫——前向算法、后向算法、维特比算法、Baum-Welch算法

就是好比我现在知道了观测序列Observations、掩藏序列States,我试着去学一个最优的(π, A, B),让在这个(π, A, B)下,观测序列Observations、掩藏序列States的概率最大。(2)矩阵B就更好理解了,矩阵B的第一行表示我已经抽取的是盒子1,那我抽取白球的概率就是0.4,抽取黑球的概率就是0.6了,因为第一个盒子只有4白6黑嘛。三是,由于每次抽取的小球的颜色的概率不仅取决于,小球所在的盒子中的黑白球的比例,还取决于你是从哪个盒子中抽的,所以其实观测序列还对应着一个。

因为热爱所以坚持 1162

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jmp address windows hook

以下代码是sysnap早期发表的inlinehook ObReferenceObjectByHandle()的代码。大部分看懂了,但是有些看不懂,google也查了,qq群也问了。哪位高手有时间给科普下哈~ 可怜下偶们菜鸟吧。。。 __declspec(naked) T_ObReferenceObjectByHandle( IN HANDLE Handle, IN ACCESS_MASK

linuxheik的专栏 703

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JMP指令转换公式推导

看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象   找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 = 87879E74 88881234 – 010073c5 = 87879E6F 因为机器码 如E9 749e8787 是按字节排列的所以87879E74显示出来是749e8...

weixin_34259232的博客 345

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Inline Hook

我们之前提到过SSDT Hook IAT Hook等,这种Hook需要基于 这些SSDT,IAT这些表的Hook但是如果我们需要找一些未导出的函数,那么就很难去进行Hook,这就引出了另一种Hook,也就是在代码里面Hook,InlineHookAPI函数都都由操作系统所提供的DLL文件中引来,当在使用某个API函数时,在运行程序后,程序会主动把API所需的DLL链接进入进程中,这样,程序就会像调用自己的函数一样调用API这些在DLL文件中的函数,在加载的时候以写拷贝的权限在进程中申请内存。

m0_68259687的博客 1133

内联汇编和JMP到内联函数注意事项

对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈。 对于call类型的hook,如果使用_declspec(naked)修饰的话,要注意自己恢复堆栈平衡。 下面是网上对_declspec(naked) 的介绍: _declspec(naked) ...

diliangshu0841的博客 223

Hook攻防之InlineHook

Inline Hook,又称为超级Hook,是一种强大而又灵活的Hook技术。Inline Hook的主要思想就是直接修改目标函数的代码,通常是在目标函数的开头插入一个跳转指令(jmp)。这个跳转指令会将程序的执行流跳转到我们自定义的函数中。在我们的自定义函数中,我们可以执行任意的代码,然后再跳回目标函数的剩余部分。这样,我们就可以在不改变目标函数原有逻辑的基础上,添加自己的功能。

xf555er的博客 3029

net hook 研究

要涉及一些反汇编的知识,作者也不是很懂,可以提供一些思路 public class Test { public void Test1() { Console.WriteLine("test1"); } } class Program { static void Main(string[] args) { var obj = new Te...

The_Eyes的博客 539

【PE】inline hook的实现

学习一下inline hook

woodwhale的博客 891
上一篇: DLL应用基础知识
下一篇: WTL配置
Dark_Passion
博客等级 码龄17年 14粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值