Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.

【转载】【分享】免杀类

Go down

【转载】【分享】免杀类 Empty 【转载】【分享】免杀类

Post by cyjian on December 12th 2014, 09:48

1名词解释
编辑

单从汉语“免杀”的字面意思来理解,可以将其看为一种能使病毒木马避免被杀毒软件查杀的技术。但是不得不客观地说,免杀技术的涉猎面非常广,您可以由此轻松转型为反汇编、逆向工程甚至系统漏洞的发掘等其他顶级黑客技术,由此可见免杀并不简单。[1]
2发展史
编辑

[2] 理论上讲,免杀一定是出现在杀毒软件之后的。而通过杀毒软件的发展史不难知道,第一款杀毒软件kill 1.0是Wish公司1987年推出的,也就是说免杀技术至少是在1989年以后才发展起来的。关于世界免杀技术的历史信息已无从考证,但从国内来讲,免 杀技术的起步可以说是非常晚了。
1989年:第一款杀毒软件Mcafee诞生,标志着反病毒与反查杀时代的到来。
1997年:国内出现了第一个可以自动变异的千面人病毒(Polymorphic/Mutation Virus)。自动变异就是病毒针对杀毒软件的免杀方法之一,但是与免杀手法的定义有出入。
2002年7月31日:国内第一个真正意义上的变种病毒“中国黑客II”出现,它除了具有新的特征之外,还实现了“中国黑客”第一代所未实现的功能,可见这个变种也是病毒编写者自己制造的。
2004年:在黑客圈子内部,免杀技术是由IT工程师之家团队在这一年首先公开提出,由于当时还没有CLL等专用免杀工具,所以一般都使用WinHEX逐字节更改。
2005年1月:大名鼎鼎的免杀工具CCL的软件作者tankaiha在杂志上发表了一篇文章,藉此推广了CCL,从此国内黑客界才有了自己第一个专门用于免杀的工具。
2005年2月-7月:通过各方面有意或无意的宣传,黑客爱好者们开始逐渐重视免杀,在类似于华夏论坛等黑客站点的木马专栏下,开始有越来越多的人讨论免杀技术,这为以后木马免杀的火爆埋下根基。
2005年08月:第一个可查的关于免杀的动画由小野完成,为大量黑客爱好者提供了一个有效的参考,成功地对免杀技术进行了第一次科普。
2005年09月:免杀技术开始真正的火起来。
由上面的信息可见,国内在1997年出现了第一个可以自动变异的千面人病毒,虽然自动变异也可以看为是针对杀毒软件的一种免杀方法,但是由于与免杀手法的定义有出入,所以如果将国内免杀技术起源定位1997年会显得比较牵强。
一直等到2002年7月31日,国内第一个真正意义上的变种病毒“中国黑客II”才迟迟出现,因此我们暂且可以将国内免杀技术的起源定位在2002年7月。
3能做什么
编辑

您有没有过心爱的工具被杀毒软件KILL的经历;您有没有过辛辛苦苦整理出来的工具集被杀毒软件搞成面目全非而“义愤填膺”的时候;您有没有过好不容易拿 到权限,上传的木马却被杀的痛心时刻?免杀,它能做的就是避免这些事情的发生!使杀毒软件成为摆设!当然,除此之外免杀技术带给我们更多的,将是思想的飞 跃与技术的成长。
4涉及什么
编辑

但是要想真正明白免杀能做什么,就要先明白免杀会涉及到什么。对于初学者来说,免杀只会涉及到一点基本的PE文件知识与一些免杀工具的使用,而对于高手来说,免杀甚至会涉及到Ring0(内核层)的程序编译技巧。所以免杀这门课程涵盖面还是相当宽泛的。
5技术分类
编辑

1、开源免杀:指在有病毒、木马源代码的前提下,通过修改源代码进行免杀。
2、手工免杀:指在仅有病毒、木马的可执行文件(.exe)(PE文件)的情况下进行免杀。
6手工分类
编辑

1.文件免杀和查杀:在不运行程序的前提下使用杀毒软件进行对该程序的扫描,所得结果。
2.内存的免杀和查杀:判断的方法1>运行后,用杀毒软件的内存查杀功能。
2>用OD载入,用杀毒软件的内存查杀功能。
7特征码
编辑

1.含意:能识别一个程序是一个病毒的一段不大于64字节的特征串。
2.为了减少误报率,一般杀毒软件会提取多段特征串,这时,我们往往改一处就可达到免杀效果,当然有些杀毒软件要同时改几处才能免杀。
3.下面用一个示意图来具体来了解一下特征码的具体概念。
8定位原理
编辑

1.特征码的查找方法:文件中的特征码被我们填入的数据(比如0)替换了,那杀毒软件就不会报警,以此确定特征码的位置。
2.特征码定位器的工作原理:原文件中部分字节替换为0,然后生成新文件,再根据杀毒软件来检测这些文件的结果判断特征码的位置
9修改工具
编辑

1.CCL(特征码定位器,由于杀软的升级,现已过时)
2.MYCCL(特征码定位器,由程序员Tanknight在CCL的基础上改进)
3.OllyDbg (特征码的修改,可用于动态反汇编。注意:用它修改特征码时,要用OC转换成内存地址)
4.C32ASM(特征码的修改,也可用于静态反汇编)
5.OC(用于计算从文件偏移地址到内存地址的小工具)
6.UltaEdit-32(十六进制编辑器,用于特征码的手工准确定位或修改)
10修改方法
编辑

特征码修改包括文件特征码修改和内存特征码修改,因为这二种特征码的修改方法
是通用的。所以就对流行的特征码修改方法作个总节。
方法一:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.
2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下文件能
否正常使用.
方法二:修改字符串大小写法
1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.
方法三:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.比如JE,JNE 换成JMP等.
如果对汇编不懂的偏移可以去查看8080汇编手册.
方法四:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后必须不能影响程序的正常执行
方法五:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处)执行后,使用jmp指令无条件调回原代码处继续执行下一条指令
2.适用范围:通用的改法,建议大家要掌握这种改法.
11文件免杀方法:
编辑

加冷门壳
举例来说,如果说程序是一张烙饼,那壳就是包装袋,可以让你发现不了包装袋里的东西是什么。比较常见的壳一般容易被杀毒软件识别,所以加壳有时候会使用到 生僻壳,就是不常用的壳。去买口香糖你会发现至少有两层包装,所以壳也可以加多重壳,让杀毒软件看不懂。如果你看到一个袋子上面写着干燥剂、有毒之类的字 你也许就不会对他感兴趣了吧,这就是伪装壳,把一种壳伪装成其他壳,干扰杀毒软件正常的检测。
加壳改壳

加壳改壳是病毒免杀常用的手段之一,加壳改壳原理是将一个木马文件加上upx壳或者其它壳后用lordpe将文件入口点加1,然后将区段字符全部去掉,然 后用od打开免杀的木马在入口上下100字符内修改一些代码让杀毒软件查不出来是什么壳就不知道怎么脱就可以实现免杀的目的,但这种技术只有熟悉汇编语言 的人才会,这种免杀方法高效可以一口气过众多杀软也是免杀爱好者应该学会的一种技术。
加花指令

加花是病毒免杀常用的手段,加花的原理就是通过添加加花指令(一些垃圾指令,类型加1减1之类的无用语句)让杀毒软件检测不到特征码,干扰杀毒软件正常的 检测。加花以后,一些杀毒软件就检测不出来了,但是有些比较强的杀毒软件,病毒还是会被杀的。这可以算是“免杀”技术中最初级的阶段。
改程序入口点

修改程序入口点
5.5种常用方法

(参见“修改内存特征码”)
免杀修改技巧

修改内存特征码:
1.直接修改特征码的十六进制法
2.修改字符串大小写法
3.等价替换法
4.指令顺序调换法
5.通用跳转法·
小结:免杀在某种程度上可以说是杀毒软件的对立面,这种技术随着杀毒软件的升级而升级,
从最初的表面查杀到的木马行为防御(瑞星),文件实时防毒(金山)等等,
免杀技术都将这些绕过,我们可以看到,杀软每增加一个新功能,免杀新技术就应运而生
用一句古语说,免杀技术是与杀毒软件相生相克的。
学习免杀,你将领略到汇编与反汇编的快乐天堂!
4.最新的无特征免杀法
何为无特征免杀法?就是脱离传统的定位方法,直接盲免,就对于整体区段进行异或加密,是整体代码发生变换,从而逃脱,杀毒软件的查杀,是当今最流行的方法。
木马免杀之汇编花指令技巧 

作者: 逆流风
(发表于《黑客X档案》07.07,转载注明出处)
相信很多朋友都做过木马免杀,早期的免杀都是加壳和改特征码,现在免杀技术已经发展到花指令免杀,改壳之类的,而这些需要一定的汇编知识,但是汇编却不是 一块容易啃的骨头,所以我写了这篇菜鸟版的免杀汇编教程,帮助小菜们快速入门,掌握免杀必备的汇编知识,改花指令,改特征码的技巧和编写自己的花指令。
一、免杀必备的汇编知识
push 压栈,栈是一种数据结构,记住四个字:先进后出。压栈就是把数据放如栈中,从栈顶放如,出栈的时候也是从栈顶取出,所以会有先进后出的特点!先进后出我们 可以这样理解,例如:一个乒乓球筒,我们放入乒乓球,然后取出乒乓球,取出的都是就后放进的球。就如我们放入球的顺序是球1、2、3、4,取出的顺序是球 4、3、2、1。
pop 出栈,与push相对应。
mov a,b 把b的值送给a,把它看作编程中的赋值语句就是b赋值给a,这时a的值就是b了。
nop 无作用,就是什么也没做。
retn 从堆栈取得返回地址并跳到该地址执行。
下面是一些算术运算指令:
ADD 加法
sub 减法
inc 加1
dec 减1
最后是跳转指令:
jmp 无条件跳
je 或jz 若相等则跳
jne或jnz 若不相等则跳
jb 若小于则跳
jl 若小于则跳
ja 若大于则跳
jg 若大于则跳
jle 若小于等于则跳
jge 若大于等于则跳
这些就是我们需要掌握的,怎么样不多吧,一些指令可能看不明白,看了后面的就会清楚了。对了,忘了讲寄存器了,寄存器是中央处理器内的其中组成部份。寄存 器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。我们需要了解的是8个通用寄存 器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
二、特征码和花指令的修改
特征码我就不多说了,大家都知道的,现在杀毒软件查杀都用特征码查杀,改了木马的特征码,杀毒软件就查不出我们的木马,这样就达到免杀的效果。而花指令是 程序中的无用代码,程序多它没影响,少了它也能正常运行。加花指令后,杀毒软件对木马静态反汇编使,木马的代码就不会正常显示出来,加大杀毒软件的查杀难 度。花指令的原理是堆栈平衡。前面介绍push说了,堆栈平衡可以这样理解,有进有出,不管花指令怎么写,我们要达到的目的是加花后,堆栈与未加之前一 样。
网上的花指令因为是公布出来的,所以免杀周期不长,一般公布出来不久就会被杀毒软件查杀,但是我们只要简简单单的修改一两句就可以达到免杀了。下面我们来看看5种修改方法。(也适用于特征码修改)
我们先看看木马彩衣(金色鱼锦衣)花指令
1、push ebp
2、mov ebp,esp
3、add esp,-0C
4、add esp,0C
5、mov eax,原入口
6、push eax
7、retn
1、2、在大部分程序开头可以经常看到。push ebp是将寄存器ebp压入堆栈,mov ebp,esp是将寄存器esp的值送给寄存器ebp。3、4、使用了add指令,add esp,-0C是寄存器esp加上-0C,add esp,0C是寄存器esp加上0C,3、4、加起来就是什么也没做,达到堆栈平衡。5、6、7、完成了跳转到入口点的功能,我们一句句来看看mov eax,原入口,将入口点送入寄存器eax,push eax将寄存器eax压入堆栈,retn我们知道是从堆栈取得返回地址并跳到该地址执行。这样就回到入口点了。
我们看看实例,以木马彩衣免杀为例,先侦壳,用peid载入,显示Microsoft Visual Basic 5.0 / 6.0,(如图1)很好,免去了脱壳的麻烦,复制木马彩衣后再粘贴,得到复件 木马彩衣.exe,我们用木马彩衣对复件木马彩衣.exe加花,加金色鱼锦衣,(如图2)然后用Ollydbg.exe载入,我们就可以看到看到金色鱼锦 衣的花指令了。(如图3)用卡巴扫描,被卡巴认出来了。(如图4)这是因为金色鱼锦衣公布比较久,用的人多了,对杀毒软件就无效了。





1、替换法
我们用替换法来修改金色鱼锦衣,修改结果如下:
1、push ebp
2、mov ebp,esp
3、add esp,1
4、add esp,-1
5、mov eax,原入口
6、push eax
7、retn
将原来3、4、句add esp,-0C和add esp,0C改成add esp,1和add esp,-1这两句也能达到堆栈平衡,(如图5)右键选中add esp,-0C,点击汇编,将add esp,-0C改成add esp,1,将add esp,0C改成add esp,-1。选中修改部分,右键单击→复制到可执行文件→选择部分,弹出窗口,右键保存文件。这里我保存成“替换法.exe”用卡巴查杀,免杀了。(如 图6)



2、移位法
1、push ebp
2、mov ebp,esp
3、nop
4、nop
5、add esp,-0C
6、add esp,0C
7、mov eax,原入口
8、push eax
9、retn
将原来的3、4、5、6、7、几个语句向下移动2行,修改后保存为“移位法.exe”。
3、添加法
1、push ebp
2、mov ebp,esp
3、push edx
4、pop edx
5、add esp,-0C
6、add esp,0C
7、mov eax,原入口
8、push eax
9、retn
在金色鱼锦衣中加入push edx和pop edx,这两句是将寄存器edx压入和弹出堆栈,一样达到堆栈平衡。修改后保存成“添加法.exe”。
4、去除法
1、push ebp
2、mov ebp,esp
3、mov eax,原入口
4、push eax
5、retn
删除add esp,-0C和add esp,0C,修改后保存成“去除法.exe”。
5、跳转法
push ebp
mov ebp,esp
jmp 跳出到add esp,-0C的地址
mov eax,复件_木?0040109C
push eax
retn
add esp,-0C
add esp,0C
jmp 跳回mov eax,复件_木?0040109C的地址
这个可能比较复杂,大家看看截图(图7),修改后保存为“跳转法.exe”。


我们用卡巴试试修改后的效果,(如图8)看看,只有原来的木马彩衣,加了金色鱼锦衣的和去除法的可以查到。去除法是因为金色鱼锦衣的代码比较短,如果花指令长点,效果会比较好。几种修改方法结合使用效果更好,当然,一样可修改特征码,相对跳转法在修改特征码中使用比较多。


三、编写自己的花指令
通过上面的学习我们可以知道花指令大概结构,一般开始是push ebp和mov ebp,esp,接下来就是一些能保持堆栈平衡的指令,完了就是跳回入口点了。
我罗列出一些能保持堆栈平衡的代码
push ebp 把基址指针寄存器压入堆栈
pop ebp 把基址指针寄存器弹出堆栈
push eax 把数据寄存器压入堆栈
pop eax 把数据寄存器弹出堆栈
nop 无作用,就是什么也没做
mov eax,eax 将eax送入eax,等于什么也没做
sub eax,1
add eax,1 寄存器eax+1和寄存器eax-1,一样等于什么也没做
sub eax,2
dec eax
dec eax 一样很简单的加减运算,先是寄存器eax+2,紧接着连续用dec指令处理寄存器eax两次,就是-1再-1,达到堆栈平衡。
很简单,大家参考后可以自己写出N多这样的指令。写完这些就可以写跳转语句了。
JMP 入口点 这时最简单的跳转了,无条件跳回入口点,最简单当然效果也最差了
mov eax,入口点
push eax
retn          很眼熟吧,金色鱼锦衣的跳转,解释过,不多说了。
mov eax,入口点
jmp eax       和金色鱼锦衣的跳转的原理差不多吧,入口点压入寄存器eax,再跳到寄存器eax,就是跳到入口点了。
je 入口点
jne 入口点 等于则跳和不等于则跳,合起来就是绝对跳咯,像这样的条件跳转语句很多,大家可参考前面跳转指令的知识自己写。
上面的指令随便结合相信大家可以写出属于自己的花指令了,这样我这篇文章的目的也就达到了。花指令添加的方法大家可以参照去年第9期的主题乐园。

cyjian
Spammer
Spammer

Posts : 211
Points : 37255
Reputation : 0
Join date : 2014-06-18

View user profile

Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum