ganer
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2004-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1462回复:2

WINDOWS api 全局钩子实现问题

楼主#
更多 发布于:2003-09-21 11:30
使用CreateRemoteThread来注入DLL,

先是对Explorer等程序注入一个专门截取CreateProcessA和CreateProcessW的DLL,然在这两个函数中判断,如果新进程名字是notepad和ie,就注入另外一个用于截取待截取API的DLL。

在程序中的实现如下:
BOOL WINAPI Hook_CreateProcessW(LPWSTR Para0, LPWSTR Para1, LPSECURITY_ATTRIBUTES Para2,
LPSECURITY_ATTRIBUTES Para3, BOOL Para4, DWORD Para5,
LPVOID Para6, LPWSTR Para7, LPSTARTUPINFOW Para8,
LPPROCESS_INFORMATION  ProcessInformation){
//调用原来的函数
BOOL nResult=((LUO_CREATEPROCESSW)(PROC)g_CreateProcessW)(Para0, Para1, Para2, Para3,
Para4, Para5|CREATE_SUSPENDED, Para6, Para7, Para8, ProcessInformation);
//注入Dll
int bRet=0;
//bRet=WhatKindOfProcess(Para1);//判断是哪一类进程
if(0==bRet){
InjectLibW(ProcessInformation->dwProcessId, L\"C:\\\\APISpy2003\\\\APISpyLib.dll\");
}els
if( 0xFFFFFFFF==ResumeThread(ProcessInformation->hThread))
::MessageBox(NULL,\"无法继续执行!\",\"提示(HKCreProcLib.DLL:CreateProcessW)\",MB_OK);
return (nResult);
}

但在调试中发现,如果是以挂起方式(即Para5|CREATE_SUSPENDED)启动新进程注入,则新进程一起动就退出;而去掉CREATE_SUSPENDED则可以截取并正常运行。

这是为什么?

最新喜欢:

xiangshifuxiangs...
好好学习,天天向上!
rock1001
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-21 21:25
不行就不用了
gx_kyw
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2011-04-13
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望7点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-23 13:11
因为第一个线程是初始化线程,也就是主线程

而如果这个进程的启动参数是 SUSPEND的话,

你ResumeThread,并不能使得主线程能继续

如果你的主线程并没有运行,也就是说,并没有进行初始化,

那么当你的远程注射线程运行的时候,就会出现异常。

然后就导致了整个进程的退出, 这就是为什么新进程一启动就退出
的原因了。
游客

返回顶部