首页
社区
课程
招聘
[求助]被郁金香老师教程搞蒙了 大家帮忙看看
发表于: 2011-1-23 21:10 10746

[求助]被郁金香老师教程搞蒙了 大家帮忙看看

2011-1-23 21:10
10746
//获得调用者的EPROCESS
        g_processEPROCESS = IoGetCurrentProcess();  
        KdPrint(("EPROCESS=%x",g_processEPROCESS));
        //将调用者的进程名保存到str1中
        RtlInitAnsiString(&p_str1,(CONST char *)(ULONG)g_processEPROCESS+0x174);  
        //将我们要比对的进程名放入str2
        RtlInitAnsiString(&p_str2,DNF_EXE);   (1)  获得调用者进程名是是DNF.EXE 被调用 就执行第一个 不是执行第二个
        if (RtlCompareString(&p_str1,&p_str2,TRUE) == 0)
        {
                //说明是DNF进程访问了这里
                __asm
                {
                        push    dword ptr [ebp-38h]
                        push    dword ptr [ebp-24h]
                        push  g_ProcessReturnAddress
                        mov    eax,g_ProcessGameHookAddress
                        jmp    eax
                }
        }
        else
        {
                __asm
                {
                        push dword ptr [ebp-38h]
                        push dword ptr [ebp-24h]
                        push g_ProcessReturnAddress
                        mov eax,g_ProcessObjByPointer
                        jmp eax
                }
        }

这是两个不同的函数

/*#pragma  PAGECODE
void __declspec(naked)  myInt3Proc()
{
        __asm
        {
               
                pushf
        }

        //获取进程上下文
           PEPROCESS EP;
         ULONG jmpaddr;
         EP=PsGetCurrentProcess();  //这个 函数 在DDK里面也是 获得调用者进程名  那他不是 notepad.exe 作为调用者了 吗 明明 是要把 notepad.exe 保护起来 确破坏他 这样不是错了吗

这里变成了 是 notepad.exe调用次函数 就 执行第一个蓝屏 不是就执行第二个
         // (PTSTR)((ULONG)EP+0x174)是否等于 需要反断点的进程
         if (strcmp((PTSTR)((ULONG)EP+0x174),"notepad.exe")==0)
         {
                 //需要保护的进程 直接反回
                 KdPrint(("\n ------------ __asm iretd 直接返回;--------\n"));
                 __asm iretd;
         }else
         {  
                         KdPrint(("\n ------------ entry myInt3Proc 正常执行 ;--------\n"));
                        //不是需要保护 正常执行
                 //jmp 回原int3proc_addr+5位置运行
                  jmpaddr=int3proc_addr;
                  // KdPrint(("\n ------------jmp jmpaddr 不需要保护正常执行 int 3;---------\n"));
                  __asm
                  {
                          popf
                          
                  }
                 __asm
                 {       

                                              push 0
                         mov word ptr [esp+2], 0
                                       add jmpaddr,9
                        jmp jmpaddr

                 }
       
         }//end else
}*/

百思不得其解

到底 PsGetCurrentProcess();和 IoGetCurrentProcess();   有啥区别 是获得调用者进程名 还是获得 被访问者进程名 就是说 我用OD打开 QQ.exe
那获取的到底是 OD。EXE 还是qq.exe  两个都是一样吗

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 6
活跃值: (1099)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
两个函数其实是一个,只是在不同的地方取了不同的名字
PEPROCESS
  IoGetCurrentProcess(
    VOID
    )
{
    mov     eax, large fs:124h ; IoGetCurrentProcess
    mov     eax, [eax+44h]
    retn
}
2011-1-23 22:28
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那这两个函数是获取 调用者进程 还是 被打开调试的进程啊 比如说 我用OD打开QQ 那IoGetCurrentProcess
是获取OD进程还是QQ进程
2011-1-24 03:20
0
雪    币: 250
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
QQ进程,OD是attach进QQ的
2011-1-24 15:10
0
雪    币: 251
活跃值: (77)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
看得头晕。帮带头大哥顶顶帖子
2011-1-24 15:56
0
游客
登录 | 注册 方可回帖
返回
//