[软件应用] [转]木马免杀原理及教程

2497341O1 发布于2008-12-18 19:24 1212 次浏览 2 位用户参与讨论   [复制分享主题]
免杀是黑客入门的基本知识
' L& k% e* Z2 y) p" c' I首先来简单了解一下杀毒软件查杀病毒的原理,当前杀毒软件对病毒的查杀主要有特征代码法和行为监测法。其中前一个比较方法古老,又分为文件查杀和内存查杀,杀毒软件公
( G4 c2 `% O4 ]  W( U0 ]8 S司拿到病毒的样本以后,定义一段病毒特征码到病毒库中,然后与扫描的文件比对,如果一致则认为是病毒,内存查杀则是载入内存后再比对,第二个比较新,它利用的原理是某1 y0 N: {: M1 L; N  e+ _
些特定的病毒会有某些特定的行为,来监测病毒。# ]& m$ X6 @# r' q: V: Y
免杀常用的工具:$ R& z( S1 i# L6 f- }# V
Ollydbg 调试器简称OD,动态追踪工具     peid 查壳工具   PEditor PE文件头编辑工具 : B6 N/ R) z( ?' d! ~
CCL,伯乐,MYCCL 特征码定位器     oc 地址转换器     reloc 修改EP段地址工具   zeroadd 加区工具   Uedit32 十六进制编辑器   免杀方法* t) t- R) G  j/ R# k- y
2 m5 I: ~$ s  J3 O& J
文件免杀   
( M0 V+ x9 C, F% i; `1.加花   
! v  s' a( a; C1 x% k2.修改文件特征码   
4 b, E3 Y- }# r( C3.加壳   
# D, c; K7 o( g4 C$ D* ~8 }5 ]3 O4.修改加壳后的文件: ~% F3 E6 W" H  G7 J  ?& \' b9 q
1.加花
$ Q- f) v7 |1 d0 J& m$ R. M  加花是文件免杀的常用手段,加花原理就是通过添加花指令(一些垃圾指令,类似加1减1之类废话)让杀毒软件检测不到特征码。加花可以分为加区加花和去头加花。一般加花工
  r/ @9 @) j* ~! i具使用加区加花,当然也是可以手工加的,就是先用zeroadd添加一个区段,然后在新加区段里写入花指令,然后跳转到原入口;去头加花,是先NOP(汇编里的空操作)掉程序的入; n9 b4 G  d* e
口几行,然后找到下方0000区,写入NOP掉的代码和一些花指令,再通过JMP(汇编里的无条件跳转)跳到原入口。加花以后一些杀毒软件就认不出了,但有些比较强悍的杀毒,比
( C. \1 n  n  e- h0 @% u/ }% y如司机大叔(卡巴斯基)可能还是能查出来,这时就要定位特征码然后修改了,要修改首先必须知道特征码在哪里,所以需要先定位特征码,这是个难点,特别是复合特征码的定
' S8 g" [+ _% \" j5 ^5 `) e: [& j位。
% v( A5 J8 m* w4 m2.特征码定位( S1 k  x8 `- c# \
  特征码定位主要有两种方法:第一 直接替换法;第二 二叉数法;: Y5 f, D- q! M; m6 H' a
  第一:直接替换法是最早开始出现的一种特征码定位方法,按一定的字节数逐个替换原代码并保存,比如木马总共100字节,可以先把0-10个字节用0替换,保存,然后用杀毒软
& e: L) x7 k6 W" w( }4 E/ @件扫描,不被查杀说明特征码已经被覆盖掉了,如果还被查杀则替换10-20字节,再保存,扫描……直到找出特征码。替换法的优点是容易理解,速度快(对文件特征码而言),特
$ \6 J: Q6 u0 I& X2 p征码定位工具伯乐以及CCL的手动方式就是利用的替换法原理,文件特征码定位经常使用的就是这种方法。但是对于内存特征码的定位这种方法就不太实用了,每次替换以后都要载1 B4 _# X7 a( X# i' S
入内存再扫描,如果木马较大,替换生成的文件会非常多,每个都要载入内存花费太多时间,除此之外它还有一个非常大的局限性,就是只能确定只有一处特征码的情况(某种特/ M5 [" z; N  M0 M
定情况下的多特征码也是适用的,下面的第3种情况将有讲述),杀毒软件还有别的定位特征码的机制,比如有的杀毒的定义了a,b两处特征码(三处或者更多原理是一样的,为了  |  q. n' L2 M9 D
讲解方便,以下均以两处为例),只要a,b有一个存在便报毒,只有加大替换范围直到两处同时被替换才不报毒,如果两处距离比较远,定义出的范围将非常粗糙,很明显直接替换: ^! {4 R1 J6 ^2 B+ D( `6 h& h
法将不再合适,这时第二种方法就有用武之地了。
3 ~/ V% G) p! ^% h1 N0 b  第二:二叉数法使用的原理是一半一半定位,CCL的自动方式就是运用的这个原理。将待检测段一分为二,分别替换并生成两个文件A和B,其中A是原文件后半部分被0替换后生成4 G1 t* \( d. o  \- R0 h
的,B是前半部分被0替换的,杀毒开始查杀生成文件(如果是内存特征码定位则先载入内存再扫描内存),有4种情况* W# y, h6 k' v+ J
(1)A存在,B被删:这种情况说明A文件中特征码已经被替换掉,因此将A的被替换部分一分为二,起始偏移为A的偏移,再进行检测;6 E' x; h% B4 {2 X1 `1 B" J3 U
(2)A被删,B存在:这种情况说明B文件中特征码已经被替换掉,因此将B的被替换部分一分为二,起始偏移为B的偏移,再进行检测;
/ [* J$ L6 t, s$ I# I. w(3)A存在,B存在:这种情况说明没法定位A和B中有没有特征码,因此分别对A和B再一分为二进行检测;
# h( J! x/ x% t(4)A被删,B被删:这种情况说明两个区段都存在特征码,因此分别对A和B再一分为二进行检测。
( b8 r5 @2 |$ J- R" z8 G& d对A再分时会将原来的B区段填充为0,相当于去除B区段的影响,只考虑A;同理对B再分时会将原来的A区段内容填0,相当于去除A区段的影响,只考虑B。2 P. E2 {2 ~" {, Q3 U
第(1)(2)对应的是只有一处特征码的情况,比较容易理解;
& p5 Z) u& W& E第(3)对应的是定义了a,b两处特征码的情况,但是和前面提到的那种不同,杀毒软件为避免误判,定义了a,b两处特征码,要ab同时存在时才报毒,假设a,b分别存在于A,B中# c' J: m. \+ y1 j3 B- r
,a,b不同时存在,杀毒对A,B均不报警,接下来该如何判断呢?举个例子说明一下
- f. ~) D4 z, B- K+ v木马原来是…a……b…,第一次替换以后A:…a…000000,B:000000…b…,现在ab不同时存在,A,B都不被杀,则分别对A,B再次一分为二,…a……b000,…a…000…,000…+ F! `7 y8 F+ f2 m. ]+ p* Q  t
…b…,…a000…b…,再次扫描就可以找到两处特征码的位置,如果还是不行,再继续分……直到全部找到;其实这种类型的多特征码直接替换也是可以定位的,甚至效果更好,
! ]) o# w+ b; r) R7 G9 @按一定位数替换,然后扫描,只要替换了一个特征码就不再报毒,所以不报毒的便是特征码被覆盖的,不管有几处都可以定位出,而且修改时也只要修改任意一处就可以了。第(4
7 t2 n! \0 K9 q1 ^)种对应的情况也是杀毒定义了多处特征码,就是上面提到的那种情况,只要有一处符合就认定是病毒。还是以a,b两处特征码为例,第一次替换后的结果同(3),两部分分开考
7 Y( i4 _: ]: w- k0 U9 ^) I. f虑,互不影响,相当于分解成两个单个特征码的情况,第二次替换后变成000000…b000,000000…000…,000…000000,…a000000000,依此类推,直到精确定位出所有特征码,
  C; I1 [; D6 u" G如果有N处特征码就相当于分解成N个单特征码来定位,现在N一般小于等于3,这种情况定位出的所有特征码必须全部修改了才能免杀。
1 t  u  z& c" f  y    二叉数法是个很不错的思路,可以解决大部分的问题,但是不是无懈可击呢?回答是否定的!可恶的杀毒软件还有一个杀手锏,就是复合特征码,给我们定位特征码带来了很; E. q- J$ l9 @) I" j7 e2 _
大的麻烦。复合特征码的定位机制是,先定义出N个特征码,只要里面某些同时出现便认为是病毒。举个简单例子说明一下:木马原来是…a1…b1…c1…a2…b2…c2…(a1,a2一样- G2 k& W6 F1 k/ N4 Y
,加标号只是为了后面描述方便),只要abc同时出现就认为是病毒,这该如何定位呢?原理不是很难,也是利用替换再查杀的方法,先从后往前用0替换,替换精度假设为每次替8 Q( r, q; K0 p3 p7 m
换量增加1000字节,开始一直显示是病毒,直到替换到地址13140040(为叙述方便随便说的一个地址)时替换的字节达到15000个,即…a1…b1…00000000,两个c都被替换掉了,
' @( V# @% Z' K, U- ^' e. t此时显示不是病毒,由此可知,特征码c1就在13140040后面1000字节内,减小替换字节数比如改为替换14900字节,即精度改为每次替换减小100字节,还是无毒则减为替换14800字$ h6 G0 R- y3 d# z0 ~% u
节,不断重复……直到精确定位出c1的位置;如果改为从前往后替换,则可以定位出a2的位置;其他特征码的定位可以利用已经定位到的c1,a2,把其中一个用0替换了比如c1,从后% e2 u& ]- ^; j3 K2 R& B/ z; l/ R
往前就可以定位出c2,直到定位出所有特征码,其实原理并不复杂,但是要真正手动操作起来却是非常麻烦的,我们可以利用MYCCL,它用的原理与之类似,具体操作可以看MYCCL的
) B& B$ o" k  H( `9 \( O8 Y操作帮助。还有一种方法更科学,原理是一样,但是替换的字节数不是等量增加的,而是以2的n-1次方增加的,第一次替换1字节,第二次2字节,第三次4字节……减小时也按照这) E! m/ c$ H6 `
种规律,这种替换方法有点类似于二叉数法,可以更快定位出特征码的位置,我想这也是MYCCL在复合特征码定位方面应该改进的地方吧。复合特征码虽好,大家也不用害怕,认为
  X, T' W, y4 _4 f2 @- @8 ?所有杀毒都来个复合特征码我们就要累死了,定义复合特征码需要单个特征码几倍的病毒库,不方便用户的升级,所以除了特别流行的病毒,定义复合特征码的也不是很多。
6 z9 p4 q, h) p' J& u2 n( t7 Q定位特征码有些经验可以告诉大家,文件特征码的定位一般用直接替换法,可以借用CCL的手动定位;内存特征码定位,一般用二叉数法,可以用CCL自动定位。对于EXE文件如果文
: B+ \) G9 W) r; i件较小,可以两种方法结合,先用直接替换法生成,可以用伯乐这个工具(为什么不用CCL呢,因为伯乐生成的是EXE文件可以看出图标的模样),找到还能正常运行的,那些图标/ R3 A' \* ?& ?
都变了的说明PE头已经损坏了,就不要试了,然后载入内存,再扫描内存,如果既能正常运行又不被杀,恭喜你!成功了!定位出了大体范围,再用CCL自动定位,很快就可以完成
7 w( g* h4 N# Z1 ^。如果文件较大,用伯乐生成的文件太多,也不方便,还是用CCL定位,对于DLL文件也只能老老实实用CCL定位了。        
. c( u, Q* J8 ?0 d; x    特征码修改
# Y% ^4 p4 p/ o/ \4 w5 n8 f) L3 n  特征码修改可能需要一点汇编的知识,修改主要有直接修改法和跳转修改法。# q( i3 W+ E/ v1 i( s/ O
直接修改法利用的是等效指令替换,文件地址指二进制文件的实际偏移地址,内存偏移指相对虚拟地址(RVA),一般等于文件偏移地址加基地址,通过定位特征码得出的是实际偏- d) M4 Z% [& u* A( s
移地址,载入内存以后,地址会变化,不再是文件特征码定位时的地址了,所以修改特征码不能忘记把定位出的地址转换为对应内存地址,这里可以借助一个小工具oc.exe确定,
% J5 ^; b9 ^8 H- ~' C4 U4 x然后再进行修改,WinHex,Uedit这类16进制编辑器打开显示的地址是文件地址,而OD这类动态汇编调试工具打开显示则的是内存地址., m! n$ m; J# z' u4 k* G5 Z

' {+ m- Z, O5 d8 Y8 G, L+ x/ D总结:: _4 F  H% f6 D! \
  一般免杀步骤是先定义内存特征码,修改内存特征码,加花指令做文件免杀,如果还被某些杀毒查杀则定义文件特征码,修改特征码,接下来是行为免杀,然后加壳,再修改壳+ @8 b0 ^7 m2 W6 Y7 [/ {, C
。内存免杀一般只要做瑞星的就可以了,其他的杀毒软件没有真正意义上的内存杀毒,比如卡巴斯基的内存扫描就是文件快速扫描,一般加入花指令(稍微学点汇编,折腾些垃圾- |; Y# c! Z" J" T7 b7 }: ^! S9 |. f
代码是很简单的)以后就可以躲过金山,瑞星,江民的文件查杀,万一有不过的就要定位特征码再修改,卡巴的文件查杀是很牛的,加了壳也几乎都能可以查出来,一般都要定位
$ W8 p- e) }% g: Y特征码再修改,对于诺顿这种喜欢把特征码定位在PE头的只要用北斗之类工具加个壳,把PE头改得一塌糊涂(当然也可以手工修改PE头,不过比较麻烦,不容易说清楚,而且需要
, o, L2 c* d7 a) }: b了解一些PE文件的结构知识),它就不认识了,如果还想把免杀做好点,可以把自己的服务和注册表键值改成非系统必须的,那么绿鹰这类行为查杀的笨蛋就成盲人了!要是你是
# k9 a( S7 C5 m/ Y1 t  a  y; |不折不扣完美主义者,可以再修改一下加壳后的文件,把免杀进行到底!

+ O; D; L* F% T; L1 {* ^! X8 z- J+ z- j. B6 c6 d

! N" B6 R) ^  [; |$ Q5 `0 @0 w$ {7 l
几复杂, 不过几有用架`  
( U/ ?% n+ W) I6 N9 v7 x. h8 V" y- M6 _& \" R7 Z7 ?7 s2 k

已有(2)人评论

aubert22 发表于 2008-12-18 20:25:10 | 显示全部楼层
沙发~~
. U  l% J! `! O$ I辛苦LZ按键了--ctrl+c ctrl+v~~
回复 支持 反对

使用道具 举报

Kiver 发表于 2008-12-18 20:25:24 | 显示全部楼层
高深学问8 Q( _) W. w, k  j* L& x6 k4 p! M

% G! h9 n/ G' U% I# A0 Z: j还是交给杀毒厂商处理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 註冊

本版积分规则

快速
回复
返回
列表
返回
顶部