鱼C论坛

 找回密码
 立即注册
查看: 2544|回复: 1

[原创] 最新TP的资料清0也有

[复制链接]
发表于 2013-8-8 12:37:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void HandleDebugZero(ULONG uImageBase) //主要清零处理函数
{
                ULONG uAddr_1=uImageBase + 0x4082;//清零CRC检测首地址
  ULONG uAddr_2=uImageBase + 0x6ea8;//清零处1首地址
  ULONG uAddr_3=uImageBase + 0x2228;//清零处2首地址
  GetDnfEprocessAddr(uImageBase);   //取得DNF 进程基址
           //这个进程基址在处理第三和第四处清零的时候用到
           if(uImageBase==0)
  {
    return;
  }
  DisableWP();   //清除CR0
  *(PUSHORT)uAddr_1=0xc3;
                 //由于这个检测函数没压入参数,所以直接ret
           
   
  //0x6ea8 //第一处清零首地址,也是直接ret
           *(PUCHAR)(uAddr_2)=0xc3;
  //0x2228 //第二处清零首地址,还是直接ret
  *(PUCHAR)(uAddr_3)=0xc3;

  EnableWP();//恢复CR0
  
                g_uDebugPortOffset=g_uDebugPortOffset+0xbc;
                //取到清零位置的地址
  HandleDebugPortPop(true,uImageBase);//处理第三处清零
  HandleDebugPortPush(true,uImageBase);//处理第四处清零
}
void HandleDebugPortPop(BOOLEAN bHook,ULONG uImageBase)
{
  if(bHook)
  {
    //hook pop
    if(uImageBase==0)
    {
      return ;
    }
    g_uDebugPortPopHookAddr=uImageBase+0xbb0f0;//pop hook地址
    g_uDebugPortPopRetAddr=uImageBase+0xba2bc;//pop retn 地址
    if(g_uDebugPortPopHookAddr==0)
    {
      return;
    }
    RtlCopyMemory((PVOID)g_szBackupDebugPortPop,
                (PVOID)g_uDebugPortPopHookAddr,
                       5);//保存hook地址,用于恢复
   
    InLineHookEngine(g_uDebugPortPopHookAddr,(int)FuckDebugPortPop);
    //__asm int 3
  }
  else
  {
    if(g_uDebugPortPopHookAddr==0)
    {
      return;
    }
    // 最好判断下 TP是否 已经卸载
    int TesSafe=GetTesSafeBassAddr();
    if(TesSafe!=0)
    {
    //KIRQL Irql=KeRaiseIrqlToDpcLevel();
    DisableWP();
        RtlCopyMemory((PVOID)g_uDebugPortPopHookAddr,
                (PVOID)g_szBackupDebugPortPop,
                       5);//保存hook地址,用于恢复
    EnableWP();
    }
  }
}

void HandleDebugPortPush(BOOLEAN bHook,ULONG uImageBase)
{
  if(bHook)
  {
    //hook pop
    if(uImageBase==0)
    {
      return ;
    }
    g_uDebugPortPushHookAddr=uImageBase+0xba4ca;//push hook地址
    g_uDebugPortPushRetAddr=uImageBase+0xba2bc;//push retn 地址
    if(g_uDebugPortPushHookAddr==0)
    {
      return;
    }
    RtlCopyMemory((PVOID)g_szBackupDebugPortPush,
                (PVOID)g_uDebugPortPushHookAddr,
                       5);//保存hook地址,用于恢复
   
    InLineHookEngine(g_uDebugPortPushHookAddr,(int)FuckDebugPortPush);
    //__asm int 3
  }
  else
  {
    if(g_uDebugPortPushHookAddr==0)
    {
      return;
    }
    // 最好判断下 TP是否 已经卸载
    int TesSafe=GetTesSafeBassAddr();
    if(TesSafe!=0)
    {
    //KIRQL Irql=KeRaiseIrqlToDpcLevel();
    DisableWP();
                                RtlCopyMemory((PVOID)g_uDebugPortPushHookAddr,
                (PVOID)g_szBackupDebugPortPush,
                       5);//保存hook地址,用于恢复
    EnableWP();
    }
  }
}
__declspec(naked)void FuckDebugPortPop()
{
  //DbgPrint("Pop");
  __asm
  {
    pushfd
    cmp edx,g_uDebugPortOffset //判断入栈的参数是否是清零位置的地址
    jnz POPLABLE
    popfd
    add esp,0x4
    jmp g_uDebugPortPopRetAddr
POPLABLE:
    popfd
    pop dword ptr [edx]
    jmp g_uDebugPortPopRetAddr
  }
}
__declspec(naked)void FuckDebugPortPush()
{
  //DbgPrint("Push");
  __asm
  {
    pushfd
    cmp edx,g_uDebugPortOffset//判断入栈的参数是否是清零位置的地址
    jnz PUSHLABLE
    popfd
    push 0
    jmp g_uDebugPortPushRetAddr
PUSHLABLE:
    popfd
    push dword ptr [edx]
    jmp g_uDebugPortPushRetAddr
  }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-4 21:49:58 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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