首页
社区
课程
招聘
修改regmon/filemon,跳过themida的检测
发表于: 2006-10-21 23:57 15284

修改regmon/filemon,跳过themida的检测

2006-10-21 23:57
15284
【文章标题】: 修改regmon.filemon,跳过themida的检测
【文章作者】: rockhard
【作者邮箱】: wnh1@sohu.com
【软件名称】: regmon/filemon
【下载地址】: http://www.sysinternals.com/Utilities/Regmon.html
【加壳方式】: 无
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【详细过程】
  在themida加壳选项中,有anti-regmon和anti-filemon选项,如果选择了,加过壳的程序正常情况下不能用filemon和regmon监视。本文就是尝试修改regmon/filemon,以达到正常监视作用。
  
  regmon/filemon的实现大家可以参考源码,是利用驱动进入ring0,然后挂接系统服务例程。themida作者能用到的方法可以参考http://bbs.pediy.com/showthread.php?threadid=19624中所说.文章中列出了如下几点:
  
  1 - 查找进程。
  2 - 查找窗口(我在某些壳中也发现了这个)。
  3 - 查找注册表中的驱动。
  4 - 查找内存中的驱动。
  5 - 查找驱动的对象表。
  6 - 查找 SDT (只对 regmon)。
  
  经过几次测试发现修改三个地方可以跳过THEMIDA的检测.下面是修改过程(这里以regmon目前最新版本7.03为例,filemon同样办法),分别修改三样。1.标题 2.窗口类名 3.驱动的文件名
  
  一 修改标题。
  
  这是最简单的,运行Regmon,可以看到窗口最上方标题显示Registry Monitor - sysinternals:www.sysinternals.com.用UltraEdit打开regmon,查找ASCII串:"registry monitor -" 共有两处,把整个串改为Registri Moniter - Sysexternals: www.sysinternals.com.或者其它的什么的.让themida从这个串的判断失效就行.
  
  二 修改主窗口的类名.
  
  用VC自带的不工具SPY++,用FIND WINDOW功能,先看下主窗口的类名,看到为:18467-41.仿照上面的办法查找串,这次运气不太好.没找到.但所有的类名都是通过api RegisterClass/RegisterClassEx注册到系统的.用OD加载Regmon,下断bp RegisterClassA. F9运行.程序断在
  
  77D2148C >  8BFF            mov     edi, edi
  77D2148E    55              push    ebp
  77D2148F    8BEC            mov     ebp, esp
  77D21491    83EC 30         sub     esp, 30
  77D21494    8B45 08         mov     eax, [ebp+8]
  
  Alt+F9返回.并稍往上看看结构体 WNDCLASS的成员,就能看到如下:
  
  00408F32  |.  50            push    eax
  00408F33  |.  68 EC594100   push    004159EC                         ;  ASCII "%d-%d"
  00408F38  |.  56            push    esi
  00408F39  |.  E8 FE0F0000   call    00409F3C
  00408F3E  |.  83C4 10       add     esp, 10
  00408F41  |.  8D4424 08     lea     eax, [esp+8]
  00408F45  |.  897424 2C     mov     [esp+2C], esi
  00408F49  |.  8B35 68224100 mov     esi, [<&USER32.RegisterClassA>]  ;  USER32.RegisterClassA
  00408F4F  |.  50            push    eax                              ; /pWndClass
  00408F50  |.  FFD6          call    esi                              ; \RegisterClassA
  00408F52  |.  66:85C0       test    ax, ax
  00408F55  |.  75 08         jnz     short 00408F5F
  00408F57  |.  5F            pop     edi
  
  
  由窗口类名18467-41 及OD 00408F33的注释 ASCII "%d-%d" .猜想就是由两个整数用类似sprintf函数生成类名的. 第一个想法是找到这两个整数在文件中的位置,并修改这个整数值.但很快的想到一个更简单的办法.就是修改"%d-%d",还是用UltraEdit查找"%d-%d",就一处,肯定是这个地方了.我把它修改为%X-%08X.注意儿%X-%08X比%d-%d多两个字符.我是因为看到文件中%d-%d后面有三个0,否则还是为%X-%X好,以免破坏程序不能运行.
  
  
  三 修改由资源中释放出的驱动文件名.
  
  首先确定驱动的文件名.重新载入REGMON,下断BP CreateFileA .F9运行,看到堆栈出现:
  0012F0E4   0040F0F7  /CALL 到 CreateFileA 来自 Regmon.0040F0F1
  0012F0E8   0041829C  |FileName = "C:\WINDOWS\system32\Drivers\REGSYS701.SYS"
  0012F0EC   40000000  |Access = GENERIC_WRITE
  0012F0F0   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  0012F0F4   0012F110  |pSecurity = 0012F110
  0012F0F8   00000002  |Mode = CREATE_ALWAYS
  0012F0FC   00000080  |Attributes = NORMAL
  0012F100   00000000  \hTemplateFile = NULL
  0012F104   0041405E  Regmon.0041405E
  
  
  上面的FileName = "C:\WINDOWS\system32\Drivers\REGSYS701.SYS" 中REGSYS701.SYS就是从资源中释放出来的驱动名(如果先前运行过regmon,OD可能不能在此断下,因为没有再次创建这个文件,重新启动电脑再次调试).
  用UltraEdit查找REGSYS701.SYS,替换为AAAAAAAAA.SYS(共有三处)
  
  
  至此,themida本身即其加过壳的程序都可以用regmon监视了.FILEMON通过同样的方法修改一样通过.

附件是修改过的两个文件,不大就上传了.  
  
  
  
  

【经验总结】
  除了考试没写过文章,现在要改掉懒习惯.写的不对之处请大家谅解.
  

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 303
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢,学习
2006-10-22 01:52
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
3
[quote]  1 - 查找进程。
  2 - 查找窗口(我在某些壳中也发现了这个)。
  3 - 查找注册表中的驱动。
  4 - 查找内存中的驱动。
  5 - 查找驱动的对象表。
  6 - 查找 SDT (只对 regmon)。[/quuote]

不错,学习了。
2006-10-22 09:07
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
4
不错不错
支持下
2006-10-22 09:53
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
最初由 zhuwg 发布
不错不错
支持下
2006-10-22 13:35
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
6
我当然最喜欢用的是第一种办法。简单!

学习到一种方法了、嘻嘻
2006-10-22 21:44
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
Wonderful
2006-10-23 00:22
0
雪    币: 9583
活跃值: (1935)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好文,学习。
2006-10-23 07:50
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
不错
我转贴一下
2006-10-23 09:28
0
雪    币: 441
活跃值: (149)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
最初由 fly 发布
不错
我转贴一下


fly能看上拙帖,真是惊喜呀
2006-10-23 11:23
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
学习学习!
2007-1-23 03:27
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
12
好好学习了
2007-1-23 09:10
0
雪    币: 288
活跃值: (112)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
13
最好把驱动名称也改一下。
这样就彻底了
2007-1-23 16:28
0
雪    币: 4441
活跃值: (805)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
写的很好,谢谢楼主
2007-1-23 22:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我试过了,可是还是逃不过Themida 1.0.0.5
不知道为什么?
2007-2-7 13:05
0
雪    币: 322
活跃值: (56)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
16
不错不错,提供了一种很好的思路
2007-2-8 09:29
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
再把设备名给改了,就更彻底了。
2007-2-8 12:29
0
游客
登录 | 注册 方可回帖
返回
//