zoukankan      html  css  js  c++  java
  • 杀毒软件原理进阶阶段

    学习免杀,首先你得学会汇编把,基础的指令要懂得一些,一般的指令修改必须会,一般的修改这里就不赘述了,接下来就是掌握一些常用的免杀技巧,这里总结一些 
        第一:我们学习免杀的方向:只是为了保护自己的黑软的话!就不会学的那么累(没必去学汇编编程)有时候简单加下壳或者脱下壳就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_MACHINESOFTWAREMicrosoftWindows 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感染形)用跳转法移动头部某些代 码,在头部空出广大区域加花。或者加完花(感染以后)在加一个空文件节。(这个适用与病毒编程) 
    写着写着就有点跑题……………………

  • 相关阅读:
    强制转换改变了对象的框架大小
    android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (1)
    父类virtual和overload,子类reintroduce; overload;
    MySQL版本与工具
    Verilog HDL实用教程笔记
    XE2安装JVCL
    解决Raize日历控件显示的问题
    hdu3415 Max Sum of Max-K-sub-sequence
    MFC重绘原理的关键理解
    常用代码页与BOM
  • 原文地址:https://www.cnblogs.com/microzone/p/3239303.html
Copyright © 2011-2022 走看看