#define BASEADDRLEN 10
PBYTE MyGetNtosBaseAddress()
{
PSYSTEM_MODULE_INFORMATION pSysModule;
ULONG uReturn;
ULONG uCount;
PCHAR pBuffer = NULL;
PCHAR pName = NULL;
NTSTATUS status;
UINT ui;
CHAR szBuffer[BASEADDRLEN];
PCHAR pBaseAddress;
status = ZwQuerySystemInformation( 11, szBuffer, BASEADDRLEN, &uReturn );
pBuffer = ( PCHAR )ExAllocatePool( NonPagedPool, uReturn );
if ( pBuffer )
{
status = ZwQuerySystemInformation( 11, pBuffer, uReturn, &uReturn );
if( status == STATUS_SUCCESS )
{
uCount = ( ULONG )*( ( ULONG * )pBuffer );
pSysModule = ( PSYSTEM_MODULE_INFORMATION )( pBuffer + sizeof( ULONG ) );
pBaseAddress = ( PCHAR )pSysModule->Base;
ExFreePool( pBuffer );
return (PBYTE)pBaseAddress;
}
ExFreePool( pBuffer );
}
return NULL;
}
PBYTE MyGetModuleBaseAddress( PCHAR pModuleName )
{
PSYSTEM_MODULE_INFORMATION pSysModule;
ULONG uReturn;
ULONG uCount;
PCHAR pBuffer = NULL;
PCHAR pName = NULL;
NTSTATUS status;
UINT ui;
CHAR szBuffer[BASEADDRLEN];
PCHAR pBaseAddress;
status = ZwQuerySystemInformation( 11, szBuffer, BASEADDRLEN, &uReturn );
pBuffer = ( PCHAR )ExAllocatePool( NonPagedPool, uReturn );
if ( pBuffer )
{
status = ZwQuerySystemInformation( 11, pBuffer, uReturn, &uReturn );
if( status == STATUS_SUCCESS )
{
uCount = ( ULONG )*( ( ULONG * )pBuffer );
pSysModule = ( PSYSTEM_MODULE_INFORMATION )( pBuffer + sizeof( ULONG ) );
for ( ui = 0; ui < uCount; ui++ )
{
pName = strrchr( pSysModule->ImageName, '//' );
if ( !pName )
{
pName = pSysModule->ImageName;
}
else {
pName++;
}
// KdPrint(( "pName=%s, pModuleName=%s", pName, pModuleName ));
if( _stricmp( pName, pModuleName ) == 0 )
{
pBaseAddress = ( PCHAR )pSysModule->Base;
ExFreePool( pBuffer );
return (PBYTE)pBaseAddress;
}
pSysModule ++;
}
}
ExFreePool( pBuffer );
}
return NULL;
}
#define SearchDepth 0x300
void RestoreTcpipIRP()
{
UNICODE_STRING DeviceName;
PDRIVER_OBJECT DriverObject;
NTSTATUS status;
DWORD ret;
KIRQL OldIrql;
ULONG TempDisp ;
ULONG DirverEntry ;
ULONG i ;
ULONG TcpDispatch =0;
ULONG TcpDeviceControlDispatch =0 ;
ULONG TempAddr =0 ;
UNICODE_STRING TcpipDriverFileName ;
OBJECT_ATTRIBUTES oba ;
HANDLE hTcpipFile ;
IO_STATUS_BLOCK IoStatusBlock ;
HANDLE hTcpipSection ;
PVOID BaseAddress =NULL ;
SIZE_T nSize = 0 ;
ULONG Ppeheader ;
ULONG pEntryPoint ;
ULONG TcpipBase ;
ULONG ImageBase ;
RtlInitUnicodeString(&TcpipDriverFileName , L"//SystemRoot//System32//Drivers//Tcpip.sys") ;
RtlInitUnicodeString(&DeviceName,L"//Driver//Tcpip");
status = ObReferenceObjectByName(
&DeviceName,
OBJ_CASE_INSENSITIVE,
NULL,
0,
*IoDriverObjectType,
KernelMode,
NULL,
(PVOID*)&DriverObject);
KDMSG(("Geth the tcpip driver object = %08x", DriverObject));
if (DriverObject)
{
TcpipBase = MyGetModuleBaseAddress("tcpip.sys");
if (!TcpipBase)
{
KDMSG(("can't get the base address of the tcpip.sys /n"));
return ;
}
InitializeObjectAttributes(&oba ,
&TcpipDriverFileName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
status = ZwCreateFile (&hTcpipFile ,
FILE_EXECUTE | SYNCHRONIZE ,
&oba,
&IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL ,
FILE_SHARE_READ ,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0
);
if (!NT_SUCCESS(status))
{
KDMSG(("Open the tcp ip file failed!/n"));
return ;
}
InitializeObjectAttributes(&oba,
NULL,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
status = ZwCreateSection (&hTcpipSection ,
SECTION_ALL_ACCESS,
&oba,
NULL,
PAGE_EXECUTE,
0x1000000,
hTcpipFile );
if (!NT_SUCCESS(status ))
{
KDMSG (("create the tcpip section failed!/n"));
if (hTcpipFile)
ZwClose(hTcpipFile);
return ;
}
status = ZwMapViewOfSection(hTcpipSection,
NtCurrentProcess(),
&BaseAddress ,
0,
1000,
NULL,
&nSize,
ViewShare ,
MEM_TOP_DOWN,
PAGE_READWRITE
);
if (!NT_SUCCESS(status))
{
KDMSG(("Map view the tcpip section failed!/n"));
if (hTcpipSection)
ZwClose(hTcpipSection);
if (hTcpipFile)
ZwClose(hTcpipFile);
return ;
}
Ppeheader = *(ULONG*)((ULONG)BaseAddress+0x3c);
pEntryPoint = *(ULONG*)((ULONG)BaseAddress+Ppeheader+0x28);
DirverEntry = (ULONG)BaseAddress+pEntryPoint ;
ImageBase = *(ULONG*)((ULONG)BaseAddress+Ppeheader+0x34);
//DirverEntry = DriverObject->DriverInit ;
if (DirverEntry)
{
for (i = DirverEntry ; i < DirverEntry + SearchDepth ; i++)
{
// if (MmIsAddressValid((PVOID)i))
// {
if (*(BYTE*)i == 0x8d && *(BYTE*)(i+1) == 0x7e &&
*(BYTE*)(i+2) == 0x38 && *(BYTE*)(i+3) == 0xf3 &&
*(BYTE*)(i+4) == 0xab)
{
// if (MmIsAddressValid((PVOID)(i-4)))
// {
if (MmIsAddressValid((PVOID)(*(ULONG*)(i-4) + TcpipBase - ImageBase)))
{
TcpDispatch = *(ULONG*)(i-4) + TcpipBase - ImageBase;
TempAddr = i;
break ;
}
/* }*/
}
}
}
//find code =8d 7e 38 f3 ab
//lea edi,[esi+38h]
//rep stosd
if (TempAddr && TcpDispatch)
{
for (i = TempAddr ; i < TempAddr +0x30 ; i++)
{
// if (MmIsAddressValid((PVOID)i))
// {
if (*(BYTE*)i == 0xc7 && *(BYTE*)(i+1) == 0x46 && *(BYTE*)(i+2) == 0x74)
{
if (MmIsAddressValid((PVOID)(*(ULONG*)(i+3) + TcpipBase - ImageBase)))
{
TcpDeviceControlDispatch = *(ULONG*)(i+3) + TcpipBase - ImageBase;
break;
}
}
/* }*/
}
}
if (TcpDispatch)
{
KeAcquireSpinLock(&SDTSpinLock , &OldIrql);
WPOFF();
for (i = 0 ; i <=IRP_MJ_MAXIMUM_FUNCTION ; i++)
{
DriverObject->MajorFunction = TcpDispatch ;
}
if (TcpDeviceControlDispatch)
{
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] =
TcpDeviceControlDispatch ;
}
WPON();
KeReleaseSpinLock(&SDTSpinLock , OldIrql);
}
ObfDereferenceObject(DriverObject);
}
ZwUnmapViewOfSection(NtCurrentProcess(),
BaseAddress);
if
(hTcpipSection)
{
ZwClose(hTcpipSection);
}
if
(hTcpipFile)
{
ZwClose(hTcpipFile);
}
return
;
}
相关推荐
驱动级Hook拦截系统内核调用
驱动级Hook拦截系统内核调用,源码 驱动级Hook拦截系统内核调用,源码
Windows防火墙之NDIS HOOK和TDI HOOK
<br />1、TDI HOOK<br /> TDI Client利用TDI接口,向TDI Server发送IRP(I/O Request Packet)请求包,来获得TDI Server提供的服务。因此,可以利用分层驱动原理[5],在TDI Client和TDI Server驱动之间加一层过滤驱动-FilterDriver.sys。对于TCP/IP协议而言,在Windows网络协议体系结构中是由Tcpip.sys驱动实现的。Tcpip.sys创建了几个设备对象,/Device/RawIp,/Device/
服务器蓝屏(tcpip.sys)处理过程之一
服务器时常蓝屏,蓝屏提示tcpip.sys问题,文档里面写有本人解决这个问题的分析问题过程及解决办法
NDIS HOOK实现方法
转载探索NDIS HOOK新的实现方法(1) NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。 获 得NDIS_PROTOCOL_BLOCK指针的方法一般是用NdisRegisterProtocol注...
2025年VSCode AI插件实战:如何用Devika+Continue+Tabby三件套10倍提升开发效率
本文详细介绍了2025年VSCode AI插件Devika、Continue和Tabby的三件套组合,如何通过智能开发工作流10倍提升开发效率。从项目架构生成到上下文感知辅助,再到本地化智能编码,这套方案实现了从需求分析到代码生成的全流程自动化,特别适合中大型项目开发。
Win7系统提示找不到ntoskrnl.exe文件的解决办法
其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ntoskrnl.exe文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现ntoskrnl.exe丢失要怎么解决?
从入门到精通:dirmap 高级 Web 目录扫描实战指南
本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。
react dispatch_React系列二十一 Hook(二)高级使用
一. Hook高级使用 1.1. useReducer很多人看到useReducer的第一反应应该是redux的某个替代品,其实并不是。useReducer仅仅是useState的一种替代方案:在某些场景下,如果state的处理逻辑比较复杂,我们可以通过useReducer来对其进行拆分;或者这次修改的state需要依赖之前的state时,也可以使用;单独创建一个reducer/coun...
电子纸价签实战:基于SSD1680的墨水屏驱动开发与优化
本文详细介绍了基于SSD1680驱动芯片的电子纸价签开发实战,涵盖硬件连接、驱动框架搭建、核心流程解析及性能优化。重点剖析了初始化配置、波形文件加载、图像数据写入与刷新触发等关键步骤,并提供了功耗优化、显示效果提升及代码健壮性等实用避坑指南,帮助开发者高效实现稳定低功耗的墨水屏驱动。
Simulink仿真状态空间中状态变量时域响应
起因 今天老师留了一道关于状态空间变量响应的题,于是想用simulink仿真,一开始使用state-space模块,但是发现它只能输出y,没办法显示状态变量的变化情况。然而状态变量之间的关系都可以表示为一阶微分方程组,因此我们考虑在Simulink中搭建微分方程组来求解这个问题。 微分方程组 x1˙=x2x2˙=−4x1−5x2+1(1)\dot{x_1}=x_2\\ \dot{x_2}=-4x_...
服务器系统tcpip.sys,win7系统tcpip.sys文件引起蓝屏的解决方法
蓝屏是常见的电脑故障,而导致出现蓝屏的原因有非常多。最近有win7 64位旗舰版用户在开机时会出现蓝屏,根据屏幕上的错误描述应该是tcpip.sys文件引起的蓝屏现象,这该怎么解决呢?tcpip.sys文件是一个系统和网络相关的文件,该文件出现如果问题会引起蓝屏,下面由小编给大家介绍win7系统tcpip.sys文件引起蓝屏的解决方法。解决方法:1、通常tcpip.sys文件异常导致的蓝屏的停...
锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)
锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)
MYSQL 网络连接
assert(mp!= nullptr);#endif首先断言mp非空。为结构体动态分配内存,并将指针赋给。调用来初始化这个安全互斥锁,同时传入源文件名和行号。内部通常会:再调用初始化真正的原生互斥体。记录锁的创建位置、线程 ID 等信息,以便在死锁检测、锁定顺序检查或错误报告时提供调试信息。这种模式主要用于调试版本,帮助开发者发现互斥锁使用问题(如重复锁定、死锁、未释放等)。#else#endif直接调用初始化中的原生互斥体(例如或 Windows 的。
YOLO11 改进、魔改|分组残差自注意力GRSA,通过分组残差优化 QKV 计算、指数空间映射优化位置偏差,在大幅降低自注意力模块参数和计算量的同时,增强特征关系与位置信息的表征能力
【摘要】研究人员提出GRSA(分组残差自注意力)机制,解决Transformer在图像超分辨率任务中效率与性能难以兼顾的问题。GRSA通过分组残差层减少自注意力参数冗余,同时采用指数空间相对位置偏差优化位置信息表征。实验表明,GRSA在降低50%参数量的同时保持模型性能,适用于目标检测和图像分割任务。在YOLO系列模型中集成GRSA可提升小目标检测精度,代码实现已开源,详细部署教程见相关视频与GitHub资源。该机制为轻量化Transformer模型提供了高效解决方案。
GameFramework框架详解之 框架总览
一.前言 目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩
网络编程(2)---TCP/IP协议
TCP/IP协议是Internet最基本的协议,Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言,TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确的传输到目的地,而IP是给因特网的每一台联网设备规定一个地址。 TCP传输模式 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---...
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
利用 TDI HOOK 实现任意端口复用
所谓tdi hook,我这里利用的是hook tcpip dispatch table的方法,实际上复用的原理很简单,关键是hook掉tdi_event_connect,之后从*AcceptIrp中取出conn obj,将其传递到自己定义的tdisend中就可以了。这里唯一蹩脚的地方是在处理TDI EVENT的时候,当进程启动后,它首先系统注册这些event handler,在有相应的网络事件发生
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
win10修复tcp驱动服务器,怎么解决tcpip.sys文件导致蓝屏|Win10的tcpip修复工具
由tcpip.sys文件引起的蓝屏错误,错误代码为:0x000000D1,表示硬件设备的驱动程序遇到了问题。引起错误的文件是tcpip.sys,那么应该是与网卡驱动有关。这篇文章是PE吧给大家带来的解决方法,希望对大家有帮助。方法/步骤:1、下载tcpip修复工具,由于是一个压缩文件,所以需要进行解压;3、tcpip修复工具分了32位和64位两个版本,大家可以根据自己的系统位数选择合适的版本使用;...
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
react-hooks
Hook是 React16.8 的新特性,Hook使你在无需修改组件结构的情况下复用状态逻辑。弥补了 functin Component 没有实例没有生命周期的问题,react项目基本上可以全部用 function Component 去实现了。
redux 多种触发dispatch方式
[原文链接]https://blog.bam.tech/developper-news/4-ways-to-dispatch-actions-with-redux redux 作为js app的主要的状态容器和react结合的非常多。架构设计上基于action的触发机制,通过dispatch对应的action来修改状态,而状态的修改由统一的reducer来处理(为什么叫reducer呢,因为每个...
Hook Dispatch 实时监控[zz]
作者:pker/*++Module Name: FSHook.cAbstract: I wanted to build a filter driver when I first thought about doing such kind of things. But then I found that its not realistic cause it have
React 系列 之基础一(组件篇)
React 简介 组件篇 1.组件定义 React 组件名称开头字母必须大写. const Hello = () => { return ( <div> <p>Hello world</p> </div> ) } const App = () => { return ( <div> <h1>Greetings</h1> <Hello
8550



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



