MyCCL特征码定位原理学习
这段时间学习WEB方面的技术,遇到了木马免杀特征码定位的问题,这里做一下学习笔记。
这里对MyCCL的分块原理做一下探究
对指定文件生成10个切块
对指定的木马进行切块后,文件列表是这样的。
注意这里是从E0作为切块的偏移量。也就是说从E0的位置开始逐个切块,E0之前的内容是保留的。这样做的目的是保留一些PE必须的头文件信息。
我们来通过亲身的探究来解析一下MyCCL的切块区间定位法到底什么意思,之后再从理论角度入手解释这个原理。
我们打开第一个文件
0000_000000E0_000110B6,用winhex查看。
我们发现E0之前的内容是完整保存的。也就是我们指定的起始位置之前的内容不参与切块,因为病毒特征码也不可能在这块区域内。
从文件名我们知道,第一个文件的切块范围为000000E0_000110B6。那我们定位到000110B6看看那里的情况。
因为000000E0 + 000110B6 = 00011198,第一个文件(第一个切块的范围是): 000000E0_00011198。然后后面的数据全部被填充为00。(文件名的第三段代表偏移量)
在继续打开顺序的第二个文件:0001_00011196_000110B6。首先从文件名中可以知道,这个文件的开始正好就是第一个文件的结束。然后我们用winhex打开。定位到00011196这个位置看看。
这次从00011196这个位置开始,一直到0002224C的位置, 原始数据都一直被保留,到0002224C之后的数据又被填充为00了。而0002224C的位置正好就是第三个文件的开始位置。
看到这里我们应该明白了,MyCCL所做的事情就是在不断的恢复出原始数据的过程,只不过这个这个动作是分成好几步(块)慢慢来进行的。
如果特征码不在之前的某几块的范围内的话,那杀软在查杀的时候也不会杀除这些文件,因此前几块那些不包含特征码的块文件就会在查杀的时候被保留下来。
我感觉要更清晰的理解原理的话最好是用手工一个文件一个文件顺序的方法进行查毒,直到某一个块文件查处有病毒。则说明这个块文件多露出的那一块原始数据包含了病毒特征码。
那我们的第一个分块的目的就达到了,我们找到了特征码的大致范围,就在刚才多露出的这个块原始数据块中,则这个被查处有病毒的块对应的起始地址和终止地址就我们第一切块的结果。
我们定位特征码的位置,既不能说是看被查出有毒的,也不能说是没被查出有毒的。准确说是第一个被查出有毒的。第一此被查出有毒的那个区段就是特征码的一个范围。
这里假设我们在查杀第二文件的时候查出有病毒,那后面的文件也不用查了,肯定也有病毒,因为它们同样包含了第二个区段。一般我们用手工的查杀方法,查出第二个文件有毒然后清除这个文件。
0001_00011196_000110B6这个文件被删除了
然后,我们点击”二次处理”时MyCCL就能发现第二个文件不见了,就能定位出一个特征区间。看清楚,是MyCCL发现了第二个文件不见了。它就知道了这个特征码是在第二个区段内。
现在明白了为什么有的人杀到一个病毒就停止查杀了吧?因为按顺序摆放,找到某处特征码时,后面的暂时没必要管。为什么说是暂时呢?接下来继续解释。
因为现在的杀毒软件一般是复合定位,也就是说多特征码定位,而且发现任何一处特征码就能确定出病毒来,所以MyCCL在确定出一处特征码(这里是第二个文件块)时,会提醒用户要不要继续分析。此时当然选"是"了,这个时候又会生成十个切片。
这次又生成的10(你自己设定的切块数量)个切片就有意思了。
可以看到依然是和第一次的10个块文件一样的分区范围,但是,内容给也是一样的吗 ?我们继续用winhex查看内容,之后再慢慢解释原理。
我们打开第一个文件0000_000000E0_000110B6,然后直接定位到00011198
第一个文件依然是一样的。我们继续打开第二个文件:0001_00011196_000110B6
用winhex打开0001_00011196_000110B6。
好,这次发现不同了,在第一次的生成切块过程中,我们知道,MyCCL是逐步露出原始数据的,那道理第二个文件中应该从00011196位置开始把原始数据露出来了呀?难道是MyCCL程序出错了吗?
当然不是的。
因为这是二次分块定位,第二个文件块我们已经确认是有病毒的了,不需要再用杀软来确认了,所以MyCCL直接填充00,而是从第三个文件开始逐步露出原始数据。不急,我们先实验一下验证一下这个观点。
打开第三个文件:0002_0002224C_000110B6,定位到0002224C的位置。
可以看到,确实和我们说的一样,从第三个文件开始逐步露出原始数据。我们再定位到文件块3的结束位置:00033302,也是第四个文件的开始位置。
由此可以得知,后面的处理过程和之前的第一次分块是一样的原理了。差别就在二次分块时默认将第一次中找到的那块直接填充00了,就不再露出来了。
结果就是二次定位后也同样会生成10个块文件。
我们依然可以从头顺序开始逐个用杀软进行查杀(不过我感觉可以直接从刚才找到的第一个带特征码的文件块后面开始继续试探查杀)。直到再次发现那个首次发现病毒的文件块,则我们要找的第二个病毒特征码就在那个文件块中。
以此类推,还可以继续点击”二次处理”寻找第三个,第四个特征码,只要文件块还没遍历完。但是要注意的是,每次点击”二次处理”生成文件,才能用杀软继续顺序查一次,即每次只能找到一个特征码位置,然后要再次点击”二次处理”。 如果在二次分块的查杀验证中直到最后一个文件块都没有再出现病毒警报的话,则说明这个病毒程序就只有一个病的特征码。即之前找到的那个,整个过程需要杀软的配合。
至此,我们就算完成了第一轮的切片范围搜索,但是这个时候定位的范围太大了,我们需要继续进行精确定位,缩小范围。
点击特征区间,会出现我们之前找到的特征码范围。
可以看出: 00011196_000110B6就是文件名本身,意思是这个范围就是整个分块本身,非常大,接下来我们要重复上面的过程继续一次定位及二次定位。
右键点击重新复合定位。
接下来的步骤就有点像是算法中的递归,这次的范围缩小了,我们以:
0001_00011196_000110B6
这个范围作为原始文件的大小,注意看开始位置和结束位置。
这次的搜索范围被集中到:00011196_000110B6。或者也可以理解为0001_00011196_000110B6这个文件现在相当于原始文件了,我们从这个范围中继续搜索特征码。
我们继续通过实践验证我们的观点。重新修改分块数目为10,点击生成。
注意到,这次生成的文件列表中。第一个文件就是0000_00011196_00001B45,即直接从00011196这个位置开始了。
打开第一个文件:0000_00011196_00001B45。
我们先观察一下E0的位置
可以看到,还是之前说的原理,起始地址之前的数据是被保留的。只是从我们指定的起始位置开始分块。
现在我们直接定位到00012CDB位置,也就是第二个文件的开始位置。
可以看到,这次分块的行为模式和之前的原理上是一样的。
现在,为了加深映像,让我们再打开倒数第二个文件:0008_0001EBBE_00001B45。
并定位到00020703的位置,也即最后一个文件结束的位置。
再打开最后一个文件:0009_00020703_00001B4A,定位到2224C,也即一开始指定的结束位置。
可以看到在结束位置2224C之后的内容也依然存在。也就说MyCCL对于我们指定的范围外的数据不做任何处理,只会对我们指定的范围内的数据进行切块。
我研究到这里的时候,就有一个疑问了,那这样要是木马病毒有复合特征怎么办呢?即在第一次的切块搜索中搜索出了2处以上的特征码位置,我们选择其中一处缩小范围,进行进一步的搜索,然后MyCCL只在我们指定的范围内进行切块,那这个范围外的那一处特征码就将一直存在了,那我们第二轮切块中每一个文件不就都会查出有病毒了吗?
带着这个疑问,我们重新做一次实验,在第一轮切块搜索的的时候模拟出有两处特征码,即手工删掉2个文件(和杀软杀掉本质上是一样的)
- 重新打开MyCCL,生成10个切块,并删掉第二个文件0001_00011196_000110B6
- 点击”二次处理”,重新生成10个文件,在提示是否要继续搜索特征码的对话框中点确认,这次删除第九个文件:0008_00088690_000110B6
- 删除后,再次点击二次处理,让MyCCL发现又有一个文件不在了,即又找到了一个特征码位置。
结束后,右边显示共找到了两处特征码位置。
- 选择第一处位置:00011196_000110B6,右键,继续复合特征码查找。
注意这个时候的起始位置和结束位置就是第二文件的范围,点击生成。
- 我们来打开第一个文件:0000_00011196_00001B45。其他的位置我们都了解了,现在关键是第九个文件的位置0008_00088690_000110B6是我们要重点关注的。
先定位到00088690的位置。
可以看到,和我们的理论猜想一样,这块内容被填充了00,和”二次处理时”要把之前找到的特征码位置填充00的思想是一样的,为了不影响本次的范围内切块搜索。要反范围外的特征码位置填充00,其他位置就保持不变。
搞清楚了以上几点后,我们就可以以此类推,不断递归的缩小范围,直到能把特征码的范围缩小到20字节一下,基本就差不多了。
国内外的杀软一般是根据一些字符组合来判断是否是病毒,在20字节一下基本能帮组我们对特征码进行定位判断。
顺便介绍个在线测试病毒的网站http://www.virscan.org/。国内外流行的杀毒引擎都在里面了。杀软的话推荐用COMODO,很好用,性能也很好,我一直在用这款。
MyCCL特征码定位原理学习的更多相关文章
- GIS原理学习目录
GIS原理学习目录 内容提要 本网络教程是教育部“新世纪网络课程建设工程”的实施课程.系统扼要地阐述地理信息系统的技术体系,重点突出地理信息系统的基本技术及方法. 本网络教程共分八章:第一章绪论,重点 ...
- IIS原理学习
IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...
- iBeacon室内定位原理解析【转】
目前,技术发展持续火热,因着iBeacon的定位精度和造价都比较符合国内室内定位的市场需求,下面我们来聊一聊iBeacon室内定位原理. iBeacon定位原理 iBeacon是一项低耗能蓝牙技术,工 ...
- zookkeper原理学习
zookkeper原理学习 https://segmentfault.com/a/1190000014479433 https://www.cnblogs.com/felixzh/p/58692 ...
- iOS定位原理和使用建议(转)
原文:http://ibbs.91.com/thread-1548870-1-1.html 看到很多网友讨论iOS设备定位的问题,这里将我们所了解的关于iPhone.iPad.iPod等的定位原理做详 ...
- 转:SVM与SVR支持向量机原理学习与思考(一)
SVM与SVR支持向量机原理学习与思考(一) 转:http://tonysh-thu.blogspot.com/2009/07/svmsvr.html 弱弱的看了看老掉牙的支持向量机(Support ...
- Android自复制传播APP原理学习(翻译)
Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler ...
- 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...
- Dubbo原理学习
Dubbo源码及原理学习 阿里中间件团队博客 Dubbo官网 Dubbo源码解析 Dubbo源码解析-掘金 Dubbo源码解析-赵计刚 Dubbo系列 源码总结+最近感悟
随机推荐
- hadoop:将WordCount打包成独立运行的jar包
hadoop示例中的WordCount程序,很多教程上都是推荐以下二种运行方式: 1.将生成的jar包,复制到hadoop集群中的节点,然后运行 $HADOOP_HOME/bin/hadoop xxx ...
- Spring MVC 急速集成 Shiro 实录
相信有很多的程序员,不愿意进行用户管理这块代码实现. 原因之一,不同的JavaEE 系统,用户管理都会有个性化的实现,逻辑很繁琐. 而且是系统门面,以后背锅的几率非常大,可谓是低收益高风险. 最近在系 ...
- lecture1-NN的简介
这是DL的发明人Hinton在多伦多大学的2013年冬季教授de课程,并将视频分享到coursera网站上.其中不但有视频,也有课件,但是Hinton主页上还有他上课的课后问题,Hinton告诉学生这 ...
- 我的Logo设计简史
近日,日本东京奥运会会微因涉嫌抄袭而被弃用的新闻引起设计界的一翻热论.在此我想到自己的LOGO设计,虽说并一定不好看甚至自己看回来都觉得略丑,但 几乎没有过抄袭的念头.有句话说,不想当设计师的程序猿不 ...
- 从语言到库到框架,再到API,再到标记最后到DSL语言
计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...
- ArcGIS支持MongoDB数据源
ArcGIS支持MongoDB数据源 自从NoSQL推出之后,MongoDB就作为比较杰出的代表受到广大用户的推崇,当然,与之而来的大数据的讨论也非常激烈,GIS数据源向来都是以海量来计算,所以,GI ...
- 木耳听歌记---Clip+安装Rockbox
黑五嫌着无聊,在什么值得买的诱惑下从美国亚马逊买了一个Clip+ 8GB版本,不为别的,就为了一直听别人说可以装Rockbox,谁让咱的魅族MX2无法安装这听歌神器来. 转运过程就不说了, 历时一个多 ...
- Sql视图创建语句
create view [dbo].[AllUsers] as select u.UserId, u.Firstname, u.Lastname, u.ts, am.Email, au.UserNam ...
- Windows7 x64配置 Apache2 + PHP5 + MySQL5
1:相关软件下载: Apache HTTP Server 版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP ...
- android 之 Toast通知的使用
1.默认效果: 代码: Toast.makeText(getApplicationContext(), "默认Toast样式", Toast.LENGTH_SHORT ...