看流星社区

 找回密码
 注册账号
查看: 2325|回复: 3

流星大哥帮小弟看看哪里不对了。超级郁闷

[复制链接]

该用户从未签到

发表于 2012-11-27 23:56:35 | 显示全部楼层 |阅读模式
蛋疼死了,按照以前学的方法写的内联HOOK,现在怎么用不了了,调试了几十次了还是蓝屏,加载过一段时间后蓝屏,到底哪里错了啊,自定义的函数找不到哪里错了:
  1. ULONG GetNt_CurAddr(LONG Suoyin/*比如 0X7A*/)//获取当前SSDT_NtOpenProcess的当前地址

  2.     {
  3.     LONG * SSDT_Adr;
  4.     LONG SSDT_NtOpenProcess_Cur_Addr,t_addr;
  5.      //读取SSDT表中索引值为0xXXX的函数
  6.     t_addr=(LONG)KeServiceDescriptorTable->ServiceTableBase;
  7.      SSDT_Adr=(PLONG)(t_addr+Suoyin*4);
  8.      SSDT_NtOpenProcess_Cur_Addr=*SSDT_Adr;       
  9.     return SSDT_NtOpenProcess_Cur_Addr;
  10.     }
复制代码
Q




  1. HANDLE Getpid;
  2. PEPROCESS PEPE;
  3. ULONG ADR;
  4. #pragma PAGECODE
  5. //声明自己的NtOpenProcess函数
  6. [code]extern "C" NTSTATUS __declspec(naked) __stdcall NOWOpenProcess(
  7.         OUT     PHANDLE ProcessHandle,
  8.         IN     ACCESS_MASK DesiredAccess,
  9.         IN     POBJECT_ATTRIBUTES ObjectAttributes,
  10.         IN     PCLIENT_ID ClientId ) {
  11.                 NTSTATUS     rc;
  12.                 HANDLE OPENPID;
  13.                
  14.        
  15. if (ClientId!=NULL)
  16. {
  17.         OPENPID=ClientId->UniqueProcess;
  18.         KdPrint(("现在被打开的进程PID=%d",*((int*)OPENPID)));
  19. //Getpid是在用户层传进来的进程ID
  20.         if (OPENPID==Getpid)
  21.         {
  22.                 KdPrint(("发现进程被打开,被保护的进程PID是:%d",(int*)Getpid));
  23.                 PEPE=PsGetCurrentProcess();
  24.                 KdPrint(("进程__%s__企图打开被保护的进程",(PTSTR)((ULONG)PEPE+0x174)));
  25.                 ProcessHandle=NULL;
  26.                 __asm{
  27.                         retn 0x10
  28.                 }
  29.         }
  30. }


  31. __asm{
  32.                 push    0x0C4
  33.                 mov eax ,ADR       
  34.                         add eax,0x5
  35.                 jmp eax

  36. }

  37. }
复制代码
入口函数:
  1. extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING B) //TYPEDEF LONG NTSTATUS
  2. { //////////////////////////////////////////////////////////////////////////

  3. pDriverObject->MajorFunction[IRP_MJ_CREATE]=ddk_DispatchRoutine_CONTROL; //IRP_MJ_CREATE相关IRP处理函数
  4. pDriverObject->MajorFunction[IRP_MJ_CLOSE]=ddk_DispatchRoutine_CONTROL; //IRP_MJ_CREATE相关IRP处理函数
  5. pDriverObject->MajorFunction[IRP_MJ_READ]=ddk_DispatchRoutine_CONTROL; //IRP_MJ_CREATE相关IRP处理函数
  6. pDriverObject->MajorFunction[IRP_MJ_CLOSE]=ddk_DispatchRoutine_CONTROL; //IRP_MJ_CREATE相关IRP处理函数
  7. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=ddk_DispatchRoutine_CONTROL; //IRP_MJ_CREATE相关IRP处理函数
  8. CreateMyDevice(pDriverObject);//创建相应的设备
  9. pDriverObject->DriverUnload=DDK_Unload;
  10. return (1);
  11. }
复制代码
  1. case Hook_code:
  2.                         {
  3.                                 int * InputBuffer = (int*)pIrp->AssociatedIrp.SystemBuffer;
  4.                                 _asm
  5.                                 {
  6.                                         mov eax,InputBuffer
  7.                                                 mov ebx,[eax]
  8.                                         mov Getpid,ebx

  9.                                 }
  10.                  
  11.                 ADR=GetNt_CurAddr(0x07a);
  12.                            OldNtopenprocess =(NTOPENPROCESS*)ADR;
  13.                                 JMPCODE SAVECODE1;
  14.                                 PJMPCODE CODE2;
  15.                                 CODE2=(PJMPCODE)ADR;
  16.                                 ULONG JMPADR;
  17.                                 JMPADR=(ULONG)NOWOpenProcess-ADR-5;
  18.                                 __asm //去掉页面保护
  19.                                 {
  20.                                         cli
  21.                                                 mov eax,cr0
  22.                                                 and eax,not 10000h //and eax,0FFFEFFFFh
  23.                                                 mov cr0,eax

  24.                                 }
  25.                                 CODE2->E9=0xe9;
  26.                                 CODE2->JMPADDR=JMPADR;
  27.                                 __asm //恢复页保护
  28.                                 {
  29.                                         mov eax,cr0
  30.                                                 or  eax,10000h //or eax,not 0FFFEFFFFh
  31.                                                 mov cr0,eax
  32.                                                 sti
  33.                                 }
  34.                info = 4;
  35.                                
  36.                                 break;
  37.                         }
复制代码

该用户从未签到

发表于 2012-11-28 11:11:59 | 显示全部楼层
这要用windbg调试下,你自己会写代码就可以调试下,输出一些数值看看~

该用户从未签到

 楼主| 发表于 2012-11-28 12:00:19 | 显示全部楼层
回复 2# 小小思维


     OPENPID输出的进程PID不正常。。不知道哪里错了,难道是函数定义错了?

该用户从未签到

 楼主| 发表于 2012-11-28 12:03:25 | 显示全部楼层
[img][/img] 1.jpg 把自己写的代码全删除了,复制成了教程里的代码,居然也是这样
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-30 16:56

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表