挂接CreateProcessW实现对进程创建的完全控制

Win10 Hook 进程创建的研究 Win7甚至在它之前开始,想要hook进程创建已经不能简单的HookCreateProcessInternalW这一个函数了,因为Vista开始引入了UAC机制。如果一个进程想要通过UAC弹窗创建管理员进程,hook这个进程的CreateProcessInternalW已经不起作用,我在几年前的博文《Win7/VistaHook CreateProcess 的特别之处》(http://blog 阅读详情
挂接CreateProcessW实现对进程创建的完全控制

文章作者:System32

这份文档演示了如何实现全局HOOK
【前言】
【概述】
【copy-on-write】
【三种可行的办法】
<查询CreateProcessW的基址及属性>
<枚举系统中所有进程>
<修改CreateProcessW页属性>
<在进程中分配一块可用空间>
<将代码写入远程进程空间>
<编译器的魔术>
<解决麻烦的定位问题>
【完整演示代码】
【资源】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【前言】
写这篇文档的时候由于我足够菜,碰到了不少问题,多谢bkbll,a1rsupply和SobeIt的指点,还有TCH的辛勤劳动,才有这篇文档的诞生,本文中可能存在一些错误,这些错误都是由于我的失误造成的,如果您有什么意见和看法,欢迎来
http://www.itaq.org指出,或者E-mail:zf35@citiz.net
【概述】
在服务器上实现对进程创建的控制有很大的意义,通过监控进程的创建,我们可以让被允许运行的进程正确创建,而未被允许的程序则会创建失败,这样就可以防止未知木马,病毒和蠕虫对服务器的威胁。要实现上述目的,必须hook windows创建进程相关的API,根据《inside the windows NT》和《Native API Reference》中记载,加上softIce的实际跟踪,windows创建进程的API调用流程如下:

代码
CreateProcessA-> CreateProcessW-> CreateProcessInternalW->…->最终调用ZwCreateProcess


本文档中我们选用CreateProcessW来实现我们的目的,当然你也可以使用其它几个API。本文档的演示代码稍做改动可应用于任意Ring3函数。
对于hook一个API而言,可使用的办法有很多,本文选用改写函数入口点的办法来实现挂接CreateProcessW,更多的详细资料请参阅SobeIt写的《windows下hook API的几种办法》。

【copy-on-write】
最初试验时,我使用softice的 a CreateProcessW改写函数入口点的代码,F5切换回windows之后发现一切如愿以偿,但是当我编写程序修改CreateProcessW入口点代码时,发现所做的改动仅对本进程有效,而对于系统的其他进程没有产生任何影响。用softice跟踪后发现本进程中CreateProcessW的虚拟地址被映射到了一个新的,与其它进程不同的物理地址上,如果你读过Webcrazy的《copy-on-write机制》一文,就不难看出这是copy-on-write机制产生的影响。对于系统的dll,每个dll都被映射在不同进程的相同的虚拟地址上,而这些虚拟地址又指向相同的物理地址,通过这种机制,系统实现最低的资源消耗.当某个进程试图改写物理内存中的数据时,为了不对其它进程产生影响,系统自动新分配一块物理内存,把原物理内存中的数据复制过去,改写,然后把改写内存的那个进程的虚拟地址重新映射到新的物理内存上去,而其它进程则还是映射在原来的物理内存上,这就是“写时复制技术”(copy-on-write),那么系统是如何判断何时应该使用copy-on-write呢?这是以虚拟地址的PTE来决定的,当PTE中copy-on-write标志被置位时,任何对该虚拟地址的写操作都将导致一个copy-on-write.


【三种可行的办法】
为了实现全局hook,我们不能被copy-on-write机制所限制住,目前我想到了三种办法来达到我们的目的。
1. 通过驱动来修改页表项(PTE)的属性,使CreateProcessW对应的虚拟地址失去copy-on-write的属性,这样在本身进程中对CreateProcessW入口点代码的修改会对系统中所有进程生效,从而实现全局hook。

2. 通过windows本身提供的一个对象//phymem来对物理内存进行直接读写,先定位本身进程的Eprocess(KTEB)(PS:如何在Ring3下定位任意进程的Eprocess请参考我之前写的《获取进程的Eprocess》一文),获得Eprocess之后,可以得到进程的页目录,然后利用//phymem读取存放页目录的物理内存的内容,再模拟操作系统进行虚拟地址->物理内存地址的转换,最终得到CreateProcessW所对应的物理地址,利用//phymem我们避开copy-on-write机制,直接改写CreateProcessW。

3. 通过最常规的手段来达到目的,先枚举系统中所有进程,然后通过VirtualQueryEx,VirtualAllocEx,VirtualProtectEx等函数修改每个进程的页面属性,分配新的空间等。最后将我们的代码用WriteProcessMemory写到各进程的空间中,利用改写CreateProcessW入口为Jmp *******来跳到我们的代码中,改变函数的执行流程。

以上三个办法中,方法1只是一个构想,还没成为现实,有空的话我回去试试看的,当然页欢迎各位高手去实现,然后mail一份代码给我:P方法2我写了一份完整的代码来实现它,但是在本文档中不进行讨论,否则文档会变的很长,我将在另一份文档中专门说明这种办法的具体实现。方法3使本文讨论的重点,下面就方法3进行详细说明。
<查询CreateProcessW的基址及属性>
这里我们使用VirtualQueryEx这个函数,其原型如下:
SIZE_T
VirtualQueryEx
(
HANDLE hProcess,
LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
SIZE_T dwLength
);
参数说明:
HANDLE hProcess 想要查询内存信息的进程句柄
LPCVOID lpAddress 指向想要查询内存区域的指针
PMEMORY_BASIC_INFORMATION lpBuffer 指向MEMORY_BASIC_INFORMATION结构的指针
SIZE_T dwLength lpBuffer的大小

调用这个函数之后,相关的信息存放在lpBuffer指向的结构中


<修改CreateProcessW的页属性>
对于一个页来说,有如下几种属性:
PAGE_EXECUTE
PAGE_EXECUTE_READ
PAGE_EXECUTE_READWRITE
PAGE_EXECUTE_WRITECOPY
PAGE_NOACCESS
PAGE_READONLY
PAGE_READWRITE
PAGE_WRITECOPY


我们通过VirtualProtectEx来修改页的属性:
BOOL
VirtualProtectEx
(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);
参数说明:
HANDLE hProcess 进程句柄
LPVOID lpAddress 指向想要修改的内存区域的指针
SIZE_T dwSize 修改的内存区域的大小
DWORD flNewProtect 新的页属性
PDWORD lpflOldProtect 指向保存老的页属性的内存的指针

从后面的代码中我们可以看到,为了改写函数入口点代码,我们必须赋予它PAGE_EXECUTE_READWRITE属性。


<在进程中分配可用空间>
光修改函数入口点代码是不够的。我们必须自己编写一段code来接管CreateProcessW的工作,由于进程空间是相互隔离的,为了达到全局hook的目标,我们必须向每个进程索要一块空间来存放我们的代码,这就要用到VirtualAllocEx这个函数了,VirtualAllocEx原型如下:
LPVOID
VirtualAllocEx
(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
参数说明:
HANDLE hProcess 进程句柄
LPVOID lpAddress 指向分配内存区域的指针
SIZE_T dwSize 分配的区域的大小
DWORD flAllocationType 内存类型
DWORD flProtect 新内存的属性

<将代码写入远程进程空间>
我们使用WriteProcessMemory这个函数来向远程进程写入我们的代码和数据,其原型如下:
BOOL
WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten
);
参数说明:
HANDLE hProcess 进程句柄
LPVOID lpBaseAddress 指向写入地址的指针
LPCVOID lpBuffer 指向写入数据的指针
SIZE_T nSize lpBuffer的大小
SIZE_T* lpNumberOfBytesWritten 实际写入的字节数


<编译器的魔术>
我在使用WriteProcessMemory把我自己写的一个函数JmpToAddress的内容写入远程进程空间时,发现无论我的JmpToAddress的内容是什么,写入空间的都是E9****这几个字节,这令我非常困惑,从机器码来看,这是一条相对跳转指令。那么它又是从何而来呢,为了搞清楚这个问题,我用VC调试了一下,在watch窗口中输入JmpToAddress,显示出JmpToAddress的虚拟地址0x00410XXX,然后打开memory窗口,查看这段内存中存放的内容,发现确实是JmpToAddress的代码,这就奇怪了,那神秘的E9****是从何而来呢,于是我请教了a1rsupply,他告诉我VC的调试版本会生成跳转表,这下真相大白,原来是编译器玩的魔术。

为了向远程进程正确写入代码,我们必须自己计算真正的函数地址,下面我写了一段代码来计算真正的函数地址:
__asm
{
pushad
lea eax,JmpToAddress
mov ecx,JmpToAddress
shr ecx,8
add eax,ecx
add eax,5
mov JmpAfterCalc,eax
popad
}

<解决麻烦的定位问题>
在编写代码的过程中,我遇到的另一个较大的问题就是如何定位地址。我编写的JmpToAddress()函数如下:
void __declspec(naked) JmpToAddress(void)
{
__asm jmp [HookedAddr]
}
在本地进程中这句代码没什么问题,但是当它被写入远端进程后便会产生种种问题,我们来看看它的汇编代码,如下
jmp [00401Cxxx]
我们注意到本进程中这个虚拟地址里存放的是HookedAddr的地址,但是在远程进程中,这个地址指向的是别的什么东西,jmp过去会产生不可预料的结果,为了实现正确的行为,我们先用WriteProcessMemory向远程进程写入HookedAddr的内容,然后用一个相对地址引用它
void __declspec(naked) JmpAddress(void)
{
__asm call flag
flag:
__asm pop eax
__asm add eax,0x0e
__asm mov ebx,[eax]
__asm jmp ebx
}
pop eax后,eax里面存放的就是本条指令的虚拟的地址,加上一个固定值后,[eax]就是我们通过WriteProcessMemory写入的数据。

完整演示代码
CODE:
/******************************************************************
*Author:                                       *
* [I.T.S]SystEm32                       *
*Module Name                                   *
* Hook_Api_1.cpp                         *
*Abstract:                                     *
* This Code Show the Method of Hooking Win32 API   *
*Environment:                                   *
* User Mode - Win32                       *
*Revision History:                               *
* 2004-9-20                           *
*express My thanks to:                             *
* Bkbll,A1rsupp1y,SoBeIt and TCH             *
*Our HomePage:                                   *
* [url]http://www.itaq.org[/url]                   *
******************************************************************/

#include <windows.h>
#include <stdio.h>
#include "psapi.h"

#pragma comment(lib,"psapi.lib")

#define NTAPIADDR FARPROC
#define K_MODULE "kernel32.dll"
#define HOOK_API "CreateProcessW"

HMODULE hKernel32 = GetModuleHandle(K_MODULE);
NTAPIADDR pCreateProcessW = GetProcAddress(hKernel32,HOOK_API);
LPVOID HookedAddr = NULL;


void __declspec(naked) RealExecute(void)
{
/*You can add your own Hooked CreateProcessW function here*/
__asm ret 0x28
}

void __declspec(naked) JmpToAddress(void)
{
__asm call flag
flag:
__asm pop eax
__asm add eax,0x0e
__asm   mov ebx,[eax]
__asm jmp ebx
}

BOOL WINAPI GetDebugPrivilege(void);
BOOL WINAPI InsertHook(DWORD ProcessID);

void main(void)
{
DWORD ProcessList[80],ProcessNUM;

EnumProcesses(ProcessList,sizeof(ProcessList),&ProcessNUM);

ProcessNUM/=sizeof(DWORD);

printf("Current process num is %d/n/r",ProcessNUM);
//printf("%08x/n/r",(LPVOID)RealExecute);

GetDebugPrivilege();

//step over the 0 process
for(DWORD Count=1;Count<ProcessNUM;Count++)
{
InsertHook(ProcessList[Count]);
}

Sleep(2000);
return;
}

BOOL WINAPI GetDebugPrivilege(void)
{
HANDLE   hToken,hProcess;
TOKEN_PRIVILEGES tp;
char *pSEDEBUG = "SeDebugPrivilege";

hProcess = GetCurrentProcess();
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,pSEDEBUG,&tp.Privileges[0].Luid);
tp.PrivilegeCount   = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
return 0;
}

BOOL WINAPI InsertHook(DWORD ProcessID)
{
MEMORY_BASIC_INFORMATION MBI;
HANDLE     hProcess;
LPVOID     RealAfterCalc,JmpAfterCalc;

int cb=sizeof(TCHAR)*4*1024;

//only for test
//if(1860 != ProcessID) goto end;

printf("PID is %d/n/r",ProcessID);

hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);

if(NULL == hProcess)
{
printf("failed!/n/r");
goto end;
}
//calculate the real address of RealExecute
__asm
{
pushad
lea eax,RealExecute
mov ecx,RealExecute
shr ecx,8
add eax,ecx
add eax,5
mov RealAfterCalc,eax
popad
}
//calculate the real address of JmpToAddress
__asm
{
pushad
lea eax,JmpToAddress
mov ecx,JmpToAddress
shr ecx,8
add eax,ecx
add eax,5
mov JmpAfterCalc,eax
popad
}

//Alloc some memory in the process
HookedAddr = VirtualAllocEx(hProcess,NULL,cb,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

if(0 == WriteProcessMemory(hProcess,HookedAddr,RealAfterCalc,5,NULL))
printf("WriteProcessMemory failed!/n/r");

VirtualQueryEx(hProcess,(LPVOID*)pCreateProcessW,&MBI,sizeof(MBI));
VirtualProtectEx(hProcess,MBI.BaseAddress,MBI.RegionSize,PAGE_EXECUTE_READWRITE,&MBI.Protect);

printf("HookedAddr is 0x%08x/n/r",HookedAddr);
WriteProcessMemory(hProcess,pCreateProcessW,JmpAfterCalc,0x0e,NULL);
WriteProcessMemory(hProcess,(char*)pCreateProcessW+0x13,&HookedAddr,4,NULL);

end:
return 0;
}
Win7/Vista Hook CreateProcess 的特别之处 Win7/Vista Hook CreateProcess 的特别之处 搬运自我的百度空间,写本文时主流系统为Win7,本文的方法没有在高版本的windows尝试 Hook了CreateProcess后发现,每当非管理员进程创建管理员进程,这个Hook被绕过了。   Win7中如果要截取创建新进程,单单Hook 本进程kernel32中的 阅读详情

相关推荐

易语言-Hook_CreateProcess阻止创建一个新的进程和它的主线程

通过HOOK CreateProcess 函数 来实现阻止创建一个新的进程和它的主线程

Hook CreateProcess

6种比较常用的运行(执行)程序的方法: 包括WinExec、ShellExecute、CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW、CreateProcessWithTokenW 要在r3层hook程序的运行,需要用到上述api CreateProcessAsUser win7用 CreatePr...

weixin_30616969的博客 1266

hook CreateProcessInternal

利用inline hook技术挂钩CreateProcessInternal,win7 32/64代码均有

canvas_ity快速入门:10行代码绘制你的第一张离屏渲染图

canvas_ity 是一个专为 C++ 打造的微型单头文件 2D 光栅化(rasterizer)库,它完整模拟了浏览器中 HTML5 2D canvas 的绘图规范,让你无需 GPU、无需任何第三方依赖,只需包含一个头文件,就能在内存中完成离屏渲染并导出像素图像。本文将带你从零开始,用 10 行左右的代码画出第一张离屏渲染图,并快速掌握它的核心 API 与渲染特性。 ## canvas_ity

gitblog_00100的博客 327

易语言-APIHOOK拦截指定进程创建新进程

APIHOOK拦截指定进程创建新进程

MAC 青花瓷(Charles)爪机HTTPS 抓包

前段时间跟之前的产品小姐姐聊天,小姐姐说开发让她抓包帮忙看下数据,然而自己又不会,那就来写一篇简易版的教程 冲冲冲! 手上只有mac电脑跟iPhone手机,只做苹果手机的抓包,android7.0以上版本也没法通过正常的抓htts的包,让安卓开发装个后门吧,不是安卓开发并不知道是啥,连上USB之后访问chrome://inspect/#devices就能很简单的抓包 一、准备工具等 青花瓷...

Promise的博客 1618

软件内嵌页面被运营商插入广告的处理方法

本文仅讨论内嵌页面被插入广告的处理(可控制的IWebBrowser2) 一些内嵌页面的软件往往被无耻的电信运营商加入广告弹窗,严重影响用户体验和口碑,我将在这里讨论几个现象和方法,希望可以给大家一些启发。 一、直接弹窗类 这个我定义为只要是打开你的页面,随之就会弹出一个或数个另外的IE或其他浏览器窗口,显示广告或其他推广内容。(比如广州电信的催费通知) 1.解决方法

时不我待 5819

R语言分布式滞后非线性模型DLNM实战:空气污染与健康数据的动态效应可视化与政策启示

本文详细介绍了R语言中分布式滞后非线性模型(DLNM)的应用,特别关注空气污染与健康数据的动态效应可视化。通过dlnm包实现PM2.5等污染物的滞后效应分析,提供从数据预处理、模型构建到结果可视化的完整流程,并探讨了其在公共卫生政策制定中的实际应用价值。

weixin_29079643的博客 515

Locale_Remulator 技术解析:基于 Detours 的 64 位 Windows 区域与语言模拟器

Locale_Remulator 是一个 Windows 系统区域(Region)与语言(Language)模拟器:通过 DLL 注入与 API Hook,让以 ANSI 接口编程的应用程序在运行时"以为"自己运行在目标区域环境中,而无需修改系统全局区域设置。它诞生的直接原因是同类工具 Locale-Emulator 不支持 64 位应用程序,而日服《冒险岛》(MapleStory)即将转为 64

gitblog_00919的博客 754

当几何失效时:3D激光SLAM退化场景的本质与应对策略

本文探讨了3D激光SLAM在退化场景(如长廊、隧道等)中的挑战与解决方案。文章从数学角度分析了退化原因,指出信息矩阵秩亏导致某些方向约束缺失。主流算法采用不同策略应对:LeGO-LOAM利用地面约束与解耦优化;LIO-SAM/LVI-SAM通过多传感器融合补偿;FAST-LIO系列依赖IMU短期积分。新兴的RID-LIO方案创新性地利用激光强度信息增强约束,实验显示精度提升63.59%。研究表明,针对不同退化方向需要采用特异性补偿策略,而挖掘现有传感器的潜在信息维度是提升鲁棒性的有效途径。

Studying…… 621

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1233

Windows Terminal 提权体验改进(1032):混合提权为何不可行,以及 elevate 配置、UAC 盾牌与 elevate-shim 的设计实现

本文基于 Windows Terminal 的官方设计文档(issue #1032,隶属 Process Model 2.0 系列规范)展开,讲解 Terminal 团队在放弃"同一窗口混合提权"方案后,围绕提权场景落地的一整套用户体验改进:`elevate` 配置项、UAC 盾牌指示器、跨提权级别的命令分发机制,以及安全模型中针对 `settings.json` 被篡改的防御设计。读完本文,你将

gitblog_00097的博客 192

28、沉浸式体验技术:概念、类型与应用

本文全面介绍了沉浸式体验技术的概念、类型与应用。从双边滤波器的图像处理原理切入,系统阐述了VR、AR、MR、ER及数字孪生等核心技术的特点与区别,并通过丰富案例展示了其在商业、医疗、教育、旅游、房地产、物流等多个领域的实际应用。文章还分析了技术融合趋势、硬件升级方向、应用场景拓展潜力,同时探讨了数据处理、网络延迟、隐私安全等挑战及应对策略,最后以流程图和对比表格总结技术发展脉络,展望沉浸式技术推动社会进步的广阔前景。

wind6的博客 390

易语言api hook CreateProcessA 创建进程

CreateProcessA我们非常熟悉,就是创建一个进程,这个API的函数hook非常实用,本课我们可以通过CreateProcessA来运行系统的计算器,或者记事本等等。 CreateProcessA .版本 2 .DLL命令 CreateProcessA, 整数型, "kernel32.dll", "CreateProcessA", , 创建进程。 .参数 lpApplicationName, 文本型 .参数 lpCommandLine, 文本型 .参数 lpPr

511遇见 6864

SAP PI 系统复制,不只是把数据库拷过去,而是一次集成拓扑的重新落位

文章摘要:SAP PI/PO系统刷新生产数据到测试环境时,标准系统复制无法自动处理集成中枢特有的环境绑定问题。系统复制后,PI仍保留生产环境的连接配置,可能导致测试系统向生产环境发送消息。SAP提供的CTC模板可自动化部分后续配置,但无法替代人工对接口风险的全面评估。关键在于系统复制前绘制接口风险地图,复制后进行分层次验证:禁用生产连接、重定向测试接口、复核安全配置,并通过代表性链路测试确保系统行为符合预期。这需要结合SAP标准流程与业务语义判断,形成完整的治理闭环。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 85

Detours版HOOK 未导出的API函数CreateProcessInternalW

#include <stdio.h> //#include <tchar.h> #include <windows.h> #include "detours.h" #pragma comment(lib,"detours.lib") //以下是HOOK需要的头文件 //#include <winsock2.h> //#include <MSWSock.h> //#pragma comment(lib,"ws2_32.lib") //.

追逐光芒,追随内心 2014

基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢

amy_mhd的博客 693

小试X64 inline HOOK,hook explorer.exe--->CreateProcessInternalW监视进程创建

原始函数是这样的 kernel32!CreateProcessInternalW: 00000000`7738e750 4c8bdc mov r11,rsp 00000000`7738e753 53 push rbx 00000000`7738e754 56 push rsi 00000000`7738e7

zwfgdlc的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

注意CreateProcessW函数

看下面这个代码有什么问题:  #define PROCESS_NAME _T(“C://Windows/NotePad.ext”)      if (!CreateProcessW(NULL, PROCESS_NAME, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation))  这里的问

ITLionWoo的专栏 6547

VB摄像头监控

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

通过HOOK控制进程的创建

一、 简介  最近,我了解到一个叫做Sanctuary的相当有趣的安全产品。它能够阻止任何程序的运行-这些程序没有显示在软件列表中-该表中的程序被允许在一个特定的机器上运行。结果,PC用户得到保护而免于各种插件间谍软件、蠕虫和特洛伊木马的侵袭-就算能够进入他/她的计算机,它们也没有机会执行,并因此没有机会对该机器造成任何损害。当然,我觉得这个特征相当有趣;并且,在稍作思考以后,我就有了一个自己

jiangxinyu的专栏 4866

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

通过Hook ZwCreateProcess获取进程全路径(缓存问题解决方案)

环境:WinXP 我们在拦截进程启动时,会去拦截ZwCreateProcess函数,然后在中间获取启动进程的了全路径,判断进程是否合法。 首先看下ZwCreateProcess函数的原型如下: 其中我们主要是利用SectionHandle参数,通过ObReferenceObjectByHandle获取文件对象,然后再利用ObQueryNameString函数进行刷新文件名缓存

博客模版 2758
上一篇: 高级语言反汇编程序的函数调用过程
下一篇: Windows 2000缓冲区溢出入门
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值