|
作者:tankaiha[NE365][FCG] http://www.vxer.net/ # B/ J: n V: _4 @
说明:此文写于两个月前,经过这两个月我又有了一些新的体会,以后有机会再介绍。特征码定位器的文章我写了两篇,一篇在1期的黑防上(有录像,较全),这里给出第二篇。因为是介绍,所以挑了最简单的例子(实际情况可能会复杂一些,因为大多数黑器需要修改前要先脱壳,某些插入型后门需要将DLL导出再修改,还有些要处理尾部叠加数据。)有BUG请各位一定指出。 , C* Z) r* @9 r, O
一、 序7 d# @4 y1 p5 z# ?. f; a" Y
杀毒软件检测木马,后门等黑器时,最传统也是最有效的方法之一是特征码比较。越是名气大的黑器越是被追杀的体无完肤。有时候好不易突破了对方防火墙的堵截,想传个心爱的后门过去,可立足未稳就已经被对方的杀毒软件枪毙了。当然,各种加壳软件能在一定程度上减小后门被发现的可能性,但现在杀毒软件自动脱壳的功能越来越强,给文件加壳终究是一种治标不治本的方法。因此,最好还是能从程序本身入手,将特征码找出来并修改掉,就算不加壳也能确保不被查杀。不放心的话,再加个极品壳,来个双保险,岂不爽哉!( p9 r* _6 o, e" c" }
二、 基本原理2 U6 S6 Z* F) {
想要修改特征码就必须先找出它的所在。冰狐兄有篇名为《杀毒软件能奈我何——网络神偷特征码修改实战》的文章介绍了字节替换的原理,总结起来就一句话:如果文件中的特征码被我们填入的数据(比如0)替换了,那杀毒软件就不会报警,以此确定特征码的位置。这个方法简单而有效,但是手动操作起来工作量太大。受作者启发,我编写了个小程序来自动实现特征码定位的功能。
5 B# {( m6 ]% [7 N4 a7 {# j! e( q三、 参数设置和注意事项
& D( i" O, {4 c6 S( R& t9 j# qCCL的原理是将原文件中部分字节替换为0,然后生成新文件,再根据杀毒软件来检测这些文件的结果判断特征码的位置。使用CCL之前应该先设置一下参数,包括操作方式是自动还是手动,生成文件的路径。
4 g$ N" C }/ f) z4 O, \自动操作时,有一个参数很重要,就是每生成一个文件等待的秒数。因为我们要保证杀毒软件在这个几秒钟内对替换过的文件进行了检测,并能删除该文件(如果含特征码的话),然后CCL根据刚才的生成文件是否被删除来决定下面的操作。如果间隔时间过短,杀毒软件没有来得及检测,CCL就进入了下一轮操作,嘿嘿,轻者判断结果出错,重者系统很可能会崩溃的!建议先把时间设大一些,比如7到10秒。5 U _6 |$ _* ?& D! b# Q0 R
应该明确的是,这种检测对已加壳的文件是无效的,因为带壳文件被替换的字节不是原程序的真身,而是加壳后的数据。不多说了,下面进入实战演练!" W4 K, U6 w% ?
四、 实战之一:winshell特征码的自动定位
3 X5 K" [. E+ K7 t铛铛铛!第一个目标是winshell,检测一下,一声刺耳的驴叫,卡巴斯基报警发现了Backdoor.Win32.Winshell.50[见图1] * @) O9 c" p6 s; a! s
 # W: x! B+ r3 V1 I7 E7 V6 i9 z- F
下面让我们利用自动替换功能来定位特征码。首先运行CCL,将参数设为自动,等待时间7秒,最小定位精度设为16个字节。然后关闭杀毒软件即时监测功能(以后均简称为监测),打开待检测文件。成功读入后会弹出PE文件段选择窗口[如图2],这是让用户选择对文件的哪一个部分进行替换。我们双击.text段(这是可执行文件的代码段),然后用户输入区会显示相应数据。我们再点击“添加区段”,就成功地添加了一个待检测区段。当然,你也可以直接在“用户输入区”填入数据然后添加。双击已添加的区段,可以删除任务。
" @; [7 r2 J$ P
D) j4 @* B7 h3 [# w* u, Y! i2 n, C这里有个问题,我们应该选择几个段进行检测呢?最简单的方法是一个都不选,程序会默认对整个文件进行检测。但有时候文件过大,或者你能确定特征码位于某个段中,为了避免替换时间过长,就可以选择特定的范围进行检测。
5 P+ J8 _4 q9 A: D还有一个选项叫“是否填充0”,这个选项的功能是指为了预先排除某些部分的干扰,我们在生成文件中将该部分用0填充。呵呵,举个例说明一下,文件有A、B两处特征码,为了更精确的定义A,我们可以将B所在的段预先填0,然后专门定位A所在的部分。关于填充0的时机,大家在使用过程中会慢慢总结出来的。好了,回到winshell,这里我们选择“不填充0”,也就是正常替换。
, e9 i) d% c/ ]6 l( [我们单击确定,弹出了操作窗口。[见图3]
* ~6 ^& O" n1 b
|