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版开始,处理保护区域时,出了个小错,
导致设置保护区域总是不成功,
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版开始,处理保护区域时,出了个小错,
导致设置保护区域总是不成功,
相文内容:
热门文章:
最新更新动画:
最新更新软件: