首页
社区
课程
招聘
[原创]水貼:通用的自建調試系統模型
发表于: 2014-6-12 23:34 13690

[原创]水貼:通用的自建調試系統模型

2014-6-12 23:34
13690

網上很多代碼,自建調試系統,都是基於WRK修改的方法,隨便打開一份帶有自建調試系統的源碼,都能看到M$程序豬的代碼,所以,這就是為什麼大部分寫驅動的人都把調試系統固定在XP上(因為win7以上沒有WRK作為參考)
  觀察一下網上的代碼,我們大可得到一個規律:
  凡是有對於DBGPort判斷的地方,都把自己從其他地方得到的DEBUG_OBJECT替換掉,大家可以去對比他們的代碼。
       那麼我們縱觀全系統,對於DBGPort清零,我們可以使用HOOK模型。這種HOOK模式是我第一次在AGP高級班的7.1.1上第一次出現。大家可以去網上找,一堆盜版。那麼我們怎麼樣的思路來兼容WIN7呢?我們查看IDA,隨便找一個訪問到DBGPort的代碼:

_DbgkMapViewOfSection@20 proc near      ; CODE XREF: NtMapViewOfSection(x,x,x,x,x,x,x,x,x,x)+223p
PAGE:0065733E
PAGE:0065733E var_C0          = dword ptr -0C0h
PAGE:0065733E var_BC          = dword ptr -0BCh
PAGE:0065733E var_A8          = dword ptr -0A8h
PAGE:0065733E var_A0          = dword ptr -0A0h
PAGE:0065733E var_9C          = dword ptr -9Ch
PAGE:0065733E var_98          = dword ptr -98h
PAGE:0065733E var_94          = dword ptr -94h
PAGE:0065733E var_90          = dword ptr -90h
PAGE:0065733E ms_exc          = CPPEH_RECORD ptr -18h
PAGE:0065733E arg_0           = dword ptr  8
PAGE:0065733E
PAGE:0065733E                 push    0B0h
PAGE:00657343                 push    offset stru_455C98
PAGE:00657348                 call    __SEH_prolog4
PAGE:0065734D                 mov     edi, edx
PAGE:0065734F                 mov     eax, large fs:124h
PAGE:00657355                 mov     al, [eax+13Ah]
PAGE:0065735B                 xor     ebx, ebx
PAGE:0065735D                 cmp     al, bl
PAGE:0065735F                 jz      loc_657482
PAGE:00657365                 mov     edx, large fs:124h
PAGE:0065736C                 test    byte ptr [edx+280h], 4
PAGE:00657373                 jnz     loc_657482
PAGE:00657379                 cmp     [ecx+0ECh], ebx

  那麼我們怎麼讓這裡的DBGPort是有效的呢?首先,我們通過Hook
  NtCreateDebugObject 得到OD創建的DEBUG_OBJECT對象,保存到我們驅動的全局變量:
  PDEBUG_OBJECT g_DebugPort;
  g_DebugPort = ReferencedObject;

這個時候我們已經擁有了DBGPort了,那麼剩下遵守這個規則:

JNZ的,就hook這個地方,把0x0EC設置為g_DebugPort讓判斷通過
需要DBGPort的地方,就把g_DebugPort給它。

  
  給出一個典型的處理例子:
  
  __declspec(naked) VOID NewDbgkMapViewOfSection()
  {
          __asm
          {
                          //如果不是游戏进程,则直接返回
                          cmp ecx,eprocess_gameprocess
                          jnz _ret
  
                          //如果游戏进程为0,也直接返回
                          cmp eprocess_gameprocess,0
                          jz _ret
  
                          //debugport为0,也要返回了
                          cmp g_DebugPort,0
                          jz _ret
  
                          /*
                          8408f379 3999ec000000    cmp     dword ptr [ecx+0ECh],ebx
                          8408f37f 0f84fd000000    je      nt!DbgkMapViewOfSection+0x144 (8408f482)
                          */
                          push eax
                          mov eax,g_DebugPort
                          mov dword ptr[ecx+0ECh],eax //修改,讓ec偏移有值繞過判斷
                          pop eax
  _ret:
                          jmp [DbgkMapViewOfSectionHookZone]
          }
  }

最後我想對QQ群里的這位同學說:

自己只有一個蛋蛋,見到有兩個蛋蛋的人,自然會很驚呆。


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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (20)
雪    币: 6542
活跃值: (4341)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
2
其实可以根据重定位表获取到所有访问debugport,DebugObjectType,调试互斥的地方,然后xx掉.
2014-6-12 23:49
0
雪    币: 2
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哇,A总又发技术贴了,赶紧宣传下:

AGP论坛和老V没关系纯属山寨货:http://bbs.pediy.com/showthread.php?t=187617
AGP大牛-山总(东阳不列山)讲解史上最牛找游戏基址教程:http://bbs.pediy.com/showthread.php?t=187590
山总的MFC42再次告诉我们什么是坑:http://bbs.pediy.com/showthread.php?t=187654
要求AGP全额退款或放无BUG代码/无锁视频:http://bbs.pediy.com/showthread.php?t=187746
2014-6-13 08:31
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
不管咋说,乐意分享还是很支持a总,能学到东西才好
2014-6-13 08:46
0
雪    币: 615
活跃值: (590)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
顶下A总,顶了再看,
2014-6-13 09:06
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持一下盾哥。。。。。。。。。
2014-6-13 09:08
0
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
7
好想法,下一步就要检测钩子了。
2014-6-13 10:17
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
LZ把方法都倒出来了,很快就会和谐了
2014-6-13 11:51
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
9
無所謂,網上盜版早就一堆了,要檢測早就該檢測了。
2014-6-13 14:01
0
雪    币: 287
活跃值: (583)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
还不是把操作DebugPort的地方到处挂钩子,内核都要被你们挂爆了
2014-6-13 14:04
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
相对偏移也走重定位表?
2014-6-13 15:03
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
12
代碼寫得好就不會藍屏~
2014-6-13 21:55
0
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13

之前自用的过debug port就是这个。。。

一个周末没上看雪。。。居然被暴出来了。。
2014-6-15 23:17
0
雪    币: 285
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
眼前一亮,赶紧试下
2014-6-16 08:35
0
雪    币: 116
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
额 这个方法用过 太麻烦了 对待TP 有更简单的方法
2014-6-16 08:46
0
雪    币: 116
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
这方法应该是正常思路能想到的最好的方法了,谢谢楼主分享。
2014-6-16 10:09
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
求指教一下
2014-8-3 08:58
0
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
虽然不懂你在说什么,但是感觉很牛X !
2014-8-7 11:06
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢 你的分享 我去试试
2014-8-29 10:25
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark一下 谢谢
2014-9-10 11:00
0
雪    币: 4939
活跃值: (2360)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mark下
2015-2-11 14:52
0
游客
登录 | 注册 方可回帖
返回
//