杀毒软件原理进阶阶段

学习免杀,首先你得学会汇编吧,基础的指令要懂得一些,一般的指令修改必须会,一般的修改这里就不赘述了,接下来就是掌握一些常用的免杀技巧,这里总结一些。


第一:我们学习免杀的方向:只是为了保护自己的黑软的话!就不会学的那么累(没必去学汇编编程)有时候简单加下壳或者脱下壳就OK!如果是要挑战世界的杀 毒软件的话,毕竟每个PC用户安装的杀软都不一样!想抓鸡拿服务器的朋友就要进修脱壳破解,高级汇编的内容了,这将决定你免杀技术的高低!


第二:免杀的环境:做免杀,逃不了测试这个木马是不是修改成功!所以为了保护自己的系统,我建议学免杀要先学会使用虚拟机,很多人会说,为什么不用影子? 影子系统虽然也是可以保护的,占用资源又少,但是有些反弹型木马,我们运行后如果失败(即使成功)都需要重启来完成完全清除的工作!做过QQ盗号木马跟黑 鹰远控软件免杀的朋友应该深有体会!


第三:杀软的安装设置:个人建议安装卡巴,NOD32,小红伞,瑞星,金山!(当然配置好的电脑可以再加上江民,麦咖啡)!硬盘大的朋友建议全利用虚拟机 安装杀软(方便以后重做系统,节省升级病毒库的时间)杀软的设置,可以说是很简单的!每安装完一个杀软,我们都要先在杀软设置里把监控跟自我保护的选项的 钩去掉!然后升级病毒库!升级完后再关闭服务跟启动项(利用360安全卫士)这样安装其他的杀软就不会起冲突了!这里注意下!瑞星升级后会自己更改自己的 服务为自动,所以瑞星建议最后装,最后升级,再关闭它的服务!这里我想大家肯定是关心杀软的序列号从哪来的吧!瑞星有体验版,金山有37天试用 版,NOD32利用PPLOVE网络电视有180天试用!卡巴等洋货在百度上搜索均有可用的序列号!这个就是考验大家的细心了!呵呵!卡巴不建议装 6.0.7.0的,人家都在央视打广告了,我们就装2009把!(虽然卡巴的启发比不上 NOD32的,但是它的主动可是免杀爱好者的“粉丝”)


杀软的查杀特点:


卡巴:主动+高启发扫描,效果相当厉害,卡巴的主动非常麻烦,SSDT也被封了,启发式也极难通过,还是要取决于木马本身的实力了,

瑞星:国内木马的超级对手可以这么说!对国内的木马定位的特征是洋货的N倍(鸽子见证)主要查杀技术是内存查杀技术,但是对一些生僻的木马,内存病毒库里 竟然没有,只要过了表面就可以过内存……主动主杀敏感字符串,不过2009的主动貌似改进了不少……广告卖的倒不错,但是只是针对流行木 马!其他不常见木马并没有加大什么强度!

NOD32:启发扫描的头领!主杀输入表函数,针对MYCCL做过调整!定位建议用 multiCCL这个来定位!不过这个大块头对生僻壳的侦壳能力不强!加些生僻壳把一些函数保护起来可以让它无用武之地!(这类壳主要是加密型,不建议用压缩型

金山:数据流查杀技术的代表!简单来说跟瑞星内存查杀技术有点一样!病毒库升级,查杀病毒速度都是超级快!但是杀毒能力比较上面的几款有点逊色!

360与金山清理专家:行为查杀的代表,金山清理专家比360查杀力度还大!但是监控能力……实在不想说!不过360的5.0版加了木马云查杀,据说不是很好过(没试过~)


以上可以说是所有集合杀软的特点:文件查杀,内存查杀,启发查杀,数据流查杀!行为查杀!主动防御!每个杀软都有自己的特点,一个人也不可能把全球杀软都 安装起来研究,但是以上4个杀软跟一个辅助可以说全包括了病毒查杀特点!也不能说哪个不好,哪个很好!有些木马这个杀软杀不出来~~那个就可以杀出来!所 以对于现在网上有些朋友对个别杀毒软件不重视,就会导致你所谓的“肉鸡”插翅难飞!嘻嘻!


接下来就说说技巧方面的
1.字符串上我们比如这个特征码定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion \Run,遇到这个我想大家一定是修改大小写吧,但是有时候修改大小写还是被杀。这个我们可以怎么办呢,我们可以移动位置,因为这个肯定是一个api函数 的参数,我们找到那个函数然后修改下调用地址就行了。所以有时候大家不能总用通用方法,要学会变通。


2.NOD32的疑问,前天有人来问我他说它定位NOD32,定位到了资源上,这个有一个可能是你的定位有错误。这个你可以通过multiccl把资源和 输入表段保护起来,然后定位,看可以定位出其他的特征码不能,至于MYCCL,一般的定位最好在代码段开始定位,填充可以选择FF,66什么的,或者反向 定位,定位的方法很多的,别人填充00,你就填充00么,现在的杀软已经把myccl扒的一干二净了,有反定位措施…


3.花指令 花指令无非是一些干扰程序调试的一些手段,当然也可以作为用来迷惑杀毒软件使杀毒软件找不到我们的特征码,从而达到免杀。为什么大家总是喜欢用网上的一些 什么花指令方法。其实我发现其实多调用一些子程序,多加一些跳转,要比你们写花指令要好的多。不过本人不推荐使用花指令免杀.


4.为什么我服务端做了免杀,可是生成出来被杀。这个大家首先可以对比一下有什么不同的地方,这个我给大家一个思路,现在杀毒软件就喜欢定位有标志型意义的 地方(通俗点讲版权信息),大家在做的时候因为为了保护我们的木马,所以就委屈下原作者,呵呵。版权信息给改了。还有一个就是比如说灰鸽子,现在杀软会定 位到它的一些dll文件名上,你修改完dll然后找到调用dll文件的函数,然后修改下参数即可。。。。

高强度花指令–SEH
SEH是WINDOWS系统中处理计算机异常行为的一种方式,这种方式的特点就是用入栈的方式把断点保存起来,所以他的效率很高,往往能够处理很多的异常状态。在免杀中我们可以通过它给木马加花,让他“错误”地跳到入口点。
奉上汇编代码如下:

push 原入口点 -OEP
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
mov ebx,0
div ebx



这样混淆的强度就很大了,其实还有很多这样的方法,自己漫漫研究把。。
小鱼和Medusa的免杀技巧

  1. 遇到特征码定位在jmp指令上面的 构造替换 push xxxxx ret。
    举例: jmp xxxxx
    构造替换 push xxxxx
    ret
  2. 遇到特征码定位在call指令上的。
    举例:
    call xxxxx
    构造替换: push @f
    jmp xxxxx
    @@:
    ;@@的标号表示的是你jmp xxxx指令后面的内存地址。 @f也就是引用@@ 的标号,所以此时@f这里填写的就是jmp xxxxx指令后面的内存地址。。
  3. 遇到特征码定位在ret上
    举例: ret
    构造替换:
    jmp dword ptr [esp]
  4. 遇到特征码定位在test eax, eax je xxxx or eax, eax, je xxxxx cmp eax, 0 jexxxxxx
    举例: test eax, eax
    je xxxxxx
    构造替换: xchg eax, ecx
    jecxz xxxxx
  5. 遇到特征码定位在 push [xxxxxx]上的。
    举例:push [xxxxx]
    构造:
    在其之前通过 xchg [xxxxxx], ebx
    然后用寄存器传参: push ebx
    最后在下面在通过xchg [xxxxxx], ebx 交换回来。
  6. 数据段动态恢复和巧用算法加密结合起来。
    前提是对汇编大家一定要有所了解,例如一些人说金山杀的是配置信息上,你完全可以将其这些配置信息所处的地址的数据进行一层加密。或者你可以将其这些偏移所处的数据 通过xchg 交换。
    dll注意下 要进行重定位
    call $+5 ;机器码是 E8 00000000 00000000是相对地址
    @@: pop ebx
    sub ebx, @b
    下面你就可以通过[ebx+你的偏移]来进行变址寻址了。。
    test eax,eax
    je xxxxxx
    将test eax,eax nop掉,改je为jb
    或将两句nop掉
    test eax,eax
    jnz xxxxxx
    将两句nop掉
    mov ebx,xxxxxx
    mov ebp,eax
    双mov可以上下调换
    add edx, dword ptr [ebp+6E]
    imul esi, dword ptr [edi+ebx*2+44], 614D6C6C
    imul ebp, dword ptr [esi], 0
    00 00
    00 00
    00 00
    考虑下移
    and eax,80000007
    改为:
    or eax,7FFFFFF9
    用C32asm改,80000007为-80000007,C32asm会自动变为80000007的负数7FFFFFF9
    je 等于则跳 改成 jle 也是等于则跳
    这是瑞星的新把戏
    00436008 09C0 xor EAX,EAX
    改为
    00436008 09C0 OR EAX,EAX
    004A19BD 6A 00 PUSH 0
    改为
    004A19BD 6A 01 PUSH 1
    0049D775 /77 07 JA SHORT 021.0049D77E
    改为
    0049D775 /7F 07 JG SHORT 021.0049D77E
    特征码定位出来用OD载入却显示无此地址的解决方法
    dll:
    也许你经常遇到特征码定位出来用OD载入却显示无此地址.
    我们用灰鸽子VIP2006的GETKEY.DLL做演示.
    假若特征码为
    [特征] 000009DA_00000002 004015DA (OC导出的内存地址)
    使用OC导出的地址到OD中却不能使用.这时用lordpe打开GETKEY.dll
    00013000
    00400000 上下相加得00413000
    OD载入入口为00883000 > 55 PUSH EBP
    把40换成87就是真正的特征码.008715DA
    Dll实例(黑洞1.97 瑞星dll特征):
    OK=1
    CharactorTotal=3
    Codz1=H_0000354C_0092414C
    Codz2=H_0001A4B4_0093B0B4
    Codz3=H_0003C958_0095D558
    先用lord_PE打开,再用OD打开
    文件入口:00042948
    > ——-> 00442948
    镜像:00400000
    >———–>相减 00520000
    内存入口 00962948

零区无法定位可执行文件数据的问题
1.c32asm来解决,静态反汇编改特征

2.加一0区段,跨区段jmp跳,然后再新区段保存”所有修改”,再回到原特征码处jmp,保存
免杀关键是技巧,关键你对这些汇编指令掌握的程度,以及你对汇编程序的熟练度。。

接下来再说一下NOD32的高启
《一个钉子和一个国家灭亡的故事》大家都知道
如果有那一个钉子,不丢那个马掌,不折那匹战马,不伤那位将军…………
有太多不确定了,只要我们破坏了其中任何一个环节启发杀毒就会全线溃败


NOD32通过PE结构寻找特征代码 以导入表函数的修改为例 (这个简单,其实还有更复杂的上次那个木马就是12处关联,但是12处关联破坏一个就免杀了)
首先他会从PE MZ那里开始计算PE HARD的位置 在从PE HARD处寻找数据段 计算数据段位置寻找指针的提示位置,然后通过指针的提示位置找到指针,通过指针找到导入表函数。


启发杀毒理解比较困难但是修改还是很简单的,可以说比普通的特征码更容易。我们只要破坏他以上分析的任何一个环节他就会全线溃败。


以前的pcshare有一个超简单过NOD32的方法,那就是将子系统设置为未知,就直接过NOD32的高启发,因为NOD32默认的对未知PE文件不予检测报毒,而恰巧,我们的pcshare通过这样更改之后仍然可以运行,达到了免杀目的,就是这么简单
其实卡巴为我们提供了更多修改的机会
因为他的特征是关联的,只要破坏他的关联就行了
就好像
1+2+3+4+5+6+7+8+9=45一样
特征码是45.当然会有很多选择我们可以改”1″也可以改“2”还可以改“3”……
改掉一个他下面的关联就被破坏了,也就免杀了,
解决NOD32最简单的两个方法


1.把文件子系统设未未知
2.修改OriginalFirstThunk 日期时间标志 ForwarderThunk 以前都是00000000 把它改成FFFFFFFF 或者别的,就这样就可以过了输入表查杀虽然之后lordpe提示“错误的指针”,但是功能,上线都是没有损坏的
至于原理,我上面说的很清楚了,呵呵


接下来说下基因启发
因 启发是通过比对文件当中的关键代码,来查杀新病毒以及变种,这种方式在现阶段的优势比较明显,查杀率高,占用内存少,但从缺点来看,这种启发技术在现阶段 已经暴露出来了一个很严重的问题就是误报过于严重,在国外的误报测试当中,使用这项技术的杀软普遍误报十分厉害,像蜘蛛,红伞,飞塔等等。而从长远来看, 这种技术随着时间的增长,病毒的种类越来越多,必定造成基因库的臃肿,随之造成的结果就是杀软的运行效率降低,占用资源量的提升,甚至出现不同基因代码间 的冲突,所以这项技术虽然在现阶段被看好,而且在技术上也没什么难度。
这个是基因启发启发的定义,但是NOD32这么多特征完全来自广谱查杀jack的文章曾说过: 引用:例如,如果一段程序以如下序列开始:MOV AH ,5/INT,13h,即调用格式化盘操作的BIOS指令功能,
那么这段程序就高度可疑值得引起警觉,尤其是假如这段指令之前不存在取得命令行关于执行的参数选项,又没有要求
用户交互性输入继续进行的操作指令时,就可以有把握地认为这是一个病毒或恶意破坏的程序。
例子:一个免杀卡巴的木马加一个被杀的花卡巴会提示type win32病毒 和感染pe的病毒一样
卡 巴会确定他的入口点,一般程序的入口点一般不会在程序的最后一个PE节里。如果OEP在最后一个PE节里就值得卡巴怀疑。所以有的“牛人”在2007年初 提出了OEP虚拟化…………但是我不懂编程但是我们可以修改PE结构让入口不在最后一个PE节里,比如在木马修改(非PE感染形)用跳转法移动头部某些代 码,在头部空出广大区域加花。或者加完花(感染以后)在加一个空文件节。(这个适用与病毒编程)
写着写着就有点跑题……………………


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注