-
定位软件病毒特征码的工具是multiCCL
资源介绍
特别说明:
本软件谢绝任何支持或使用3721(及及该公司其他产品如雅虎助手等)的人士使用。
multiCCL
by niu-cow in NE365
开发调试环境及工具 :
win2k+sp4
dev-cpp 4.992
Lcc_win32
MASM32 v9.0
Radasm
ollydbg 1.10
winHex 12.5
包含文档:
1. multiCCL_f.exe 文件特征码专用版
2. multiCCL_m.exe 内存特征码专用版
3. multiCCL_inj.exe 注入代码块内存定位专用版
4. memtest.exe 用作内存定位时加载dll或运行exe或向目标进程注入的辅助程序
(为了防止主程序被杀毒软件Kill,用了远程线程注入)
5. AutoStartScanDll.dll 自动操作模块,使得部分操作自动化
6. multiCCL_readme.txt 本说明文档
7. multiCCL原理图示.htm 基本原理图示
功能:
原来已有的 文件特征码定位功能 (对 PE文件 和 非PE文件)--此功能已较稳定
本版新增功能:内存特征码定位(对PE文件)---------此功能测试中
因为现在杀毒软件针对特征码定位器设置了某些干扰,最终决定把文件定位和
内存定位做成两个独立的部分。
其实代码基本一样的,只为方便日后的维护和升级。
-----------------------------------
......内存定位.重要提示.......
1.定位期间不要浏览任何放有病毒样本的文件夹
以免被杀毒软件的实时监控删掉
2. 现在打开杀毒软件的实时检测(保护级别在自定义中设置得严格些)
实时检测的执行动作可设置为:
a. 提示用户操作
b. 禁止访问并删除
推荐选 a ,千万不要选“仅禁止访问”,“隔离”也不要选
3. 当然也可以按提示手动扫描内存
执行动作设为“仅报告”或“提示用户操作”
只要杀毒软件报告检测结果就行了,不需要它删除或禁用什么
4. 防火墙不要监视远程线程
因为multiCCL为了避免主程序被杀毒软件kill,用远程线程加载样本
(另外,正在找有关驱动方面的资料)
------------------------------------
------------------------------------
现在重点测试内存特征码的定位功能。
通过后再添加。现在的界面也还有点马虎,用cmd界面也是为测试
方便,因为随时都可输出中间信息。
((听 tankaiha 一说还真不想写GUI界面了))
需要说明的问题是:
1. 开始定位一个样本时,如果发现样本目录中存在旧的记录文件,
程序会读取并认可 旧记录中的特征码。
如果想完全重新开始定位,应该先把旧的记录文件删除或改名,
之后再打开multiCCL 。
2. 输出目录里不要放置任何您想保留的文件,以免给您带来损失。
定位过程中将删除里面的一些文件。
另一个简单的做法是:先手动在样本所在目录下建一个名为
output 的子目录,然后在选择目录的对话框点
“取消”,这样输出文件就都放到这个output
目录下了。
3. 设置保护片段时,如果所保护的片段本身是独立的特征码,就会
导致定位失败,因为所生成的文件会全部被杀,而且一直如此。
所以在设置前,
先要确认所保护的片段不是独立的特征码。
v 0.100 beta 之后的版本用的是等分法,限制区域的优化效果,
对于文件特征码来说是很不明显的,
而对于内存特征码的定位还是比较明显的。
; 要注意的是,文件定位每次提醒杀毒时,一定要把识别出的文件全部删除,
否则程序会判断错误的。(内存定位就没关系了)
记录文件格式:
只要注意以下几个字段和键值就可以了:
[CharactorCodz]
;特征码总数
CharactorTotal=
;特征码的记录格式是 H_起始偏移_结束偏移_长度_……
;一般只要注意 起始偏移 结束偏移 就够了。记录的是文件偏移,
; 用十六进制表示
;特征码1
Codz1=
;特征码2
Codz2=
;……
;当OK=1时表示定位成功完成,ok=0表示定位没有完成
ok=
-----------
;文件定位的记录文件是 multiCCL_f_Log.txt
;内存定位的记录文件是 multiCCL_m_Log.txt
;都放在样本文件所在的目录下。
-----------
;看内存定位结果时,还有一个字段需要注意的:
[antiLocateCodz]
newCodz=1
OK=1
CharactorTotal=
Codz1=
Codz2=
……
;这是杀毒软件针对内存定位干扰码,( antiLocateCodz )
;定位不出内存特征码或修改内存特征码无效时,
;可以考虑修改入口点(修改代码或转移入口点),
;若以上修改还是无效,则试试修改干扰码。
;----------------------------
;另外也请看看更新记录,里面也有部分说明
;
; 同时也请帮助统计定位一个样本特征码所需的时间,大致记录下就行
; 结果请反馈到: http://vxer.cn/bbs/read.php?fid=9&tid=112&page=1
;-----------------------------------------------
;统计内容包括:
;--------
;基本信息: 哪种杀毒软件的XXX文件定位(病毒库版本XXXX)
;1 样本文件大小:
;2 总共定位出特征码片段的数量:
;3 总共需要杀毒软件扫描几次:
;4 定位总用时:
;5 定位结果评价: 基本可用/有较大偏差/很不可靠
;----------------------------------------------
;BTW: 本程序针对的目标是杀毒软件的复合特征码的定位,
当然也包括单一特征码了。
;免责声明:本程序只供学习,不得用于商业。本程序可能存在某些缺陷,
及其他可能隐含的问题,
使用中可能造成的一切后果,均由使用者自行负责。
如果您对此很在意则请勿使用。
;感谢您的测试,使用中请保留软件文档的完整,发现任何问题请到NE365的BBS上反馈。
;(借用一下NE365的空间 http://vxer.cn/bbs ,一并致谢NE365
;及各位网友的帮助和测试 ,大家多多支持NE365吧)
;
;特别说明:本软件谢绝任何支持或使用 3721 的人士使用。
niu-cow
2006-05-22
---------------------------------------------
大致上找到了特征码没完没了的原因了
很可能是因为保护区域设置得过大,其中含有相当数量的隐含病毒特征,
导致启发式扫描的极高的实现机率。 实际测试中也发现当没有设置保护区域时,
定位出的特征码就很有限。
看来,设置合理的保护区域,对于定位是非常重要的,
尤其是针对“启发式扫描”(NOD32称之为“高级智能侦测模式”)的定位。
尽管以上只是猜测,不过本人认为这下被猜中了。
niu-cow
2006-05-31 20:08
----------------
在tanknight(myCCL的作者)的BLOG上看到NOD32定位的有关讨论,据说定位
精度太高时,对NOD32的定位往往失败。一般控制在8--16字节为宜。
依照这个原理增加了个控制定位精度的模块,重复的现象有所减少,但
问题好象还没有解决。
niu-cow
2006-06-10 17:04
------------------------------------------------------------------
========================================================================================
------------------------------------------------------------------
更新历史:
v 1.200 (当前版本)
1.为文件特征码定位部分增加了模拟鼠标键盘动作的自动操作模块,
这下可以在定位时抽空喝杯开水了(有关说明在模块的设置界面)
建议先手动操作定两三个特征码,之后设置使用自动操作
2.内存定位时exe的加载方式作了改变,这个版本用CREATE_SUSPEND参数
使进程或线程创建时处于挂起状态(类似于被调试器加载,因为
据网友反馈说部分杀毒软件的内存扫描对于OLLYDBG加载的程序
起作用,而对于MYCCL、multiCCL、CCL等的加载不起作用)。
dll的加载没改(因为目前还没找到更好的方法)
注:本版的memtest.exe、memtiCCL_m.exe、multiCCL_inj.exe
和之前的版本均无法兼容,不要混用。
2007-07-17
v 1.150
1.解决了memtest.exe被杀时,主程序的SendMessage无法返回的问题
2.为注入型的提升权限(只有当拥有Administrators以上权限时才起
作用)
这样就可以注入某些系统进程。
注:本版的memtest.exe、memtiCCL_m.exe、multiCCL_inj.exe
和之前的版本均无法兼容,不要混用。
2006-11-29
v 1.140
1.修正了第一次生成Except.txt(用于设置保护区域定位精度等)时,
未能生成完整的模板,导致很多使用者第一次使用时无所适从,
2.将内存定位的一个容易引起误解的“判断……”改为“将判断……”
(以上两处BUG感谢网友woaicomputer等的反馈)
3.增加了定位注入数据块的特征码的功能(主要用于对付flux等)
方法是:a 想办法从内存中抓取注入的数据块
(这个要自己想办法)
b 用multiCCL_inj.exe处理数据块并注入了目标进程,
结合杀毒软件扫描内存,进行判断定位
注:memtest.exe 再次升级,以适用于multiCCL_inj.exe
2006-11-15
v 1.130 (仅针对内存定位模块)
1.改变EXE的加载方式为创建进程(原来用LoadLibrary)
2.增加对保护区域设置的检测,这样加载失败的机率更少
(本版的 multiccl_m.exe 和 memtest.exe 与过去的版本不兼容)
2006-11-5
v 1.120 (仅针对内存定位模块)
因为有的杀毒软件监视远程线程,用注入法要先关闭这个监视
感觉这样有些麻烦,改用发消息让宿主程序主动加载
( 此版的 multiccl_m.exe 和 memtest.exe 得配合使用了)
2006-10-23
v 1.110 (仅针对内存定位模块)
有网友(无涯)反馈说内存定位时有问题
发现问题的系统是WIN2003
本人在WIN2K+SP4下测试未发现问题
从出错截图看,问题很可能在杀进程的函数
检查源代码,只发现一个进程句柄没有及时关闭,修正了这个函数,
作为试探性修改,看看问题是否解决。
2006-07-14
v 1.100 :
1- 修正了处理干扰码的方式,并在记录中用~~作标记,或许有点用。
(注:干扰码也可能是特征码的一部分)
2- 修正了定位头端时的还原方式。
3- 生成文件时增加一秒停顿。
这个版本的两处修正都只是试探性的修改。
2006-07-04
v 1.010 :
仅修正了内存定位的模块,使其生成的文件数更少(定头端时)
这样每轮加载次数最多35次,绝大多数时候是28次
(尾端20次,头端8次)
文件定位仍用v 1.000版
2006-06-20
v 1.000 :
从本版本开始,已经是正式版了~~~~
1- 记录文件文件名中 包含了样本文件名,以有所区别,
感谢pipapi的建议。
2- 增加了一个控制定位精度的功能。
具体是在Except.txt文件中改变dwX的值
当dwX=1 时精度为一字节(最高),如果存在旧的Except.txt
则请自行增加这个字段,如下(前后都不要有空格):
[dwX]
dwX=1
降低精度的目的是减少一些干扰(如NOD32的启发式扫描),
经实际测试发现仍然无法完全避免。
(一般降为 12-16 字节左右为宜,dwX的值用十进制)
保护区域设置的合适一些,不要太大才是最重要的。
2006-06-09
v 0.120 beta:
1- 实际使用中发现,杀毒软件的“启发式扫描”
(NOD32的称“高级智能侦测模式”的扫描速度实在慢,
为提高效率,减少每次生成文件的数量,
当然多扫一遍了(以 1 MB 计算)。
这样一来,对磁盘空间的需求也减少了一半。不过现在
的硬盘都很大,不会在乎这点的。
此修正针对文件定位(也包括内存定位前的干扰码定位)
2- 提示音作了细小的调整。
2006-05-31
v 0.110 beta:
1- 增加了内存定位功能(二分法),这样每定位一处特征码
最多只需加载64次(其中定尾端20次,头端32次)
2- 修正了卸载方式。
3- 彻底屏蔽限制点区能。
4- 文件定位仍使用 v 0.100 beta 版
2006-05-25
v 0.100 beta:
1- 修正了winXP下当软件路径带空格时出错的问题,
感谢 最近的星球 的测试和反馈
2- 改用了等分法(原来用二分法),效率提高明显。
测试过程中发现的一个偶然的错误却解决了算法中的一个
细节问题,进一步提高了效率(与理论效率相比)
激动ing ,每次最多可能生成64个文件
使用新版本时,把旧版本的记录文件重命名或删除吧,
以免造成潜在的冲突。
3- 增加了定位限制点的功能,就是说只定位限制点之前的部分
且直接从此点开始,
限制点之后的所有数据都将被随机数据串填充。
若需要保护某区数据,请与保护区域配合使用。
限制点的格式为 8 位的十六进制值,以表示文件偏移。
且只当标志设为1时起作用,限制标志为0时不起作用。
特别说明: 这个功能只是预留,目前测试表明没什么用处。
目前的版本只有文件定位功能,就不要使用限制点了。
4- 使用新算法的multiCCL版本号从 v 0.100 beta 开始。
目前只有文件定位功能。先测试BUG。
2006-05-22
v 0.017 beta-p:
再次作一小的修正,因为发现和卡巴对0.012版类似干扰,
这次是别的杀毒软件了,也不清楚原理是什么,干脆连
同干扰码一起定位了,这样还省心些。
(以后前面冒出的干扰码就不怕了,
今后的升级只要应付覆盖区冒出的干扰码就行了)
本BUG系astronomer反馈,致谢
2006-05-18
v 0.017 beta :
再次修正随机数据的生成方式,修正的效果有待测试
因为定位NOD32对彩虹桥英文1.02版的文件特征码时
发现有干扰。(感谢yxrx的测试)
2006-05-18
v 0.016 beta-p:
1-修正一个针对已找出的特征码的覆盖方式,
因为针对ewido定位时,发现特征码不断地“往前长”,
看看更改后能否通过。
(只为只是小的修正,界面上仍标识为 v 0.016 )
感谢 honhon 的测试和反馈。
2-用LCC_win32+RadAsm重写宿主程序(内存定位用),体积
更小了。
2006-05-16
v 0.016 beta :
1-修正了随机数据串的生成方式
(感谢abc27的针对NOD32的测试)
2=修正了其他已发现的次要的BUG。
2006-05-13
v 0.015 beta :
1-增加了内存定位的功能,为防止加载样本时被杀毒软件关
闭,启动了一个靶程序,用远程线程注入到宿主进程
2-当样本文件所在目录存在旧的记录文件时,程序将读取旧
记录文件中所记录的已定位出的特征码,并认可这些特
征码。
新增这个功能主要是考虑到有些杀毒软件的特征码片段
的数量很大,每次从头再来显然太浪费时间了。
尤其是相对烦琐的内存定位,万一中途意外中断,
丢弃之前的结果从头再来是不可容忍的。
3-修正了一些已发现的BUG(比较次要,不影响使用)
4-针对杀毒软件的干扰做了些应对性的改变。
2006-04-30
v 0.014 beta :
1-改用随机数据串填充,因为发现有的杀毒软件用检测填充
0来反定位(他们动作蛮快的哈)
2-把记录文件放到要定位的样本文件所在的目录下了,因为
考虑到以后杀毒软件可能会检测改写记录文件来反定位,
和输出文件放在一起不妥。
3-修正了一处因优化中带来的定位重复造成失败的BUG
感谢frip反馈
4-增加了保护片段(或区域设置),这是为了对付NDD32这类
关联输入表的特征码。(设置方法软件会有提示的)
(此功能效果有等测试,感谢111111113提供有关针对NDD32的建议)
因为此版修复和更新相对较大,就跳到0.014 版了,本来想写内存定位的,
不过这两天忙于对付杀毒软件的反定位,内存定位就留到下个版本了。
(其实很想休息几天的,有点累)
2006-04-24
v 0.012 alpha :
1-修正了记录中特征码长度多出一个字节的错误。
( tandaiha发现 )
2-当发现特征码片段的长度超过32byte时,就取这32位作为片段结果
反正只要篡改片段里的任何一个字节就行,定出这么长就够了,
发现有的杀毒软件的取样片段(如卡巴斯基 vs AngleShell )
的长度有点不可思议,硬要找出片段的头端简直是浪费时间。
所以,在分析定位结果时,特征码片段的尾端一般是精确的,
当片段长度 <32bytes(记录中用的是十六进制的20) 时,
头端也是精确的,否则头端可能还在更前面。
反正记录结果对于修改来说,已经够用了。
2006-04-22
v 0.011 alpha : 重新排列了按键及暂停,便操作更简洁
2006-04-21
v 0.010 alpha : 原始版本,算法调试基本通过
2006-04-21