首页
社区
课程
招聘
[原创]一款私服登录器NP摘除
发表于: 2012-8-31 00:35 38291

[原创]一款私服登录器NP摘除

2012-8-31 00:35
38291

【文章标题】: 一款私服登录器NP摘除
【文章作者】: cppcoffee
【作者邮箱】: cppcoffee@gmail.com
【作者主页】: http://hi.baidu.com/new/cppcoffee
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  前段时间朋友让我帮忙过掉一个私服登录器的NP,周末闲着也是闲着,就利用业余时间分析一下.结果得去下载一个客户端(网速各种不给力啊,下载半天才下载完毕 - -).
  
  一看这个登录器带有两个驱动,一个是NP驱动,防止别人注入DLL,一旦注入被检测到了,登录器就死循环的MessageBox,逼着你非要重新启动系统不可.另外一个驱动是TDI的,无关紧要,所以没去分析.
  
  它在启动的时候就调用KdDisableDebugger防止虚拟机被WinDbg挂接,所以要将这个函数给Patch掉
  ed KdDisableDebugger 00c3c033
  0x00C3C033 对应的汇编代码是:
  XOR EAX, EAX
  RET
  这样KdDisableDebugger就返回STATUS_SUCCESS,WinDbg就能够顺利挂载到虚拟机上进行调试.
  用雪兔儿分析下,NP驱动分别启动了
  1个IO定时器
  1条线程
  LoadImage通知
  CreateProcess通知
  Shutdown通知
  CmpCallback通知
  以上函数的代码大部分被VMP掉..... - -b
  
  Inline HOOK的函数有:
    NtAllocateVirtualMemory
    NtCreateProcessEx
    NtGetContextThread
    NtMapViewOfSection
    NtOpenThread
    NtProtectVirtualMemory
    NtOpenThread
    NtQueryInformationProcess
    NtQueryInformationThread
    NtQuerySystemInformation
    NtReadVirtualMemory
    NtSetContextThread
    NtSetInformationProcess
    NtSystemDebugControl
    NtQueueApcThread
    NtCreateThread
    NtDuplicateObject
    NtSystemDebugControl
    Ke386IoSetAccessProcess
    KeInsertQueueApc
    KeUserModeCallback
    ObOpenObjectByPointer
    ObReferenceObjectByHandle
    PsLookupProcessByProcessId
    PsLookupThreadByThreadId
  
  话说刚开始一看还真吓了一条,比安全软件HOOK的还要多....当场无语....
  
  Inline HOOK的手法是:
  PUSH XXXXXXXX
  RET
  就这样跳转到NP代码中.
  如果要彻底的摘掉这个NP,就必须还原被HOOK的函数的代码和LoadImage的检测.
  
  还原这些被HOOK了的函数的做法和所有的过NP的代码一样,重载内核,恢复原始头部代码.
  可是..可是..这样还是会被还原掉,看了下,发现有一个定时器一直调用,一直操作Inline HOOK.即使被修改了,也被它改回来(好WS的方法啊 =, =)
  
  虽然代码被大量VMP,不明朗的情况下,感觉那条校验函数HASH的线程(线程还不停的注册回调例程,如LoadImage,CreateProcess回调等)和定时器互相调用 - -.
  从局部函数入手,替换掉SSDT Inline HOOK的函数入口
  
  还有一条函数哈希值检测函数(不管是自身函数还是内核中的函数,都有检测)是否被修改的线程.跟踪后记录下数值如下
  内核基址: 0xb24a7000  内核大小: 5A000
  函数地址  校验大小  校验结果  偏移  类型
  b24aa9f4  000000f9  97f0a7e0  39F4  LoadImage
  b24b0184  0000036c  c00fc7a6  9184  Thread
  b24b29a2  0000001f  8105b260  B9A2  HOOK SSDT
  
  就直接搞一个伪造函数来替换掉函数哈希检测线程,返回正常的哈希校验结果(其实函数已经被我们偷天换日了),接着替换掉LoadImage回调.
  使用注入工具试试,发现能够注入,啊~世界顿时安静了.
  
  文章中就补贴代码了,详情请见附件.
  附上过NP的代码(备注: 代码在WDK 7600.16385.1编译).
  备注: 代码只为学习交流之用,请勿用于非法用途.
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2012年08月31日 00:24:29


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (39)
雪    币: 1361
活跃值: (1116)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
我觉得直接停掉线程, 再摘掉IO定时器,再把回调函数卸掉,最后恢复inline hook  这样也行的吧
2012-8-31 00:58
0
雪    币: 248
活跃值: (188)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
3
停掉线程或者IO定时器,都会被重新启动,经过试验,没效果.所以才不得已使用伪造函数
2012-8-31 00:59
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
沙发,顶一下下ROOT
2012-8-31 01:05
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
小菜表示,学到东西啦, 弱弱的问下,雪兔儿是什么工具?
2012-8-31 01:50
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
应该是XueTr吧
2012-8-31 07:50
0
雪    币: 263
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
发现作者的编码风格很规范,代码排版,函数变量命名,适度的注释等等,都很规范
2012-8-31 09:11
0
雪    币: 1895
活跃值: (1642)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
好贴。感谢分享。
2012-8-31 09:47
0
雪    币: 1895
活跃值: (1642)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
看了下代码。特地追加感谢楼主哇。代码风格超喜欢。纹理清晰哇。
2012-8-31 09:55
0
雪    币: 248
活跃值: (188)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
10
XueTr  一般都叫他中文名字:雪兔儿,比较亲切
2012-8-31 11:36
0
雪    币: 1262
活跃值: (1048)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
顶个~~话说这名儿不错
2012-8-31 11:40
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
lz 的博客不错, 受益匪浅!
2012-8-31 11:50
0
雪    币: 354
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
下载源码学习
2012-8-31 12:26
0
雪    币: 538
活跃值: (264)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
原来 XueTr  有中文名了...
2012-8-31 12:42
0
雪    币: 1254
活跃值: (735)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
不错,谢谢分享。
2012-8-31 13:20
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好东西,学习学习
2012-8-31 13:48
0
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
MARK
2012-8-31 13:50
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
紧跟大侠脚步
2012-8-31 20:10
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
19
不错,比我厉害多了.
还那么谦虚.~
2012-9-1 13:18
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
小菜表示不懂。。。我就看看,,顶顶楼主。。
2012-9-1 14:59
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
小菜表示不懂。。。我就看看,,顶顶楼主。。
2012-9-1 15:08
0
雪    币: 192
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我是来顶贴的
2012-9-1 16:11
0
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
先膜拜了~   顶~
2012-9-1 17:14
0
雪    币: 688
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
CreateProcess通知弱弱地问一下这个就是系统创建一个进程都会通知??终止进程会通知吗?一般都什么情况下会通知呢?
2012-9-2 10:01
0
雪    币: 395
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好东西,楼主有才啊!
2012-9-2 10:22
0
游客
登录 | 注册 方可回帖
返回
//