参考书籍:《木马攻防全攻略》 --万立夫编著 --电脑报电子音像出版社
参考链接:https://www.52pojie.cn/thread-32064-1-1.html
推荐的免杀思路链接:http://www.cnhonkerarmy.com/thread-187791-1-1.html
http://www.cnhonkerarmy.com/forum.php?fromuid=964594&mod=viewthread&tid=224610
本篇文章只对主机木马进行基础的描述,脚本木马,一句话等网马不做描述
现在进入正题
一、杀软原理基础
杀软一般由扫描器、病毒库与虚拟机组成,并由主程序将他们结为一体,扫描器是杀软的核心,用于分析发现病毒。一款杀软的杀毒效果直接取决于他的扫描器编译技术是否先进,而且杀软的不同功能往往对应着不同的扫描器,也就是说大多数杀毒软件是由多个扫描器组成的
而病毒库存储的特征码形式则取决于扫描器采用哪种扫描技术,它里面存储着很多病毒独一无二的特征字符,称之为“特征码”,特征码总的来分只有两个:文件特征码与内存特征码。文件特征码存在于一些未执行的文件里,而内存特征码仅仅存在于内存中已运行的应用程序,而虚拟机则可以使病毒在一个由杀软构建的虚拟环境中运行,与现实的CPU、硬盘等安全隔离,从而更加深入的检测文件的安全性
二、基于文件扫描的杀毒技术
基于文件的杀毒技术可以分为“第一代扫描技术”、“第二代扫描技术”与“算法扫描”这三种方法,对于免杀爱好者来说,要对每一种方法烂熟于心,才能成为高手!但做为一个初学者来说了解一下即可。这里我们就简单介绍一下其中两种种方法,详细的技术原理如果各位得这有兴趣的话可以自己研究。
1、通配符扫描技术
通配符扫描技术属于是第一代扫描技术的一个分支,对于“通配符”,可以理解为具有一定意义的符号,例如DOS命令里的*号就是任意长度的任意字符的意思,而且通配符在不同的领域也里可以代表不同的意思。
现在杀毒软件中简单的扫描器常常支持通配符,因为鉴于字符串扫描技术的执行速度与特征码长度限制等问题,使得其逐渐退出历史舞台,取而代之的是通配符扫描技术,通配符扫描技术以同样简单的原理与技术却实现了更为强大的功能。
扫描器中的通配符一般用于跳过某些字节或字节范围,以至于现在有些扫描器还支持正则表达式!
下面我们通过一个例子来讲解通配符扫描技术的原理。
例如我们的病毒库中有这样一段特征码:
0400 B801 020E 07BB ??02 %3 33C9 8BD1 419C
上面的特征码可以解释为:
1、尝试匹配04,如果找到则继续,否则跳出。
2、尝试上一匹配目标后匹配00,如果找到则继续,否则跳出。
3、尝试上一匹配目标后匹配B8,如果找到则继续,否则跳出。
4、尝试上一匹配目标后匹配01,如果找到则继续,否则跳出。
5、尝试上一匹配目标后匹配02,如果找到则继续,否则跳出。
6、尝试上一匹配目标后匹配0E,如果找到则继续,否则跳出。
7、尝试上一匹配目标后匹配07,如果找到则继续,否则跳出。
8、尝试上一匹配目标后匹配BB,如果找到则继续,否则跳出。
9、忽略此字节。
10、尝试上一匹配目标后匹配02,如果找到则继续,否则跳出。
11、在接下来的3个位置(字节)中尝试匹配33,如果找到则继续,否则跳出。
12、尝试上一匹配目标后匹配C9,如果找到则继续,否则跳出。
13、尝试上一匹配目标后匹配8B,如果找到则继续,否则跳出。
14、尝试上一匹配目标后匹配D1,如果找到则继续,否则跳出。
15、尝试上一匹配目标后匹配41,如果找到则继续,否则跳出。
16、尝试上一匹配目标后匹配9C,如果找到则继续,否则跳出。
这种扫描技术通常支持半字节匹配,这样可以更精确地匹配特征码,一些早期的加密病毒用这种方法都比较容易检测出来。
其实现在的一些特征码仍然在使用类似此种方法的特征码表达技术,因此掌握这些知识会对我们以后的免杀有所帮助,同样可以使我们在定位特征码时更加了解自己正在做什么,以及做的是否正确等等,这对于我们来说非常重要。
2、智能扫描
智能扫描属于第二代扫描技术的一个分支,这种方法是在一种病毒变异工具包出现之后提出的。智能扫描法会忽略检测文件中象NOP这样的无意义指令。而对于文本格式的脚本病毒或宏病毒,则可以替换掉多余的例如空格、换行符或制表符等空白字符,这一切替换动作在扫描缓冲区就会执行,从而大大提高了扫描器的检测能力。
3、近似精确识别法
近似精确识别法同样是属于第二代扫描技术的一个分支,但是相比起来应用的更为广泛,这种扫描技术包含了两种方式与若干种方法,在这里不可能一一介绍,下面将主要介绍两种方法的代表。
方法一:多套特征码
该方法采用两个或更多个字符串集来检测每个病毒,如果扫描器检测到其中一个特征符合,那么就会警告发现变种,但并不会执行下一步操作(例如清除病毒体或删除文件)。如果多个特征码全部符合,则报警发现病毒,并执行下一步操作。
方法二:效验和
对于校验和,也许有些朋友会想到文件校验和比对的方法,这个方法的思路是将每一个无毒的文件生成一个校验和,等待下次扫描时在进行简单的校验和比对即可,如果校验和有所变化,在进行进一步的扫描,这样有利于提升扫描器的效率,但是严格地说,这并不算是扫描技术。
效验和扫描技术利用的最为到位的就是比较出名的KAV(卡巴斯基)了,它的第二代扫描器就采用了密码效验和技术,并且没有使用任何搜索字符串技术。关于效验和是一个复杂的概念,简单的说就是通过对病毒中的某一段代码的计算,从而得出一个值(例如123XY4),与MD5加密有些相似,当然这样说不完全正确。
但KAV采用的是一种由卡巴斯基发明的一种叫做密码效验和的特殊算法,这种算法通常会产生两个值。而且病毒库的查询采用了特征码分类思想,例如扫描EXE文件时只调用与EXE文件有关的病毒库,而根据EXE文件的位置不同(例如文件头、入口点)又分为不同的子库,这样有利于提高扫描速度。
由此得出的一些经验:
首先我们应该明白第一个例子介绍的通配符“0400 B801 020E 07BB ??02 %3 33C9 8BD1 419C”代表的肯定不是一个字节。也就是说,杀毒软件厂商定位的特征一般都是数十字节,所以我们定位特征码时就要避免定位过于精确,一般保证在10字节以内就足够了!因为如果特征码定位的过于精确,会为我们以后的修改操作带来很大不必要的麻烦。我们可以简单的想一下,是修改一个字节的方法多,还是修改10字节的方法多?
而由智能扫描我们也可以得出一个结论,就是不要将杀毒软件想的太傻,例如属于智能扫描的一个分支——启发式扫描,它会将一些异常改动计算到可能性的“权值”里,如果一个文件的可疑改动过多,就会导致报毒,这样我们所做的一些工作就起到了相反的作用,是典型的画蛇添足。所以,修改木马文件时也要掌握一个度的问题,不要修改的过多,但还要保证自己的木马免杀时间够长,这就要明白那些更改会被归为可疑修改,而那些则不会。但是掌握这些是需要一定的PE文件结构基础知识的,对于PE文件,我会在下篇文章详细介绍。
而最后的就是卡巴斯基的密码校验和扫描技术了,恐怕这在业内也是第一次提出来,各位看官有福了!
对于密码校验和的更深层次的知识,这里我们不再细谈,我们只谈他对免杀带来什么样的影响。首先,特殊的扫描方法必然会导致特殊的特征码,所以密码校验和的真正特征码通常体积都比较大,通过脚本木马的一些实验,卡巴斯基7.0对字母的大小写不是很敏感,此外对文件代码的变动也不是很敏感。也就是说,只要包含特征码的这行代码在卡巴斯基的校验和取样范围之内,那么它就会报毒,而如果你将其移出这个范围,那么肯定会导致文件不能正常运行,唯一的办法就是更改代码结构。
如果大家注意总结与思考,会发现一些免杀方面的模糊概念完全可以用本文介绍的知识解释通,例如什么“隐含特征码”等等。
三、认识壳
计算机软件里有一段程序代码,专门负责保护软件不被非法修改或反编译。他们一般都是先于程序运行,拿到控制权后完成保护软件的任务
壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳、加密壳两种。顾名思义,压缩壳只是为了减少程序体积对资源进行压缩,而加密壳也就是常说的猛壳,他对程序输入表等内容进行加密保护、具有良好的保护效果
四、壳的变异操作
因为壳的更新并不会很频繁,各大知名的壳子特征码都已经被各大厂商收集到了,所以通过正常加一层壳就达到免杀的效果是不现实的,所以黑客在进行加壳免杀的时候,经常使用一些不常见的生僻壳,或者选择一些加密程度较高的猛壳,如果找不到这些壳应该怎么办?黑客采用的方法就是在其他壳原有的基础上进行修改
我们可以将一些可以替换的汇编指令进行替换:如有时push 40E14F 替换为 jmp 40E14F,或者sub esi 25 替换成 sbb esi 25等等一系列可替换的操作进行改变这样就有可能会改变一些特征码,躲避杀软的查杀,之后运行注册机编写器KeyMark等工具,将修改前和修改后的文件放入里面,制作注册机(免杀补丁)
或者使用现成补丁:例如NsPack 3.7免杀补丁 (北斗的免杀补丁)
五、多重加壳
多重加壳的意思就是在文件加了一层壳之后再进行加壳处理。理论上整个操作过程非常简单,但是连续进行多次加壳操作时会出现错误
之所以出现这样的的情况,是因为在加壳后没对文件的资源进行重建,所以就会出现加壳失败的问题,我们可以使用工具来解决这个问题,如FreeRes
FreeRes不是脱壳工具,却能分析被压缩的资源。正因为它不是脱壳工具,所以不用受制于加壳工具的版本问题,并且同样也不受制于文件是被何种加壳工具压缩的,他能百分百分析被压缩的资源,对于被加壳压缩的软件,FreeRes还能为他重新建立起一份可编辑的资源,使其他资源编辑工具能正常的处理加壳过的软件
六、壳中改籽技巧
主要依赖的是reloc这款工具
主要格式为:
reloc 程序名 入口地址 文件偏移 区段入口 区段偏移 参数
这种方式可以配合多种免杀技术来欺骗杀软
七、花指令
概念:所谓花指令,其实就是一些程序中的无用代码或垃圾代码。有了这些代码程序照样正常运行,没有这些代码也不会影响程序的正常运行。对于程序来说画质零属于可有可无的范畴。其实花指令就是几句汇编指令的集合,让汇编指令进行一些代码的跳转或颠倒。这样杀软从头至尾查找病毒代码的时候,因为代码的跳转或颠倒就很难找到病毒代码,从而加大了杀毒软件查杀病毒文件的难度
相关的工具有不少:如超级加花器,怒剑狂花,花花添加器等
修改旧花指令
虽然利用线程的工具来添加花指令是不错的方法,但是很快也会被杀毒软件识破,为了不让杀毒软件查杀花指令,黑客往往是自己编写花指令,或对已知的花指令进行变异花指令的变异有两种常用的方式。第一是对网络中公布的花指令进行修改,再通过OD这样的人汇编程序将花指令添加到程序之中。第二是通过网络中公布的花指令添加器,将旧的花指令代码添加到程序之中后,再通过程序OD对添加的花指令进行修改,它有四种方法:1、替换法 2、添加法 3、排序法 4、移除法
有一种工具可以进行花指令的生成,叫做:花指令生成器
添加新花指令有两种方法:
1、工具添加:超级加花器等等,不做解释
2、手工添加:由于花指令是添加到程序文件的间隙之中,而有的程序文件的间隙又非常小,比如某些专班的灰鸽子木马,如果直接加花的话,程序文件运行就会出现错误。所以首先需要对免杀程序添加一段00区域,可以用zeroadd这款工具,之后就是简单的添加保存
八、分析查找木马特征码
虽然现在杀毒软件已经加入了包括主动防御、启发式杀毒等方法,但是传统的特征码杀毒依然在使用。因此要想使文件得到免杀,修改文件中的特征码也是一种常用的方法
何谓特征码:
所谓的特征码其实可以理解为病毒的指纹,当杀毒软件公司收集到一个新的病毒时,他们就会从这个病毒程序中截取一小段独一无二且足以表示这是病毒的二进制程序代码,以此当作查杀程序辨认此病毒的一句,也就是说当杀毒软件在检查一个软件时如果发现里面含有已截取到的某种病毒的特征码,就会把这个软件认定为病毒
分析文件特征码:
通过工具MYCCL将其进行分块,然后杀软分别查杀每个块,然后单击二次处理,这可能不是一次,之后确定大致范围,之后把每个块的大小调大,将其定位出来
修改文件特征码:
有五种方法:1、填充法 2、替换法 3、排序法 4、跳转法 5、就近法
关键字分析修改:
除了特征码以外,很多文件自带的关键字也成为判断的依据,尤其是很多专杀工具都是根据关键字进行判断的。因此对关键字ide修改也非常重要,关键字的修改常常使用填充、替换、大小写更换等多种方法
可以利用工具C32Asm打开服务端文件来进行关键字的分析搜索与修改
关键字分析修改可以用00数据来进行填充,但是有的地方不能,这时我们可以将关键字进行大小写转换,可能会骗过杀软
内存特征码分析也可以通过MYCCL以及CCL来进行分块查找
九、PE文件头的分析修改
PE文件头是PE文件的非常重要的部分,因此很多杀毒软件都从PE文件头里提取特征码,为此,就必须对这部分内容进行修改。
方法:(这些方法进行修改完后一定要对其进行测试,不论它是否可运行还是是否可以过杀软)
1、文件头变异
任何的免杀操作都是越简单越好,因此修改PE文件头也是这样。好在修改PE文件头的工具有很多,包括PE头修改器,PE头变异,PE伪装器等
2、文件头加一
首先运行修改程序PEditor,然后对“入口点”这个信息+1,这里需要特别注意的是用这个软件修改了文件头后,会在程序中加入一段介绍PEditor软件汉化的相关信息,而现在很多杀毒软件都将这段信息定位为热证吗,因此我们还要用16进制编辑器将那段特征信息填充为00
3、文件头加密
通过VMProtect等工具对文件进行加密,也是非常常见的一种文件免杀方法。VMProtect利用虚拟机来保护代码,可以对文件的特征码内容加密,当然也可以对PE文件头的内容进行加密操作
4、调转文件头
调转文件头就是将文件头的位置从现在的位置跳转到其他的位置,让原来的位置填充为空白,整个操作过程和修改特征码中的替换法非常的相似
由于文件头进行了修改,因此文件中的入口点也可以修改,修改的方法同样包括两种:
一是使用原来的入口点(将原来的入口点加入nop加上跳转,来实现程序的载入)
二是使用新的入口点
5、移动文件头
如果上面的方法都还不能免杀,那么就只有进行文件头的移动操作。这种方法可以同时对多款杀软起到免杀效果,进一步起到保护作用
步骤:
首先运行PEClean清除PE文件头垃圾
然后可以复制整个PE头粘贴到原PE头的上面,重新改变下PE头里面的关于PE头大小的值,然后可以将没用的原来的PE头nop掉
十、输入表内容分析修改
我们知道,在大型软件中有很多dll文件,他们被称为“动态链接库文件”,这些问就按中含有很多的导入函数,导入函数恕不能被直接执行的。当一个EXE主程序在运行的时候。他会调用DLL文件中的导入函数,当然执行的代码也是在DLL文件中提取的。那么EXE主程序是如何调用DLL文件中的导入函数呢?这就要归功于输入表了。输入表就相当于EXE文件与DLL文件沟通的桥梁
重建输入表:可以用ImportREC
转移函数名称:先用十六进制编辑工具将函数名称nop掉,然后在一个新地址重新写入该函数名称,最后通过lordpe将函数入口点改变
十一、附加数据
很多人都会遇上一种非常奇怪的现象,就是木马文件命名已经免杀成功了,可是当安装到远程系统以后却被立即杀掉。这样的情况让人百思不得其解
为什么经本地测试成功的木马在远程系统中就失效了呢?其实这主要是附加数据在捣鬼。那什么是附加书记?对于木马后门程序来说,附加书记主要都是一些配置信息,比图木马程序的连接地址、链接端口、连接密码等。这些数据被木马后门作者通过一定规律惊醒编码后,在创建服务端的时候被植入到程序的特定位置。而这些坚弥猴的附加数据,又有好多有规律性的数据信息,因此杀毒软件利用广谱就可以轻易地将木马识破
当我们找到这段类似特征码的加密后的附加数据后,可以通过大小写转换的方式来进行附加数据的免杀
十二、修改木马关键字符串
经过前面的学习,我们知道现在很多杀毒软件都是将程序中的某些字符串提取为特征码。对于英文的字符串,黑客常常通过改变大小写的方式来免杀。但是这种方法并不是对任何杀毒软件都有效,此外,如果是中文字符串或者其他内容的字符串,又应当如何设置呢?
有两种方法可以解决这个问题:
调换字符串
替代字符串:有的文件中的数据被填充就不能使用了,比如灰鸽子木马了用IE浏览器进行启动,这里就不能将IE浏览器的进程信息进行替换,此时就只能进行关键字的替换
十三、木马突破主动防御的手段
所谓主动防御其实是针对传统的“特征码”技术而言的。说到主动防御就必须要提到HIPS(Host Intrusion Prevent System,即“主机入侵防御系统”)。HIPS是一种监控软件,他能监控到用户电脑中哪些程序在调用文件,哪些程序对注册表进行了修改,HIPS不仅能监控到实时情况,而且还会向用户报告请求允许通过的程序,如果用户阻止了,那么该程序将无法被运行或者被更改。
HIPS并不能称为防火墙最多只能叫做系统防火墙,他不能阻止网络黑客的攻击行为,它有别于传统意义上的网络防火墙NIPS。二者虽然都是防火墙,但是在功能上还是有很大区别的,传统的网络防火墙只有在用户使用网络时能够用上,通过特定的网络协议来限定用户访问某一IP地址,或者也可以限制互联网用户访问个人用户和服务器终端,在不联网的情况下是没有什么用处的。而系统防火墙是限制诸如a进程调用b进程,或者进制更改或者添加注册表文件
主动防御做法:
1、创立动态反毒系统
对病毒行为规律分析、归纳、总结、并结合反病毒专家判定病毒的经验,提炼成病毒识别规则知识库。模拟专家发现新病毒的机理,通过对各种程序动作的自动监视,自动分析程序动作之间的逻辑关系,综合应用病毒识别规则知识,实现自动判定新病毒,达到主动防御的目的。
2、自动准确判定病毒
HIPS就像分布自强操作系统的众多探针,动态监视着程序调用接口(API)的动作,它能自动分析程序动作之间的逻辑关系,并判定程序行为的合法性,从而是新自动诊断新病毒。HIPS有效克服了当前安全技术仅凭单一动作,就频繁询问是否修改注册表或网络的弊病,让用户不再为难以自行判断,误判等操作而烦恼
3、程序行为监控并举
在全面监视程序运行的同时,HIPS会自主分析程序行为,当发现新病毒后,它会自动阻止病毒行为并终止病毒程序运行,自动清除病毒,并自动修复注册表
4、自动实现多重防护
HIPS有效克服特征值扫描技术滞后于病毒出现的缺陷,发现新病毒后它会自动提取病毒特征值,并自动给恒心本地未知特征库,实现“捕获、分析、升级”一体化,有利于对此后同一个病毒快速检测,使用户系统得到安全高效的多重防护
突破方法:
1、想办法结束杀软进程(可行性很低)
2、附加到正常应用程序身上来假装自己是个正常程序
3、捆绑程序
十四、反调试躲过杀毒软件
初学者编写的程序往往不太稳定。但是熟悉了windows SEH原理后,在编写相应的软件,就不会在弹出警告框了。此外,SEH还被广泛应用于反跟踪那个以及加解密中,因此黑客利用它来进行免杀就是顺理成章的事情了
SEH,全称为Structured Exception Handling,即结构化异常处理,是windows操作系统提供给程序设计者处理程序错误和异常的一种服务
本质上只不过是对Windows内在提供的结构化异常处理的包装,不用这些高级语言编译器所提供的包装照样可以利用系统提供的强大SEH处理功能。在编译器的SEH层减少直接使用纯操作系统的SEH所带来的危害的同时,也将纯操作系统的SEH从人们的面前隐藏了起来。但是程序遇到SEH异常时,异常会交给系统处理,所以利用SEH异常可以一定程度的防止程序被调试
SEH加花操作:
通过利用一段SEH代码可以防止程序进行追踪,并跳到相应的地址继续执行。当杀毒软件在分析程序文件的时候,程序中的SEH代码就会阻止杀毒软件的分析,这样的程序也就躲过了杀毒软件分析判断,我们可以通过SEH代码来进行加花操作,其实整个的加密过程还是非常简单的,只不过使用SEH异常代码替换掉以前的花指令代码而已
十五、SYS文件的免杀技巧
随着全新版杀毒软件的推出,主动防御一时成为火热的卖点。于是木马程序的免杀已经由传统的文件表面和内存免杀,上升到突破杀毒软件的主动防御。随着很多自带突破主动防御功能木马的推出,主动防御好像已经不是什么问题了,可是新的问题又摆在了黑客的面前,那就是在突破主动防御时起到关键作用的SYS文件,他又是怎样免杀的呢?
以我的看法,之前的技术结合在一起可以很大部分解决这个问题:
1、修改特征码
2、调整特征码
3、修改文件头
4、加壳处理
--本文章只做学习交流使用,纯粹交流技术