Hook API监视驱动的加载_ASM

CE+OD无法附加游戏进程的破解方法 CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT等等这些东西来限制一些如:CEOD ASM32这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 ... 阅读详情
;**************************************************************************************************
;Author:dge/D哥
;Date  :2006.7.20
;**************************************************************************************************
;@echo off
;goto make

.386
.model flat, stdcall
option casemap:none

;**************************************************************************************************
include d:/masm32/include/w2k/ntstatus.inc
include d:/masm32/include/w2k/ntddk.inc
include d:/masm32/include/w2k/ntoskrnl.inc
includelib d:/masm32/lib/w2k/ntoskrnl.lib
include d:/masm32/Macros/Strings.mac

;**************************************************************************************************
.data
;保存地址
dwOldNtLoadDriver   dd            ?
dwAddr              dd            ?
dwDriverName        ANSI_STRING  
.const
CCOUNTED_UNICODE_STRING "//Device//devHookApi", g_usDeviceName, 4
CCOUNTED_UNICODE_STRING "//??//slHookApi", g_usSymbolicLinkName, 4
CCOUNTED_UNICODE_STRING "ZwLoadDriver", g_usRoutineAddr, 4
   
;**************************************************************************************************
.code
;让这个函数在NtLoadDriver的调用时被执行以实现监视
NewNtLoadDriver     proc  lpDriverName:PUNICODE_STRING
                    
      pushad
;      int 3
;                   invoke DbgPrint, $CTA0("/nEntry into NEW/n")
      invoke RtlUnicodeStringToAnsiString, addr dwDriverName, lpDriverName,TRUE
      invoke DbgPrint, $CTA0("/nDriverName: %s.sys/n"), dwDriverName.Buffer
      popad
      ;调用原函数
      push   lpDriverName
      call   dwOldNtLoadDriver
    
                    ret

NewNtLoadDriver     endp

;**************************************************************************************************
HookFunction        proc

                    pushad
;      int 3
;      invoke DbgPrint, $CTA0("/nEntry into hoookfunction/n")
                    ;下面是用KeServiceDescriptorTabled导出符号获得数组的基地址,这个数组中包含有NtXXXX函数的入口地址。
      mov eax, KeServiceDescriptorTable
             mov esi, [eax]
      mov esi, [esi]
      ;用MmGetSystemRoutineAddress来获得函数ZwLoadDriver的地址。并从这个函数地址后面的第2个字节中取得服务号。从而
      ;获得以服务号为下标的数组元素。
             invoke MmGetSystemRoutineAddress,addr g_usRoutineAddr
      inc eax
      movzx ecx,byte ptr[eax]
      sal ecx,2                   
      add esi,ecx
      mov dwAddr,esi 
      mov edi,dword ptr[esi]
      ;保存旧的函数地址。
      mov dwOldNtLoadDriver,edi
                    mov edi,offset NewNtLoadDriver
      ;修改入口地址
      cli
      mov dword ptr[esi],edi
      sti
      popad
                    mov eax, STATUS_SUCCESS

      ret

HookFunction     endp

;**************************************************************************************************                                
DispatchCreateClose proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

             mov eax, pIrp
             assume eax:ptr _IRP
             mov [eax].IoStatus.Status, STATUS_SUCCESS
             and [eax].IoStatus.Information, 0
             assume eax:nothing 

             invoke  IoCompleteRequest, pIrp, IO_NO_INCREMENT
             mov eax, STATUS_SUCCESS

             ret

DispatchCreateClose endp

;**************************************************************************************************
DriverUnload        proc pDriverObject:PDRIVER_OBJECT
;必须保存环境,否则后果很严重。在这个函数中恢复被修改的地址。
 
                   pushad
;             int 3
;                   invoke DbgPrint, $CTA0("/nEntry into DriverUnload /n")
                    mov esi,dwAddr
             mov eax,dwOldNtLoadDriver
                    cli
             mov dword ptr[esi],eax
             sti
                    invoke IoDeleteSymbolicLink, addr g_usSymbolicLinkName
             mov eax,pDriverObject
             invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject              
             popad

             ret

DriverUnload endp

;**************************************************************************************************
DriverEntry         proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
                    local status:NTSTATUS
      local pDeviceObject:PDEVICE_OBJECT

;                   int 3
;             invoke DbgPrint, $CTA0("/nEntry into DriverEntry/n")
             mov status, STATUS_DEVICE_CONFIGURATION_ERROR
                    invoke IoCreateDevice, pDriverObject, 0, addr g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, addr pDeviceObject
             .if eax == STATUS_SUCCESS
                 invoke IoCreateSymbolicLink, addr g_usSymbolicLinkName, addr g_usDeviceName
                 .if eax == STATUS_SUCCESS
                     mov eax, pDriverObject
                     assume eax:ptr DRIVER_OBJECT
                     mov [eax].DriverUnload,            offset DriverUnload
                     mov [eax].MajorFunction[IRP_MJ_Create*(sizeof PVOID)],        offset DispatchCreateClose
                     mov [eax].MajorFunction[IRP_MJ_CLOSE*(sizeof PVOID)],         offset DispatchCreateClose
           
       assume eax:nothing
                                          invoke HookFunction
            
                     mov status, STATUS_SUCCESS
                 .else
                                          invoke IoDeleteDevice, pDeviceObject
                 .endif
             .endif
             mov eax, status

             ret

DriverEntry         endp

end DriverEntry

;**************************************************************************************************

:make

set drv=HooKapi

d:/masm32/bin/ml /nologo /c /coff %drv%.bat
d:/masm32/bin/link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj

del %drv%.obj

echo.
pause
参考:Undocumented Windows NT
感谢:非常感谢cardmagic大侠的帮助 
逆向工程与二进制分析实战:从汇编基础到漏洞挖掘核心技能 逆向工程是网络安全领域的核心技术,它通过分析程序的二进制文件来理解其内部逻辑与潜在风险。其核心原理在于将编译后的机器指令(如x86、ARM汇编)通过反汇编、反编译等手段,还原出程序的设计思路与执行流程。这项技术的核心价值在于,它使安全研究人员能够深入理解闭源软件、恶意样本或固件的真实行为,从而发现隐藏的设计缺陷与安全漏洞。在应用场景上,逆向工程广泛应用于漏洞挖掘(如SRC、EDUSRC项目)、恶意软件分析、软件保护研究以及补丁对比分析。例如,通过逆向分析,可以定位到类似comdlg32.dll等系统库函数的 阅读详情

相关推荐

驱动hookapi

可以hook 任意函数 ,采用内联hook,

驱动开发:内核层InlineHook挂钩函数

在上一章中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函数挂钩其实与应用层一致,都是使用劫持执行流并跳转到我们自己的函数上来做处理,唯一的不同的是内核Hook只针对内核API函数,但由于其身处在最底层所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩的效果是应用层无法比拟的,对于安全从业者来说学会使用内核挂钩也是很重要。挂钩的原理可以总结为,通过得到原函数地址,然后保存该函数的前15。

微软技术分享 1万+

驱动内核模式下的apihook钩子例子,编写驱动程序.zip

驱动内核模式下的apihook例子,编写驱动程序.zip

拦截驱动加载

在做一个程序,hookzwloaddriver来拦截驱动加载,但是碰到个问题,这个函数的原型是:   NTSTATUS   ZwLoadDriver(   INPUNICODE_STRINGDriverServiceName   );   他只有一个参数,代表着驱动的服务名,我是通过读取注册表\Registry\Machine\System\CurrentControlSet\Servi

陈刚编程心得与知识集 1812

驱动程序级钩子apihook截获函数调用的程序.zip

用驱动程序写的截获api函数调用的程序.zip

PID参数自整定实战解析:从继电反馈到智能调节的完整实现

本文深入解析PID参数自整定的实战应用,从继电反馈原理到智能调节算法的完整实现。通过详细讲解振荡波形特征提取、参数计算的工程化改进及工业场景调试技巧,帮助工程师快速掌握PID自整定技术,提升控制系统性能。特别针对嵌入式系统优化和噪声环境下的稳定策略提供了实用解决方案。

weixin_28731223的博客 462

驱动加载监控

Hook_ZwLoadDriver和HOOK_ZwSetSystemInformation(xp) Hook_ZwLoadDriver( IN PUNICODE_STRING DriverServiceName )//服务名,在注册表 所以要在注册表改驱动ImagePath看驱动路径。 注意通过instrDrv加载驱动不一定看到的是原本加载驱动的文件,是通信方式加载驱动,在ZwLoadD...

kernweak的博客 1936

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4579

简述API HOOK技术及原理

我们观察内核代码的时候,很多时候一些函数调用都初始化的时候设置成回调函数的,例如上一个例子读取文件目录,那么proc有自己独有的读取目录处理函数,相对于的ext4、ceph、hpfs等等文件系统都有自己的处理函数,那么getdents的时候如何能调用到正确的处理函数呢?而在应用程序建立套接字的时候选择了v4还是v6,都是同一个系统调用(sys_socket),只是传入的参数是不一样的,那么内核根据传参的差异,灵活的选择使用不同函数来初始化套接字,不同的函数又使用各自对应的结构体来初始化后续的调用函数。

bing1564的博客 3309

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

UE5新手必看:3种UI定位方法实战(含蓝图配置截图)

本文为UE5新手详细解析了三种核心UI定位方法:屏幕空间、场景空间和世界空间。通过实战蓝图配置与控件操作,指导开发者如何根据HUD、角色血条、3D物体标记等不同应用场景,正确选择并配置UI的定位方式,以实现清晰的信息传递与沉浸式体验。

weixin_29018815的博客 474

驱动中全局hook应用层API函数

extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { DbgBreakPoint(); DriverObject->DriverUnload = DriverUnload; NTSTATUS status; PEPROCESS Process =

125096 5189

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

Hook API监视驱动的加载_ASM Hook API监视驱动的加载_ASM

转自:http://blog.youkuaiyun.com/iiprogram/archive/2007/09/06/1774026.aspx;**************************************************************************************************;Author:dge/D哥;Date  :2006.7.20;**

daiyu22的专栏 548

Exchange Server 2013 运维系列——邮箱配额设置(管理中心)

邮箱配额需要设置三个参数: 1、发出警告限制:表示在向用户发出警告之前的最大存储限制。如果邮箱大小达到或超过指定值,Exchange 将向邮箱用户发送警告消息。 2、禁止发送限制:表示邮箱的“禁止发送”限制。如果邮箱大小达到或超过指定的限制,Exchange 将阻止邮箱用户发送新邮件,并显示一条描述性错误消息。 3、禁止发送和接收限制:表示此邮箱的“禁止发送和接收”限制。如果邮箱大小

白昼的技术专栏 1万+

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 972

[转](44)MessageBoxA 监视器(过写拷贝,不使用 shellcode 注入)

一、研发背景 这是中级上保护模式和驱动开发章节的综合练习。程序可以监视系统API调用,和三期的那个函数调用监视器不同,三期的只能HOOK本进程的API,而这个项目可以监视所有进程。 项目源码:https://github.com/Kwansy98/MsgBoxAWatcher/tree/main 编译环境是 VS2010 + WDK7600,运行环境是32位XP。 每个人做这个作业时都有不同的写法,本文仅供参考,有什么疑问或建议,欢迎留言或私信,也可以加q群 10460...

weixin_41875267的博客 662

16、SQL Server索引的创建与评估

本文详细介绍了SQL Server中索引的创建与评估方法,涵盖索引的基本概念、类型(聚集与非聚集)、唯一性设置以及如何判断索引的好坏。通过实际操作步骤、维护策略和常见问题解决方案,帮助数据库开发者合理设计索引,提升查询性能并控制维护开销。同时提供了索引创建与维护的决策流程图,便于理解和应用。

water的专栏 127

ce+od无法同时附加进程的问题

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT 等等这些东西来限制一些如:CE OD ASM32 这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 ...

aonnukgkmn753855的博客 663

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CE+OD无法附加游戏进程的破解方法-不再为不能附加而烦恼了

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT  等等这些东西来限制一些如:CE  OD ASM32  这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 1.

把梦想放飞在蓝色的天空里... 6万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT  等等这些东西来限制一些如:CE  OD ASM32  这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 1.调用系统库中打开进程的API函数 2.创...

爱码农爱生活 6454

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

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

PHP 8.9 协程调试黑盒破解:Xdebug 4.1+ Fiber-aware 断点追踪实战(附VS Code全配置模板)

破解PHP 8.9纤维协程高并发实战中的协程调试黑盒,提供Xdebug 4.1+ Fiber-aware断点追踪方案,支持VS Code全配置模板。适用于Swoole/ReactPHP等协程框架,精准定位纤维上下文与切换状态,调试效率提升3倍以上,值得收藏。

FastCompile的博客 322

Windows TLS回调函数反调试实战:五种高级应用与逆向对抗

线程局部存储(TLS)是Windows操作系统为每个线程提供私有数据空间的核心机制。其回调函数在程序入口点之前执行的特性,使其成为软件保护与逆向分析领域的关键技术。通过利用PE文件结构中的TLS目录进行注册,回调函数能够在调试器完全接管进程前抢先执行,实现隐蔽的运行时防护。这一技术价值在于为软件提供了先发制人的防御层,有效对抗基于入口点的传统分析手段。在软件安全、游戏保护及商业软件授权等应用场景中,TLS回调常被用于实现反调试、代码自修改及运行时监控。本文聚焦于TLS回调在反调试中的五种高级实战应用,涵盖调

weixin_30256901的博客 352
上一篇: 进程链表监视进程是否被创建或者销毁
下一篇: 通过进程链枚举进程_asm
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值