#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;
}
相关推荐
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
Ubuntu 22.04 LTS升级OpenSSH 9.6p1完整指南(附OpenSSL 3.2.0适配方案)
本文详细介绍了在Ubuntu 22.04 LTS系统中升级OpenSSH至9.6p1版本的全流程,包括OpenSSL 3.2.0的适配方案。从准备工作、依赖库安装、源代码编译到系统集成与配置,提供了完整的操作指南和常见问题解决方法,帮助用户安全高效地完成升级,提升服务器安全性和性能。
Hook技术:Ring3层下的Inline Hook(mov eax xxxxxxxx;jmp eax)详解【附源码】
Ring3层下的Inline Hook详解 Ring3层下的Inline Hook是最常用的Hook手段之一,是一种通过修改机器码的方式来实现hook的技术。 探究API调用正常执行流程 探究Inline Hook中的函数调用过程
Halcon 简单的形状匹配定位与区域跟随
【代码】Halcon简单的形状匹配定位与区域跟随。
PTA编程—币值转换
我对于这个题的主要思想就是把九位数分三块,对每块进行处理后,再合并。有了这个思想就开始写代码,后面就是哪有洞补哪,哪个测试用例没通过就对其特殊处理…。反正最后测试用例全通过了。 #include<iostream> #include <string> #include <algorithm> using namespace std; char a[10]={'a','b','c','d','e','f','g','h','i','j'}; //既然题目说了最多9位
逆向学习之Hook技术
IAT表:全称Import Address Table,中文名为导入地址表每一个进程都有这样一个IAT表,而这个IAT表存储着当前这个模块所用到的所有api函数地址将程序拖入OD里,随便找一个调用系统api的函数,然后数据跟随内存地址,会发现这些api函数在IAT表里的位置都是挨在一起的只要将这些函数的地址修改成指向我们自行设置的函数地址,就能实现所谓的IAT Hook又称为超级Hook, 比起IAT Hook, 它的实用性更强以及更加容易过检测。...
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类模型。下游任务全面领先。
JMP方法HOOK
JMP HOOK IAT detours Win9x 系统中,系统DLL被装入实际的物理存储器,然后映射到每个进程的0x80000000~0xBFFFFFFF共享内存区,如果修改这段区域的DLL代码,则对于所有进程都有效(实际Win98对主要的系统DLL作了保护,除非进入ring0才能修改)。 Win2000/NT 的进程空间不存在共享内存区,尽管DLL被装入
2026 年第十六届MathorCup数学应用挑战赛题目C题中老年人群高血脂症的风险预警及干预方案优化 2026妈妈杯 详细思路、代码、模型
2026 年第十六届MathorCup数学应用挑战赛题目 C题中老年人群高血脂症的风险预警及干预方案优化 人口老龄化进程的持续加快,使得40岁及以上中老年人群成为 慢性病防控的核心群体,其中高血脂症的发病率呈逐年攀升态势, 已成为诱发冠心病、脑梗死等心脑血管疾病的重要危险因素,严重 威胁中老年群体的心血管健康与生活质量,也加重了基层医疗的慢 病管理负担。从中医体质学视角来看,体质禀赋与偏颇是疾病发生 发展的内在根基,其中痰湿体质为中老年高血脂症的高发体质类型, 该体质人群存在痰湿内蕴、脾胃运化失常、水湿代谢
使用修改为jmp指令的方式hook 32位函数
要填写jmpInstruction的最后4个字节,我们需要它们之间的偏移量payload函数和jmp指令之后的指令。//32位相对跳转jump操作码为E9,后面带着1个32位操作数作为跳转偏移量。
五、实战pxe安装ubuntu 22.04 软raid1(实际生产pxe配置)
这段配置文件是一个cloud-init的自动安装配置,用于自动化部署Ubuntu服务器操作系统。它定义了从系统身份、键盘布局、区域设置到磁盘分区和RAID配置的一系列设置,并且包含了在安装过程的最后阶段执行的一些命令。基础设置version: 1指定了autoinstall配置文件的版本。source定义了安装源,这里是ubuntu-server。identity设置了主机名(hostname)、用户(username)和密码(password注意这里的密码是经过加密的。键盘与语言设置。
47.HOOK引擎优化支持CALL与JMP位置做HOOK
游戏逆向、游戏安全、c++、反游戏外挂
【NLP】第十五章:隐马尔可夫——前向算法、后向算法、维特比算法、Baum-Welch算法
就是好比我现在知道了观测序列Observations、掩藏序列States,我试着去学一个最优的(π, A, B),让在这个(π, A, B)下,观测序列Observations、掩藏序列States的概率最大。(2)矩阵B就更好理解了,矩阵B的第一行表示我已经抽取的是盒子1,那我抽取白球的概率就是0.4,抽取黑球的概率就是0.6了,因为第一个盒子只有4白6黑嘛。三是,由于每次抽取的小球的颜色的概率不仅取决于,小球所在的盒子中的黑白球的比例,还取决于你是从哪个盒子中抽的,所以其实观测序列还对应着一个。
最新的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
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
JMP指令转换公式推导
看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象 找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 = 87879E74 88881234 – 010073c5 = 87879E6F 因为机器码 如E9 749e8787 是按字节排列的所以87879E74显示出来是749e8...
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文件中的函数,在加载的时候以写拷贝的权限在进程中申请内存。
内联汇编和JMP到内联函数注意事项
对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈。 对于call类型的hook,如果使用_declspec(naked)修饰的话,要注意自己恢复堆栈平衡。 下面是网上对_declspec(naked) 的介绍: _declspec(naked) ...
Hook攻防之InlineHook
Inline Hook,又称为超级Hook,是一种强大而又灵活的Hook技术。Inline Hook的主要思想就是直接修改目标函数的代码,通常是在目标函数的开头插入一个跳转指令(jmp)。这个跳转指令会将程序的执行流跳转到我们自定义的函数中。在我们的自定义函数中,我们可以执行任意的代码,然后再跳回目标函数的剩余部分。这样,我们就可以在不改变目标函数原有逻辑的基础上,添加自己的功能。
net hook 研究
要涉及一些反汇编的知识,作者也不是很懂,可以提供一些思路 public class Test { public void Test1() { Console.WriteLine("test1"); } } class Program { static void Main(string[] args) { var obj = new Te...
【PE】inline hook的实现
学习一下inline hook
7418



被折叠的 条评论
为什么被折叠?



