CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

有人把OpenProcess加了钩子,不让其他程序打开它的句柄,我们如何才能突破限制呢

楼主ggg82(我喜欢...)2005-07-03 23:03:32 在 VC/MFC / 进程/线程/DLL 提问

如题:有人的进程防杀秘籍是给OpenProcess挂钩,当其他程序要使用该函数打开句柄的时候,返回错误值,来禁止别人终止它的程序,如何才能突破这种限制呢 问题点数:100、回复次数:10Top

1 楼jasonjixiang(吉祥)回复于 2005-07-04 09:02:11 得分 5

upTop

2 楼krh2001(边城浪子)回复于 2005-07-04 09:22:44 得分 15

API   钩子的原理就是更改函数入口的头几个字节跳转到一个自定义的地方去执行。我们可以反其道而行之:先分析一下该函数的头几个字节的具体值,保存下来,   然后既然它的程序可以修改,那么你的程序也应该可以将它恢复回去。这样先检测一下函数的起始字节是否正常,若不正常则将它恢复回去,然后再去执行该函数。Top

3 楼ggg82(我喜欢...)回复于 2005-07-07 09:18:35 得分 0

如果他使用修改函数导入表,原函数的地址我无法得到怎么办呢,因为在不同系统,原函数的地址是不同的呀Top

4 楼linestyle(linestyle)回复于 2005-07-07 09:40:55 得分 10

同意   krh2001(边城浪子)   的说法啊,呵呵,强行搜索API,很多病毒都是这样的:)Top

5 楼lonelyeagle(行路难)回复于 2005-07-07 14:15:21 得分 20

不要试图用OpenProcess得到进程句柄,再通过TerminateProcess关闭进程。  
  换个思路,杀死该进程的所有线程,它一样会完蛋。  
   
  BOOL   CProcessOperation::TerminateAProcess(DWORD   dwPid)  
  {  
  HANDLE   hThreadSnap   =   NULL;  
  THREADENTRY32   te32;  
  BOOL   bThreadFind   =   FALSE;  
  hThreadSnap     =   CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,NULL);  
  if(hThreadSnap)  
  {  
                      te32.dwSize   =   sizeof(THREADENTRY32);  
    bThreadFind   =   Thread32First(hThreadSnap,&te32);  
                      while(bThreadFind)  
    {  
        if(te32.th32OwnerProcessID   ==   dwPid)  
        {  
          HANDLE   hThread   =   NULL;  
          hThread   =   OpenThreadTHREAD_ALL_ACCESS,FALSE,te32.th32ThreadID);  
          if(hThread)  
            {  
                                TerminateThread(hThread,0);  
              CloseHandle(hThread);  
              }                                  
        }  
                          te32.dwSize   =   sizeof(THREADENTRY32);  
        bThreadFind   =   Thread32Next(hThreadSnap,&te32);                              
    }  
    CloseHandle(hThreadSnap);  
  }  
  return   TRUE;  
  }  
   
  Top

6 楼ggg82(我喜欢...)回复于 2005-07-08 08:06:18 得分 0

上次一个朋友的机器中毒了,我怎么也结束不了那个进程,本想复制文件过去杀他,结果,系统复制文件不可用,让我只好到dos下去,可他的机器光驱又不顶用,进dos都得大费周折,气的不行,如果有好的方法,突破这种限制,那岂不是更好。  
   
  krh2001(边城浪子)的方法很好,只不过挂接api有好些方法,如果不是通过修改函数前几字节,如修改函数导入表,我们无法得到原函数地址,怎么办呢?  
   
  lonelyeagle(行路难)杀死线程的创意很不错,只不过,他即可以挂openprocess,那不也可以挂openthread,还有更好的方法吗?Top

7 楼ForTopLevel(Beahead)回复于 2005-07-08 13:02:52 得分 20

我原来也思考过这个问题,我觉得如果是我的话可以在函数输入表里判断openprocess和其他任何同DLL的输入函数的相对偏移来处理,要保证的只是被选做参照的那个函数不能也是被修改了的。如果发现这个偏移地址不正确,那你就只能手动在K.DLL里搜索函数地址了,然后再写回去。这个方法是我能想到的最简洁的了   :)Top

8 楼ggg82(我喜欢...)回复于 2005-07-08 15:21:30 得分 0

ForTopLevel(Beahead)   :怎么在kernel32.dll中搜索函数地址呀,可以给个例子吗Top

9 楼alphagx(alpha)回复于 2005-07-09 16:23:25 得分 30

我以前写过一个程序,在驱动里面删除进程的。  
   
  首先根据PID   找到   相应的   EPROCESS,  
  然后  
   
  KeAttachProcess(pEP);  
  status   =   ZwTerminateProcess(NULL,NULL);  
  KeDetachProcess();  
   
  上层再怎么Hook都没用。  
  Top

10 楼alphagx(alpha)回复于 2005-07-09 16:24:38 得分 0

现在在ring0层杀进程的太多了。  
  象eva   写的   knlps,    
  pjp   的iceword,网上   goolge一把。Top

相关问题

  • 高手请回答关于钩子的话题,如何得到IE Explore地址输入栏的句柄
  • 在安装钩子时出错,Getlasterror返回:没有模块句柄,无法设置非本机连接
  • 知道一个窗口的句柄,如何安装一个针对该窗口的钩子。
  • 使用全局钩子时,在Dll中得到调用程序主界面的窗口句柄问题?
  • 在钩子中如何判断键盘或鼠标消息是发送给哪一个句柄的
  • 如何利用钩子知道[QQ聊天窗口]弹了出来并得到其句柄?
  • 全局钩子DLL中保存的DLL实例句柄无效,怎么回事?(有代码说明)
  • 句柄?
  • 句柄
  • 钩子!钩子!

关键词

  • 函数
  • 修改
  • dll
  • null
  • 句柄
  • hthreadsnap
  • bthreadfind
  • openprocess
  • 原函数
  • 程序

得分解答快速导航

  • 帖主:ggg82
  • jasonjixiang
  • krh2001
  • linestyle
  • lonelyeagle
  • ForTopLevel
  • alphagx

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo