-
-
修改regmon/filemon,跳过themida的检测
-
发表于:
2006-10-21 23:57
15352
-
修改regmon/filemon,跳过themida的检测
【文章标题】: 修改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通过同样的方法修改一样通过.
附件是修改过的两个文件,不大就上传了.
【经验总结】
除了考试没写过文章,现在要改掉懒习惯.写的不对之处请大家谅解.
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!