热补丁:为什么Windows API都以无意义的 mov edi,edi 开头?

通过ETW补丁绕过EDR监控:原理、实现与实战 事件追踪(ETW)是Windows操作系统内置的高性能内核级诊断框架,它通过提供者、控制器、消费者和会话的发布-订阅模型,为系统监控和安全分析提供底层数据源。其核心原理在于,内核与关键系统组件会主动将进程创建、文件操作、网络活动等事件写入ETW会话,供安全产品实时消费分析。这项技术的核心价值在于为终端检测与响应(EDR)等安全方案提供了至关重要的行为可见性,广泛应用于威胁检测、取证分析和性能监控等场景。然而,通过动态修补ETW内部的关键函数指针,可以干扰或阻断特定安全事件的上报流程,从而实现针对EDR的隐蔽 阅读详情

为什么Windows函数都以无意义的MOVEDI、EDI指令开始?

我们参考Windows 的反汇编,返现函数的开始都是以mov edi,edi,它看似毫无意义(该指令将寄存器复制到自己,并没有更新标志;这是完全没有意义的。)

原因是:这是故意设计的热补丁(hot-patching)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dmx8OgZ8-1634567009041)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20211018222149455.png)]

热补丁

这个MOV EDI, EDI指令是两个字节。NOP,这仅够在跳转指令中进行修补,以便可以动态更新函数,即运行时修改一个函数的行为。

修改过程如下:

把MOV EDI, EDI修改为一条短跳转指令(一条短跳转指令恰好两个字节),把MOV EDI, EDI上面的五个NOP修改为一条长跳转指令(一条长跳转指令恰好五个字节),短跳转指令跳到长跳转指令上,长跳转指令跳到修改后的函数体上。

为什么不直接以俩个 nop 指令作为无意义的入口指示?

答案是:为了提高效率。执行一条MOV指令比执行两条NOP指令花费更少的时间。

因为nop指令消耗一个时钟周期和一个管道。

因此其中的两个将消耗两个时钟周期和两个管道。(指令可能是成对的,每个管道中有一个,所以合并执行需要一个时钟周期。)

另一方面,MOV EDI, EDI指令消耗一个时钟周期和一个管道。(实际上,指令将占用一个管道,另一个管道可以并行执行另一条指令。您可以说指令在半个周期内执行。)无论您计算它,MOV EDI, EDI指令在两次执行的一半时间内执行。

参考资料

https://devblogs.microsoft.com/oldnewthing/20110921-00/?p=9583

Winsock API Inline Hook 实现进程级网络行为监控 Winsock 是 Windows 平台标准网络编程接口,其 send/recv 等函数构成用户态网络通信的核心入口。Inline Hook 通过动态修改函数头指令实现执行流劫持,原理上绕过内核驱动依赖,在用户态完成对目标进程网络调用的实时拦截与数据捕获。该技术具备低侵入、高兼容、可进程粒度控制等工程优势,广泛应用于客户端协议分析、安全审计、TLS 流量旁路采集及自研代理开发。结合 VirtualProtect 内存保护绕过与跳板函数设计,能稳定适配 ASLR、DEP 和热补丁等现代防护机制。本文聚焦于 w 阅读详情

相关推荐

Windows API Hook 原理与实战:Inline/IAT/EAT 三种方式深度解析

Windows API Hook 是用户态函数调用干预的核心技术,本质是在函数执行流中插入可控跳转点,依赖对PE结构、内存保护机制(如DEP/ASLR/CFG)及调用约定的深入理解。其核心原理包括指令级劫持(Inline)、导入表重定向(IAT)和导出表篡改(EAT),三者分别适用于不同场景:Inline Hook 精准但易受CFG拦截;IAT Hook 模块级生效且天然绕过CFG;EAT Hook 支持全局导出函数重定向。技术价值在于实现API审计、沙箱重定向、兼容层开发等工程目标。典型应用场景涵盖调试器

weixin_32050773的博客 261

函数开始处的MOV EDI, EDI的作用

调试程序调试到系统库函数的代码时,总会发现系统函数都是从一条MOV EDI, EDI指令开始的,紧接着这条指令下面才是标准的建立函数局部栈的代码。对系统DLL比如ntdll.dll进行反汇编,可以发现它的每个导出函数都是如此,并且每个导出函数开始处的MOV EDI, EDI上面紧接着5条NOP指令。比如在WinDbg中查看TextOutA周围的代码: 0:000> u TextOutA-0x0a

jcwKyl的专栏 8258

深入解析inline hook技术及C++源码实现

简介:inline hook是一种在程序运行时修改函数行为的底层代码注入技术,广泛应用于调试、性能监控、安全防护等领域。本文深入探讨其在x86与x64架构下的实现原理,分析Linux与Windows系统中内存权限控制与代码篡改机制的差异,并结合cpp-stub-master源码项目,讲解stub生成、内存操作、钩子管理与异常处理等核心环节。通过本内容学习,读者可掌握跨平台inline hook的关键技术细节,为系统级编程和安全研究打下坚实基础。

weixin_36064575的博客 359

MOV EDI,EDI指令的解释(整理)

XP系统程序中开头的MOV  EDI,EDI指令的解释: 在VS .NET 2003的VC7\INCLUDE目录中的listing.inc文件中定义了1到7个字节的无破坏性NOP操作的宏 MOV  EDI,EDI 就是两个字节的NOP 在程序中与NOP指令的意义相同。 为什么要用MOV  EDI,EDI 而不用两个NOP? 我的理解是: 用两个NOP指令耗费的CPU时钟周期

绝迹·危言的专栏 8075

Excel VBA+Adobe Acrobat Pro PDF发票识别全流程(附避坑指南)

本文详细介绍了如何利用Excel VBA与Adobe Acrobat Pro的API接口,构建一套企业级PDF发票智能识别与处理系统。内容涵盖从环境配置、核心文本提取原理、数据解析清洗到工程化脚本设计的全流程,并针对密码区干扰、不征税发票等常见问题提供避坑指南,旨在帮助财务人员和开发者实现高效、精准的财务数据处理自动化。

weixin_29207439的博客 349

Windows 11 RDP Wrapper 配置教程与常见问题解决方法

解锁家庭版RDP主机功能(Windows 11家庭版原生不支持作为RDP服务器)突破单用户连接限制,实现多用户同时远程登录(类似服务器版功能)它不修改系统核心文件,通过注入方式工作,相对安全可靠。RDP Wrapper是Windows 11家庭版用户启用远程桌面、突破单用户限制的高效工具。遵循本文步骤可快速完成配置,遇到问题时按常见问题排查方案逐一解决,多数问题可通过更新配置文件或重启服务解决。若长期使用,建议关注官方GitHub仓库的更新,确保兼容性和安全性。

weixin_41521681的博客 1385

为什么会有mov edi, edi?(转)

原来一直被windows上的一些固定汇编指令搞的有点糊涂, 各种说法其实都有, 比如这个mov edi, edi. 实际这个指令是干什么用的呢? 每个人都有不同的说法, 今天了解到一种比较靠谱的说法!在VS的安装目录中的listing.inc文件中定义了1到7个字节的无破坏性NOP操作的宏MOV EDI,EDI 就是两个字节的NOP在程序中与NOP指令的意义相同。为什么要用MOV EDI,EDI

u012129783的博客 661

Cesium进阶学习四、shadertoy(着色器)

Cesium进阶学习着色器

程迷学习的博客 4322

热补丁原理

热补丁 普通代码修改技术是修改API起始地址的5个字节, 而热补丁是修改7个字节. 相比代码修改的API钩取, 采用热补丁能提高多线程系统的稳定性和性能. 原理和特征 二次跳转 不需要钩取函数进行脱钩/挂钩操作 ...

fa1c4的blog 2264

西红柿成熟度检测数据集总结

成熟度类别标注数量semiripe(半成熟)10275rotten(腐烂)13470fullyripe(完全成熟)35031unripe(未成熟)26212。

crz1336768325的博客 2125

统信UOS系统网络服务异常排查:WIFI图标消失与网络设置缺失的解决方案

本文详细解析了统信UOS系统WIFI图标消失与网络设置缺失的常见问题,提供了从基础修复到进阶排查的完整解决方案。重点分析了NetworkManager服务异常的根本原因,包括系统更新中断、权限配置错误等,并给出实用的命令行操作指南和预防措施,帮助用户快速恢复网络功能。

weixin_29234239的博客 622

轻量应用服务器续费升配原理与云资源生命周期管理

轻量应用服务器是面向开发者与中小业务的开箱即用型云主机,其核心价值在于封装底层复杂性、提供固定带宽与预装环境。技术原理上依赖虚拟化隔离、分层资源池(计算/存储/网络)及热迁移能力,实现免停机升配;商业价值体现在成本确定性、部署极简性与运维低门槛。典型应用场景包括静态网站托管、小程序后端、SaaS子站部署及教学实验环境。本文深入解析腾讯云轻量服务器6周年活动中‘1折续费+免费升配’背后的资源调度逻辑、真实折扣算法与配置升级边界,并延伸至云服务生命周期中的成本优化、性能治理与架构演进路径。

weixin_34259232的博客 455

利用pytorch长短期记忆网络LSTM实现股票预测分析

长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。LSTM主要就是加入了三个门控:第一个开关遗忘门:负责控制继续保存长期状态c;第二个开关输入门:负责控制把即时状态输入到长期状态c;第三个开关输出门:负责控制是否把长期状态c作为当前的LSTM的输出。

优快云 精品推荐 1万+

mov edi,edi是

mov edi,edi - hook api 系统: windows xp 查看系统函数的反汇编代码时会发现开头有个"mov edi,edi"(2字节),再往前则是5个nop指令(当然这不会引人注意),可是"mov edi,edi"有什么用了. 上网搜索"mov edi,edi",结果让人惊奇,据说系统函数都添加了这段"无用"的代码,为的是Hot Patching,详细内容请自行搜索

Neo_86的专栏 1894

【牛客算法】小美的数组删除

本文分析了小美数组删除问题的解法,提出了一种逆向遍历求MEX的优化算法。该算法通过从数组末尾开始遍历,逐步构建子数组集合,利用MEX的单调性和增量更新特性,在O(n)时间复杂度内计算所有可能删除方案的最小代价。关键设计包括:1)逆向遍历实现MEX状态继承;2)利用HashSet快速判断元素存在;3)动态比较删除前j个元素和删除整个子数组的代价。算法空间复杂度为O(n),适用于大规模数据。代码实现简洁高效,已被验证为同类问题的最优解之一。

字节卷动 1339

第1.2章 机器人SLAM计算机基础总结(二):VSCode教程及 AI等效率插件推荐

如何高效编写代码?怎样快速调试程序?**别担心,今天就给大家带来一款超强大的编程神器 ——VSCode,以及能让编程之路 “一马平川” 的实用插件推荐,无论你是新手小白还是资深大神,都能从中受益!

行知SLAM 1862

CodePatch hook api

该种hook方法修改了目标api入口地址处的一些字节(32位和64位需要修改的字节数不同),通常修改为jmp xxx的形式,使得目标api跳转到我们的代码中执行。注意我们需要保存目标api入口处的原字节,以便脱钩。为了能够在目标进程中执行这些操作,我们需要将代码注入到目标进程中去,通常使用远程线程dll注入技术达到该目的。

静下心来,做好每一件事 183

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Windows API操作码逆向分析:从系统调用到函数指纹的底层探索

在计算机系统底层,操作码(Opcode)是CPU指令的二进制编码,构成了机器直接执行的原始语言。其工作原理基于特定的指令集架构,通过解码和执行这些二进制序列来完成计算任务。理解操作码的技术价值在于能够穿透高级语言和操作系统的抽象层,直接洞察程序在硬件层面的真实行为,这对于系统优化、安全分析和性能调优至关重要。在应用场景上,操作码分析广泛应用于逆向工程、恶意软件检测、漏洞挖掘和二进制插桩等领域。本文聚焦于Windows平台,深入探讨如何通过静态分析与动态追踪相结合的方法,构建Windows API函数的操作码

weixin_28745975的博客 305

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

函数调用之mov edi, edi

很多函数前面几个指令都是下面这样: mov     edi, edi push    ebp mov     ebp, esp 第一行指令,是不是没用呢? 你还会在上面发现5个没用的nop 这样的做法是方便做hook,比如你要挂钩这个函数,你可以用一个2字节的短jmp(eb xx)转移到那5个nop那里,然后在那5个nop那里做一个大的jmp(e9 xx xx xx x

HUA的专栏 1771

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Move EDI, EDI的作用

玩WinDBG的时候, 发现函数的反汇编代码的最开始部分总是包含一条move edi, edi的指令. 比如下面的代码static unsigned int __stdcall Fibonacci_stdcall(unsigned int n) { switch(n) { case 0: STOP_ON_DEBUGGER;return 0; ...

weixin_34010566的博客 249

Win32API起始处的mov edi, edi与用户空间InlineHook

在x86平台上,无论是在调试器中跟到系统DLL中时,还是反汇编某个系统DLL时,经常会发现很多API的第一条汇编指令都是mov edi, edi。根据经验来讲,C函数的汇编形式,应该是首先push ebp保存原始栈顶,然后mov ebp, esp构造新的栈帧,接下来sub esp, 0nnh分配局部变量空间,之后就是函数体了,结束时先mov esp, ebp恢复栈指针,然后pop ebp恢复栈顶指...

weixin_30508309的博客 177

Windows平台热补丁方案

当应用程序或操作系统出现漏洞时,官方一般通过补丁方式来进行升级和防止利用。在安装完补丁后,一般需要重启应用程序或操作系统,补丁才能生效。有一些业务,是不能中断的,需要24小时保障;这就导致了即使官方发布了补丁后,漏洞也不能及时被修复。同时,由于一些操作系统已经超过了维护的生命周期(XP/Win7等),即使出现漏洞,官方不再提供补丁。这个时候,由第三方安全厂商提供热补丁功能,继续保障系统安全,就显得尤为重要。

dzqxwzoe的博客 289

mov edi,edi和Hot Patching详解

mov edi,edi和Hot Patching的一点解释 2011年7月13日代码疯子发表评论阅读评论 最近发现不少函数开头都有mov edi,edi这样的指令,正好在《Advanced Windows Debugging》一书中看到了一点解释。书上说是为了Hot Patching,网上也有这样的解释。 不过网上的解释有两种情况,一种是函数开头有mov edi, e

linuxheik的专栏 1294
上一篇: [Windows Hook]MinHook库的使用方式
下一篇: 逆向程序分析:Windows的main(),启动函数分析
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值