rymrym
驱动牛犊
驱动牛犊
  • 注册日期2009-06-17
  • 最后登录2013-04-13
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1521回复:4

急急急!!!!SysEnter HOOK 过程中调用PsGetCurrentThreadId蓝屏

楼主#
更多 发布于:2009-06-17 21:30
本人是初次接触内核驱动,写了一个简单的SysHOOK,系统环境是XP,现在的问题是,在HOOK处理的过程中调有PsGetCurrentThreadId系统就会蓝屏,请各位高手不吝赐教!部分代码下:

// ----------------------------------------------------------------
//这里有还没有写处理逻辑
int CheckFunction(int functionNo)
{
if (ISSELF)
{
return 1;
}
//MUTEX_WAIT(KMSELF);
//ISSELF = TRUE;
PsGetCurrentThreadId(); //如果注掉这一句,一切OK
       //ISSELF = FALSE;
//MUTEX_RELEASE(KMSELF);
    return 1;
}

// ----------------------------------------------------------------
// Hook function
__declspec(naked) MyKiFastCallEntry()
{
  __asm
  {
      pushfd
  push eax
      push ebx
      push ecx
      push edx
      push ebp
      push esi
      push edi

      //call    PsGetCurrentThreadId    ; get thread id

  push eax
  call CheckFunction

  pop edi
  pop esi
  pop ebp
  pop edx
  pop ecx
      pop ebx
  pop eax
  popfd

  jmp [d_origKiFastCallEntry]
  }
}

NTSTATUS DriverInitialize (PDRIVER_OBJECT  pDriverObject,
                          PUNICODE_STRING pusRegistryPath)
    {
    DWORD          i;
    PDEVICE_OBJECT pDeviceObject = NULL;
    NTSTATUS      ns = STATUS_DEVICE_CONFIGURATION_ERROR;

    if ((ns = IoCreateDevice (pDriverObject, DEVICE_CONTEXT_,
                              &usDeviceName, FILE_DEVICE_SPY,
                              0, FALSE, &pDeviceObject))
        == STATUS_SUCCESS)
        {
        if ((ns = IoCreateSymbolicLink (&usSymbolicLinkName,
                                        &usDeviceName))
            == STATUS_SUCCESS)
            {
            gpDeviceObject  = pDeviceObject;
            gpDeviceContext = pDeviceObject->DeviceExtension;

            gpDeviceContext->pDriverObject = pDriverObject;
            gpDeviceContext->pDeviceObject = pDeviceObject;

            MUTEX_INITIALIZE (gpDeviceContext->kmDispatch);
            MUTEX_INITIALIZE (gpDeviceContext->kmProtocol);

__asm {
push ecx
push eax

mov ecx, 0x176
rdmsr        // read the value of the IA32_SYSENTER_EIP register
mov d_origKiFastCallEntry, eax
mov eax, offset MyKiFastCallEntry    // Hook function address
         wrmsr        // Write to the IA32_SYSENTER_EIP register

pop eax
pop ecx

}
            }
        else
            {
            IoDeleteDevice (pDeviceObject);
            }
        }
    return ns;
    }

这个代码是在Nt Secrets书上的代码的基础上修改的.

  另外还有一个问题,就是我HOOK了SysEnter,可在处理过程中又需要调有内核函数,怎么避免死循环呢? 急!!!!
rymrym
驱动牛犊
驱动牛犊
  • 注册日期2009-06-17
  • 最后登录2013-04-13
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-06-17 21:48
高手都不屑于回答我的问题?本人是新手呀,也没什么分,不过如果大牛愿意帮忙我也愿意以其它的方式酬谢呀. 请高手们一定要赐都呀.
rymrym
驱动牛犊
驱动牛犊
  • 注册日期2009-06-17
  • 最后登录2013-04-13
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-06-18 08:17
不会吧, 都这么长时间了也不见大牛来说句话. 不要这样呀,帮帮我!
rymrym
驱动牛犊
驱动牛犊
  • 注册日期2009-06-17
  • 最后登录2013-04-13
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-06-18 15:32
还没有人回答?怎么这样呀,都一天了,高手都哪里去了?真让我失望呀
rymrym
驱动牛犊
驱动牛犊
  • 注册日期2009-06-17
  • 最后登录2013-04-13
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-06-19 20:42
新手,连结帖也不知道怎么操作. 不说了
游客

返回顶部