-
-
修改regmon/filemon,跳过themida的检测
-
发表于:
2006-10-21 23:57
15495
-
修改regmon/filemon,跳过themida的检测
【文章标题】: 修改regmon.filemon,跳过themida的检测
【文章作者】: rockhard
【作者邮箱】: wnh1@sohu.com
【软件名称】: regmon/filemon
【下载地址】: 769K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4&6M7$3W2F1N6r3g2J5L8X3q4D9M7#2)9J5k6h3y4G2L8g2)9J5c8W2g2@1K9h3I4A6N6r3W2W2M7#2)9J5c8W2u0W2k6$3#2G2L8W2)9J5k6h3S2@1L8h3H3`.
【加壳方式】: 无
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【详细过程】
在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:883K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4&6M7$3W2F1N6r3g2J5L8X3q4D9M7#2)9J5k6h3y4G2L8g2)9J5k6g2!0q4y4#2)9&6y4q4!0m8z5q4g2D9N6s2u0S2c8h3c8A6N6q4!0q4y4W2)9^5z5g2)9&6x3#2!0q4y4g2!0n7b7#2)9^5x3s2u0W2k6$3#2G2L8W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4W2)9&6c8W2!0m8y4g2!0q4y4W2)9^5z5g2!0n7c8f1q4e0b7@1W2u0i4@1f1@1i4@1t1^5i4@1t1J5i4@1g2r3i4@1u0o6i4K6W2m8"registry monitor -" 共有两处,把整个串改为Registri Moniter - Sysexternals: 8d3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4&6M7$3W2F1N6r3g2J5L8X3q4D9M7#2)9J5k6h3y4G2L8g2)9J5k6g2!0q4y4W2)9^5z5q4)9&6y4W2!0q4z5q4)9^5x3q4)9^5y4g2!0q4y4g2)9^5y4g2!0n7y4W2!0q4y4g2!0m8c8g2)9^5x3#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4q4!0n7b7W2)9^5x3q4!0q4y4q4!0n7z5g2)9^5z5q4!0q4y4#2)9&6b7g2)9^5y4q4)9J5k6g2!0q4z5q4!0m8c8g2!0m8z5i4c8Z5k6h3#2A6k6r3q4Q4c8e0c8Q4b7V1u0Q4z5p5g2Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8e0c8Q4b7U0S2Q4b7U0u0Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4z5o6S2Q4b7e0c8Q4c8e0k6Q4z5e0k6Q4b7f1c8Q4c8e0g2Q4b7e0c8Q4b7U0q4Q4c8e0k6Q4z5e0g2Q4z5o6S2Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4x3X3f1`.
二 修改主窗口的类名.
用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通过同样的方法修改一样通过.
附件是修改过的两个文件,不大就上传了.

【经验总结】
除了考试没写过文章,现在要改掉懒习惯.写的不对之处请大家谅解.
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课