myccl的使用

作者:佚名    文章来源:互联网    点击数:    更新时间:2008-2-1
 multiCCL定位原理图示

        by niu-cow in NE365
         2996-04-22
1.假设一种比较极端的情况:
  某杀毒软件针对某样本
  抽取了如下 a b c d  e 的五个特征码片段
  而其中的任何一个单独的片段都不构成完整的特征码
    更极端的情况是可能有两套这样的组合。

  却以其中任何两处来识别。(见 图1)

这样,如果用原来的CCL就很难定位了,就算能定位,操作也
   变得很复杂。
(图1)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............

2.针对这种情况
有个思路是从一端开始盖零(考虑到PE文件文件头的重要性
  multiCCL选择了从尾端开始往前盖)。

  直到如图2所示时,杀毒软件才不能识别
     (b片段被破坏了一个字节)
这样b尾端就出来了。

(图2)
..............................aaaaaaaaa.........................
................................................................
.............bbbbbb000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

------------------------------------------------------------------
下面是定b片段的头端了
看看图3 图4 图5 ,注意看b片段中间那个字节的零的移动

(图3)
..............................aaaaaaaaa.........................
................................................................
.............bbbb0bbb0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

----------------------------------
(图4)
..............................aaaaaaaaa.........................
................................................................
.............0bbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

----------------------------------------------------------------------

(图5)
..............................aaaaaaaaa.........................
................................................................
............0bbbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

--------------上图的a 和 b 两个片段都暴露了--------------------------
图5 中,暴露出完整的a b 两个片段,这下又被杀毒软件认出来了

这样就定位出b段了。
接下来把b希用0盖掉作为新的样本,用杀毒软件检测一下是否被杀,还杀就
重复前面的步骤定 c 段,如图6

(图6)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............

-----------------------------------------------------------------------
如果定好c段盖掉后还是被杀就再定 d 段
如图7

(图7)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........000...............................
...............................................................
...................ddddddddd...............eeeee...............

-----------------------------------------------------------------------
这样重复,直到片段d e ……都被找出盖掉后,杀毒软件再也不认了

-----------------------------------
一个字节一个字节来显然太费时间,效率很低的,一次性
生成上千个文件也是不现实的。
  所以考虑先用二分法粗定。到范围小时再逐字节替换。
-----------------------------------
从尾端开始数,以1.2.4.6.8……的大小往前盖
即取2的指数阶 , 2^n < 文件尺寸就行了。
  一次生成20个左右的样本文件,用杀毒软件检测
以例图说明吧(见 图8图9)
下面这个盖了128 bytes 的还被识别

(图8)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

-----------上面这个盖了128 bytes的还被识别-------------
--------------下面这个盖了256 bytes 的不被识别了--------------------

(图9)
..............................aaaaaaaaa........................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

--------------------------------------------------------------------
那就说明距文件末尾256--128之间有个特征码片段,
下一步就以图8为样本,
定位的范围是 图10 中经XXXX标记的区域

(图10)
..............................aaaaaaaaa........................
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
---------------------------------
如此反复,当范围缩小到32字节或更小,二分法就显得效率低下了,
  改用逐字节替换法,一次生成最多32个文件。

-----------
另外,
图8 图9 图10 之外,还有一种情况,
  就是某次用二分法生成的所有文件都
     杀毒软件认出,那就说明特征码集中在最大盖0范围之前
   即图9中 未盖0的区域,这时只要以图9为样本,
     定位图11中以yyyy标记的区域

(图11)
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000



------------

尾端定出后,再用 图3图4图5 所示的方法把0还字节前移,一次生成32个
文件用杀毒软件检测,如果32个全不被杀时,就取这32个字节作为定位结果
对于这种大尺寸的片段,没必要完全定位出片段的头端。
    (因为一个片段中只要修改一个字节就够了)


----------------------------------
==================================
----------------------------------
  基本原理就如上面所述,其实就什么简单。

  不管杀毒软件用几套组合,用复合还是单一特征码,都照样搞定它。
当然,以后杀毒软件使出什么新招就说不准。~~~~~~~~~~~~~~~~~

  (本文仅作思路上的探讨,若有人因应用本文的思路带来某些后果,均与
本文作者无关。)


           若有不当之处,请各位指正,谢谢
----------------------------------------------------------
补充说明:

2006-04-24 :
刚刚发现有的杀毒软件开始用检测文件的某几处是否被填充0来反定位了,
  一旦被检测到某几处被盖0 ,就把位置更先前的干扰码激活。这时就算
     牺牲效率一直往前盖,也只能定位出干扰码(假的特征码)。
      现在暂时可用随机数据串填充应付,不知道以后还会有什么招。
   另外,NDD32的特征码用的是代码与输入表关联,对付这种特征码的方法是,
      先普通定位,然后把找到的输入表上的特征码片段保护起来再定位,
       这样就能找到代码里的特征码片段了。



-----------------------------------------------------------------

重新修正了测试版,放在这里,
这次找出了一个重要BUG的产生原因,并作了修正
    2006-04-24


同时,也请各位帮助反馈一些信息以便统计参考。(大概数字就行,精确反馈更好。就在这下面跟帖吧)
内容如下:

;-----------------------------------------------
;统计内容包括:
;--------
;基本信息; 哪种杀毒软件VS哪种病毒 的 文件/内存 特征码定位 
;1 样本文件大小:
;2 总共定位出特征码片段的数量:
;3 总共需要杀毒软件扫描几次:
;4 定位总用时:
;5 定位结果评价: 基本可用/有较大偏差/很不可靠
;----------------------------------------------



新版本(v 0.015 beta 增加了内存定位功能,请测试

考虑到功能可能不稳定,此处保留老版本
    2006-04-30

更新到 v 0.016 beta   改变随机数据的生成方式。
    2006-05-13
覆盖已找出的特征码片段的方式作了小的修正。因为怀疑ewido针对用0覆盖有干扰。
用RADASM+LCC重写了宿主程序,体积减少了。
       2006-05-17
再次修正随机数据的生成方式,效果等测试
       2006-05-18

改用等分法,依照算法理论,每定位一处特征码片段只需要扫描5次(以样本文件小于 1MB 计),
  每次生成文件最多为64个。(且每轮只有一次超过32个)
  
  今天运气不错,测试中偶然发现的一个BUG却解决了一个优化方面的细节上的问题。这样又提升了效率(相对于算法的理论上的效率)
  这次核心算法有很大变动,版本号从 v 0.100 beta开始。
  这一版目前还只有文件定位功能。内存模块需要再过一段时间。
            2006-05-22

更新到 v 0.110 beta 版,加入内存定位功能了,用的是二分法。这样,每定位一个内存特征码的片段,最多只要加载 60 次。(文件定位仍用 v 0.100 beta )
            2006-05-25

更新到 v 0.120 beta 版,主要是减少了生成文件的数量(因为发现启用“启发式扫描”检测时,速度很慢,减少生成文件数量可以提高至少20%的扫描速度)
             2006-05-31
升级到 v 1.000 ,是正式版了。(至少文件定位方面基本稳定,对NOD32还是有问题,具体见说明文档吧)
            2006-06-10
更新到 v 1.010 , 仅对内存定位模块作了个小的修正,减少了加载次数,这个版本每轮最多只需加载35次,一般情况是28次。当然精度也稍降低。
文件定位仍用 v 1.000 。
            2006-06-21
更新到 v 1.100
1- 修正了处理干扰码的方式,并在记录中用~~作标记,或许有点用。
    (注:干扰码也可能是特征码的一部分)
2- 修正了定位头端时的还原方式。
            2006-07-04

内存定位版更新到 v 1.110
有网友(无涯)反馈说内存定位时有问题,作一试探性修改,请网友再测试一下问题是否解决。
            2006-07-14
v 1.120 (仅针对内存定位模块)
因为有的杀毒软件监视远程线程,用注入法要先关闭这个监视
这样有些麻烦,改用发消息让宿主程序主动加载,
  以后不用再关闭远程线程的监视
( 此版的 multiccl_m.exe 和 memtest.exe 得配合使用)
              2006-10-23
v 1.130 (仅针对内存定位模块)
    1.改变EXE的加载方式为创建进程(原来用LoadLibrary)
    2.增加对保护区域设置的检测,这样加载失败的机率更少
     (本版的 multiccl_m.exe 和 memtest.exe 与过去的版本均不兼容)
            2006-11-5
v 1.140
    1.修正了第一次生成Except.txt(用于设置保护区域定位精度等)时,
    未能生成完整的模板,导致很多使用者第一次使用时无所适从,
    2.将内存定位的一个容易引起误解的“判断……”改为“将判断……”
    (以上两处BUG感谢网友woaicomputer等的反馈)
    3.增加了定位注入数据块的特征码的功能(主要用于对付flux等)
    方法是:a 想办法从内存中抓取注入的数据块
          (这个要自己想办法,不关multiCCL的事,呵)
        b 用multiCCL_inj.exe处理数据块并注入了目标进程,
        结合杀毒软件扫描内存,进行判断定位
  注:memtest.exe 再次升级,以适用于multiCCL_inj.exe
            2006-11-15
v 1.150
    1.解决了memtest.exe被杀时,主程序的SendMessage无法返回的问题
    2.为注入型的提升权限(只有当拥有Administrators以上权限时才起
          作用)
    这样就可以注入某些系统进程。
  注:本版的memtest.exe、memtiCCL_m.exe、multiCCL_inj.exe
    和之前的版本均无法兼容,不要混用。
        2006-11-29
  之前从 v1.140版开始,处理保护区域时,出了个小错,
  导致设置保护区域总是不成功,
  • 上一篇文章:
  • 下一篇文章: