2005年06月10日

  打开注册表编辑器,进入主键[HKEY_CURRENT_USER\Software\Microsoft\Command Processor],将“CompletionChar”键值设置为9。

2005年06月02日

什么是OEM

  OEM,英文是Original Equipment Manufacture的缩写,中文为"原始设备制造商"。
  究竟什么是OEM?确切来讲,OEM就是委托生产,实际上是一种"代工生产"的方式,其含义是品牌生产者不直接生产产品,而是利用自己掌握的"关键的核心技术",负责设计和开发新产品,控制销售"渠道",具体的加工任务交给别的企业去做,承接这一加工任务的制造商就被称为OEM厂商,其生产的产品就是OEM产品。
  OEM是在电子产业大量发展起来以后才在世界范围内逐步形成的一种普遍现象,也是市场细分的必然结果,如今已成为IT企业生产经营的新趋势。比如像微软、IBM、HP、康柏等国际上的主要大企业均采用这种方式。"用最直接的方式赚钱!"这是康柏总裁菲费尔的名言。他曾在美国《商业周刊》上公开表示要省去那些所谓的资产(厂房、设备、办公楼)带来的财务负担。因此,康柏大量采用委托生产(OEM)和委托设计(ODM)方式生产。如果单纯从OEM的概念来理解,那么OEM商实质上是IT产品的幕后英雄,因为产品的表现形式是以单一品牌形象出现在用户面前的。用Turbolinux产品市场经理罗维的话讲,OEM实际上就是品牌的重新包装,对用户来说,接受的是一个整机品牌。
  关于OEM,最容易让普通用户迷惑的是OEM和DIY的区别:都无非是攒机呗。其实,OEM品牌的生产流程中,从上机的所有零部件、组件,到整个组装流程,都有严格的质量检测,因此,它代表着承诺和信誉,更代表着各种服务;而这些恰恰是攒机所没有也不可能有的。

    OEM可分为技术OEM、硬件OEM、软件OEM几大类。

    在打印机的生产上,目前有HP、EPSON、CANON、联想、方正、利盟,施乐(xerox)等十来家,但核心技术却掌握在HP、EPSON、CANON三家手中,其他品牌的打印机要用这些技术,一定要得到他们的授权,这就是技术OEM。技术OEM多是专利技术,在某种意义上说一般具有垄断的性质。对于软件OEM来说,软件捆绑可以统称为OEM,这包括软件与软件的捆绑、软件与硬件的捆绑。这其中包括软件的预装,最具代表性的就是微软的操作系统,中文之星以及其他一些常用的办公软件等,在硬件产品卖到用户手里的时候,有些软件就已经装好了,有些则根据不同用户的要求来预装的,比如,预装游戏软件、教育软件等。

    在硬件OEM方面,国内最初被简单的称之为来料加工。如CPU风扇,INTEL或AMD公司本身并不生产,它们通常会找像日本三洋公司这样的专业电机制造企业作风扇的OEM生产。但随着近几年IT产业的迅猛发展,产品的流通方式逐渐多无化,OEM的含义开始外延,范畴越来越广,其中的技术会含量已大大增加。最有代表性是各大芯片生产厂商同各大板卡厂商之间的OEM关系。如:INTEL和联想,INTEL和华硕,NVIDIA公司和丽台等。

    对于正式授权的板卡生产厂商芯片厂商直接给予技术支持和芯片销售,而不再通过地区性的芯片代理商参与,并且板卡公司完全可以通过自己的研发力量按照芯片厂商的设计标准开发产品,这样大大降低了其生产成本,另外又保持了与授权厂商产品技术和性能方面的一致性。为了保证公司的品牌形象不受影响,芯片厂商在找相应的OEM厂商时一般都相当谨慎,对OEM厂商的实力要求得相当高,除了有相当大的生产和出货能力外还要具有一定的研发能力。如上面提到的著名板卡生产厂商华硕和丽台,分别为INTEL和NVIDIA公司正式授权的主板和显卡OEM生产厂商,并且对于正式的OEM或ODM授权厂商,芯片厂商都会给予其正式的授权协议书。例如对于最近ATI RADEON系列芯片的授权方案中,ATI为了扩大其产品在市场上的份额,通过其在各地的芯片代理商向世界各大板卡生产厂商提供专利的RADEON芯片组及原装显卡,但对于正式授权的OEM厂商目前在全世界只有8家,而太阳花则是ATI在中国大陆唯一一家被正式授权的OEM生产产商。

    另外为了更好的协作OEM厂商,扩大产品在市场上的占有率,各大芯片厂商一般除了在技术上给予板卡厂商 一定的支持外,并与之配合进行全方位的市场推广方面的合作。例如,为了笼络OEM客户,2000年,INTEL曾在全球范围内推出与其是由直接提供芯片生产主板、显卡,OEM厂商的战略合作活动计划:在每个国家挑选一家合作厂商,确定其“COUNTRY LEADER”的地位,并与之开展从开发、生产到培训、市场推广等全方位的密切的战略性合作。而对于签约厂商太阳花显卡推出的ATI RADEON系列产品,ATI方面亦作了积极的响应,除了会派专人参加本月中旬太阳花将在北京举行的新闻发布会外,并承诺后期还会支持并配合太阳花做好一系列ATI RADEON系列产品的市场活动。
 
什么是ODM

    ODM,是Original Design Manufacture(原始设计厂商)的缩写,这是近年来兴起于国内IT业的概念。与之不同的是,早为业内所熟知的OEM(原始设备制造商),主要是指按照上游厂商的设计进行制造,OEM的流行与ODM的兴起,反映了国内制造业发展的过程:早期国内厂商缺乏核心技术,不得已扮演OEM的角色,给别人生产产品,或是拿来其他厂商的OEM产品进行贴牌销售;而随着国内厂商逐渐掌握核心技术,开始出现自主知识产权的产品设计,ODM进入了人们的视野。

Anti-debug
用指令预取反跟踪


CPU的执行时并不是执行到哪一句再到内存中去取那一句, 而是先读入到
CPU的Cache中,如果指令已经到了Cache中, 再将它修改也没有用了,如
果用跟踪程序的话,CPU的Cache中就不会是跟正常执行时的指令相同,
所以可以改动下几条指令,当然是故意改错,如果没有跟踪,程序还回照
常执行,有跟踪的话,那就…

汇编编程示例:
code segment
 assume cs:code,ds:code
 org 100h
start:
 jmp install
d1 db ‘OK, passed …’,0dh,0ah,24h
install:
 mov word ptr _code,20cdh
_code:
 nop ;如果跟踪一下,就会发现下一条指令是
      INT 20H,返回 DOS 了
 nop
 mov si,offset _code1
 mov di,si
 cld
 mov ax,20cdh
 stosw
 lodsw
_code1:
 nop
 nop
 mov ah,9
 ;now ax=20cdh
 mov dx,offset d1
 int 21h
 int 20h
code ends
 end start    

关于启发扫描的反病毒技术

        虚拟机,其作用是让病毒受控地虚拟运行。而所谓“启发扫描”就是在病毒运行 /动态分析基础上进行判定的具体方案。

启发式代码扫描技术
─────────

  病毒和正常程序的区别可以体现在许多方面,比较常见的如通常一个速应用程序在最初的指令是检查命令行输入有无参数项,清屏和保存原来屏幕显示等,而病毒程序则从来有会这样做,它通常最初的指令是直接写盘操作、解码指令,或搜索某路径下的可执行程序等相关操作指令序列。这些显著的不同之处,一个熟练的程序员在调试状态下只需一瞥便可一目了然。启发式代码扫描技术实际上就是把这种经验和知识移植到一个查病毒软件中的具体程序体现。

  因此,在这里,启发式指的“自我发现的能力”或“运用某种方式或方法去判定事物的知识和技能。”一个运用启发式扫描技术的病毒检测软件,实际上就是以特定方式实现的动态高度器或反编译器,通过对有关指令序列的反编译逐步理解和确定其蕴藏的真正动机。例如,如果一段程序以如下序列开始:MOV AH ,5/INT,13h,即调用格式化盘操作的BIOS指令功能,那么这段程序就高度可疑值得引起警觉,尤其是假如这段指令之前不存在取得命令行关于执行的参数选项,又没有要求用户交互性输入继续进行的操作指令时,可以有把握地认为这是一个病毒或恶意破坏的程序。

可疑的程序功能
───────

  在具体实现上,启发式扫描技术是相当复杂的。通常这类病毒检测软件要能够识别并探测许多可疑的程序代码指令序列,如格式化磁盘类操作,搜索和定位各种可执行程序的操作,实现驻留内存的操作,发现非常的或未公开的系统功能调用的操作,等等,所有上述功能操作将被按照安全和可疑的等级可以排序,根据病毒可能使用和具备的特点而授以不同的加权值。

  随便举个例子,格式化磁盘的功能操作几乎从不出现在正常的应用程序中,而病毒程序中则出现的几率极高,于是这类操作指令序列可获得较高的加权值,而驻留内存的功能不仅病毒要使用,很多应用程序也要使用,于是应当给予较低的加权值。如果对于一个程序的加权值的总和超过一个事先定义的阀值,那么,病毒检测程序就可以声称“发现病毒!”仅仅一项可疑的
功能操作远不足以触发“病毒报警”的装置,如果不打算上演“狼来了”的谎报和虚报来故意吓人,最好把多种可疑功能操作同时并发的情况定为发现病毒的报警标准。

==================================================================

启发式扫描通常应设立的标志
─────────────

  为了方便用户或研究人员直观地检测被测试程序中可疑功能调用的存在情况,病毒检测程序可以显示为不同的可疑功能调用设置标志。
  例如,TbScan这一病毒检测软件就为每一项它定义的可疑病毒功能调用赋予一个旗标,如F,R,A……,这样以来可以直观地帮助我们对被检测程序进行是否染毒的主观判断。

各标志的含义
──────

F= 具有可疑的文件操作或能。有可疑进行感染的操作。
R= 重定项功能。程序将以可疑的方式进行重定向操作。
A= 可疑的内存分配操作。程序使用可疑的方式进行内存申请和分配操作。
N= 错误的文件扩展名。扩展名预期程序结构与当前程序相矛盾。
S= 包含搜索定位可执行程序(如EXE或COM)的例程。
#= 发现解码指令例程。这在病毒和加密程序中都是经常会出现的。
E= 灵活无常的程序入口。程序被蓄意设计成可编入宿主程序的任何部分,
   病毒极频繁使用的技术。
L= 程序截获其它软件的加载和装入。有可能是病毒为了感染被加载程序。
D= 直接写盘动作。程序不通过常规的DOS功能调用而进行直接写盘动作。
M= 内存驻留程序。该程序被设计成具有驻留内存的能力。
I= 无效操作指令。非8088指令等。
T= 不合逻辑的错误的时间标贴。有的病毒借此进行感染标记。
J= 可疑的跳转结构。使用了连续的或间接跳转指令。这种情况在正常程序
   中少见但在病毒中却很平常。
?= 不相配的EXE文件。可能是病毒,也可能是程序设计失误导致。
G= 废操作指令。包含无实际用处,仅仅用来实现加密变换或逃避扫描检查
   的代码序列。
U= 未公开的中断/DOS功能调用。也许是程序被故意设计成具有某种隐蔽
   性,也有可能是病毒使用一种非常规手法检测自身存在性。
O= 发现用于在内存在搬移或改写程序的代码序列。
Z= EXE/COM辨认程序。病毒为了实现感染过程通常需要进行此项操作。
B= 这回程序入口。包括 可疑的代码序列,在完成对原程序入口处开始的
   代码修改之后重新指向修改前的程序入口病毒极常见。
K= 非正常堆栈。程序含有可疑的或名其妙的堆栈。

例如对于以下病毒,TbScan将点亮以下不同标志。

   Jerusalum/PLO(耶路撒冷病毒)  FRLMUZ
   Backfont/ 后体病毒           FRALDMUZK
   mINSK-gHOST                  FELDTGUZB
   Murphy                       FSLDMTUZO
   Ninja                        FEDMTUZOBK
   Tolbuhin                     ASEDMUOB
   Yankee-Doodle                FN#ELMUZB

   对于某个文件来说,被点亮的标志愈多,染毒的可能性就愈大。常规干净程序甚至很少会点亮一个标志旗,但如果要作为可疑病毒报警的话,则至少要点亮两个以上标志旗。如果再给不同的标志旗赋以不同的加权值,情况还要复杂得多。


关于虚警(谎报)
────────

   正如任何其他的通用检测技术一样,启发式扫描技术有时也会把一个本无病毒的程序指证为染毒程序,这就是所谓的查毒程序虚警或谎报现象。原因很简单。被检测程序中含有病毒所使用或含有的可疑功能。例如,QEMM所提供的一个LOADHI.COM程序就会含有以下可疑功能调用。

A= 可疑的内存分配操作。程序使用可疑的方式进行内存申请和分配操作。
N= 错误的文件扩展名。扩展名预期程序结构与当前程序相矛盾。
S= 包含搜索定位可执行程序(如EXE或COM)的例程。
#= 发现解码指令例程。这在病毒和加密程序中都是经常会出现的。
E= 灵活无常的程序入口。程序被蓄意设计成可边入宿主程序的任何部痊,
   病毒极频繁使用的技
M= 内存驻留程序。该程序被设计成具有驻留内存的能力。
U= 未公开的中断/DOS功能调用。也许是程序被故意设计成具有某种隐蔽
   性,也有可能是病毒使
O= 发现用于在内存在搬移或改写程序的代码序列。
Z= EXE/COM辨认程序。病毒为了实现感染过程通常需要进行此项操作。

   LoadHi程序中确实含有以上功能调用,而这些功能调用足以触发检毒程序的报警装置。因为LoadHi的作用就是为了分配高端内存,将驻留程序(通常如设备驱动程序等等)装入内存,然后移入高端内存,等等……,所有这些功能调用都可以找到一个合理的解释和确认,然而,检毒程序并不能分辨这些功能调用的真正用意,况且这些功能调用又常常被应用在病毒程序中,
因此,可怜的检测程序只能判定Load Hi程序为“可能是病毒程序”。

虚警(谎报)的后果有多严重
─────────────

   如果某个基于上述启发式代码扫描技术的病毒检测程序在检测到某个文件时弹出报警窗口“该程序可以格式化磁盘且驻留内存”而你自己确切地知道当前被检测的程序是一个驻留式格式化磁盘工具软件,这算不算虚警谎报呢?

   因为一个这样的工具软件显然应当具备格式化盘以及驻留内存的能力。启发式代码检测程序的判断显然正确无误,这可算做虚警,但不能算做谎报(误报)。问题在于这个报警是否是“发现病毒”,  如果报警窗口只是说“该程序具备格式化盘和驻留功能”,好,100%正确,但它如果说“发现病毒”,那么显然是100%的错了。关键是我们片怎样看待和理解它真正的报警的含义。检测程序的使命在于发现和阐述程序内部代码执行的真正动机,到底这个程序会进行哪些操作,关于这些操作是否预期或合法,尚需要用户方面的判断。不幸的是,对于一个一的新手来说,要做出这样的判断仍然是有困难的。

如何避免虚警和误报
─────────

   不管是虚警也好,误报或谎报也好,抛开具体的名称叫法不谈,我们决不希望在每次扫描检测的时候我们的检测程序无缘由地狂喊“狼来了”,我们要尽力减少和避免这种人为的紧张状况,那么如何实现呢?必须努力做好以下几点:

1、 对于病毒行为的准确把握而给定的关于可疑功能调用集合的精确的定义。
除非满足两个以上的病毒重要特征,否则不予报警。

2、 对于常规的佥程序代码的和识别能力。某些编译器提供运行时实时解压或解码的功能及服务例程,而这些情形往往是导致检测时误报警的原因,应当在检测程序中加入认知和识别这些情状的功能模块,以避免再次误报。

3、 对于特定程序的识别能力。如上面涉及到的LoadHi及驻留式格式化工具软件等等。

4、 类似“无罪假定”的功能,首先假定程序和电脑是不含病毒的。许多启发式代码分析检毒软件具有自学习功能,能够记信那些并非病毒的文件并在以后的检测过程中避免再报警。


如何处理虚警谎报
────────

   不管采用什么样的措施,虚警谎报现象总是要存在的。因此不可避免地用户要在某些报警信息出现时作出自已的抉择:是真正病毒还是误报?也许会有人说:“我怎么知道被报警的程序到底是病毒还是属于无辜误报?”大多数人在问及这个问题的第一反应,是“谁也无法证明和判断。”事实上是有办法作出最终判决的,但是这还要取决于应用启发式代码分析检测技术的
查病毒程序的具体解释。

   假如检测软件仅仅给出“发现可疑病毒功能调用”这样简单的警告,信息而没有更多的辅助信息,对于用户来说几乎没有什么可资判断是否真正病毒的实际帮助价值,换个说法,“可能是病毒”似乎永远没错,不必担负任何责任,而用户不希望得到这样模棱两可的解释。

   相反地,如果检测软件把更为具体和实际的信息报告给用户,比如“警告,当前被检测程序含有驻留内存和格式化软硬盘的功能”,类似的情况更能帮助用户扩清楚到底会发生什么?该采取怎样应对措施。比如这种报警是出现在一个字处理编辑软件中,那么用户几乎可以断定这是一个病毒。当然如果这种报警是出现在一个驻留格式化盘工具软件上,用户大可不必紧张万
分了。这样以来,报警的可疑病毒常用功能调用都能得到合理的解释,因而也会得到圆满正确的处理结果。

   自然地, 需要一个有经验的用户从同样的报警信息中推理出一个 “染毒”还是“无毒”的,结论并非每一个用机者可以完全胜任的。因此,如果把这类软件设计成有某种学习记忆的能力,在第一次扫描时由有经验的用户逐一对有疑问的报警信息作好“是”与“非”的判断,而在以后的各次扫描检测时,由于软件学习并记忆了第一次检测时处理结果,将不再出现同样的
烦人的提示警报。因为不论在什么情况下,偶尔请教一下某个有经验的“高手”并不,难难堪的是每次就同样的问题去麻烦别人。

   不管怎样的缺点和不足,和其它的扫描识别技术相比起来,启发式代码分析扫描技术几乎总能提供足够的辅助判断,信息让我们最终判定被检测的目标对象是染毒的,亦或是干净的。启发式代码分析检测技术的实用应用效果如何?启发式扫描技术仍然是一种正在发展和不断完善中的新技术,但已经在大量优秀的反病毒软件中得到迅速的推广和应用。按照最保守的估计,
一个精心设计的算法支持的启发式扫描软件,在不依赖任何对病毒预先的学习和了解的辅助,信息如特征代码,指纹字串,校验和等等的支持下,可以毫不费力地检查出90%以上的对它来说是完全未知的新病毒。 可能会出现一些个虚报、谎报的情况,适当加以控制,这种误报的概率可以很容易地被降低在0.1%以下。

    例如以下是TbScan(6.02)在对由Vesselin Bontchev 提供的测试用真实病毒样本扫描处理的结果。

扫描的技术      从总数7210个样本中检出病毒的个数    检测的检出概率

传统基于手工分析和特征值        7056                97.86%
启发式代码分析                  6465                89.67%

误报率测试是必要的,但实施起来则要困难得多,因此这里没有提供。

传统扫描技术与启发式代码分析扫描技术的结合运用
───────────────────────

   前面论述了簋多启发式代码分析技术的优点和长处,会不会引起某些人的误解,以为传统的检测扫描技术就可以丢弃了呢?情况当然不是这样。从实际应用的效果看来,传统的手法由于基于对已知病毒的分析和研究,在检测时能够更准确,减少误报;但如果是对待此前根本没有见过的新病毒,由于传统手段的知识库并不存在该类(种)病毒的特征数据,则有可能毫无瓜,
产生漏报的严重后果。而这时基于规则和定义的启发式代码分析技术则正好可以大显身手,使这类新病毒不至成为漏网之鱼。传统与启发式技术的结合支用,可以使病毒检测软件的检出率提高到前所未有的水平,而另一方面,又大大降低了总的误报率。详见以下测试实验结果对比数据:

         启发式判定结果    传统式判定结果    可能的真正结果

           干净              干净              非常可能就是干净的
           干净              有毒              很可能误报
           有毒              干净              很可能有毒
           有毒              有毒              极有可能确实染毒

                                               三种技术结合使用
虚报率      10%               1%                1%
漏报率      0.1%              0.001%            0.00001%

   某种病毒能够同时逃脱传统和启发式扫描分析的可能性是小的,如果两种分析的结论相一,致那么真实的结果往往就如同其判断结论一样砍无,疑两种不同技术对同一检测样分析的结果不一致的情况比较少见,这种情形下需借助另外的分析去得出最后结论。

   仍然以 TbScan 6.02为测试举例,下面是分别使用不同技术和结合应用的测试结果:

测试用技术      总数为7210个样本的病毒检出数    检出率
传统的                      7056                97.86%
启发式                      6465                89.67%
结合应用                    7194                99.78%


启发式反毒技术的未来展望
────────────

   研究的逐步深入,使技术发展不断进步。一方面绝大多数反病毒厂家的产品中还未能引入一个较为成功和可靠的启发式检测技术的内核,另一方面,即使是在少数依靠的知名反病毒产品中这项技术的运用也还需要经受不断的完善和发展。任何改良的努力都会有不同程度的质量提高,但是不能企望在没有虚报为代价的前提下使检出率达到100%,或者反过来说,大约在相当长
的时间里虚报和漏报的概率不可能达到0%。

   这听上去或许有些不可思议,其实不难理解。100%正确的检测结果只所以不存在,是因为有相当一部分程序(或代码)介乎于病毒与非病毒之间,即便对于人脑来说,合乎逻辑又合乎病毒定义的结论往往会截然相反。随便举一个例子,如果依据广为接受的病毒的定义:“病毒,就是复制自身的拷贝或改良的复本的一些程序。” 那么,众所周知的磁盘复制程序 DiskCopy
岂不是也落入病毒的分类中了吗?但是,情况显然并非如此……

   病毒技术与反病毒技术恰如“道”与“魔”的关系,也许用“道高一尺,魔高一丈”来形容这对矛盾的斗争和发展进程再为恰当不过了。当反病毒技术的专家学者在研究启发式代码分析技术对传统的特征代码扫描法查毒技术进行改革的时候,也确实收到了很显著的效果,甚至可以说,相对于病毒技术的加密变换(Mutation),尤其是多形、无定形病毒技术(Polymorphsm) 对
于传统反毒技术的沉重打击,杀了一个漂亮的回马枪。但是,反毒技术的进步也会从另一方面激发和促使那些丧心病狂的病毒制作者的不断研制出更新的病毒,具有某种反启发式扫描技术功能,可以逃避这类检测技术的新型病毒。但是,值得庆幸的是,即便能够写出具有这种能力的病毒,它所需要的技术水准和编程能力要复杂得多,绝不可能象对搞传统的基于特征值扫描技
术的反毒软件,那么容易,任何一个程序的新手只要将原有的病毒稍加改动,哪怕只是一个字节,只要恰 好改变了所谓“特征字节”, 就可使这种旧病毒的新变种从未经升级的传统查毒软件的眼皮底下逃之夭夭。

结论
──
   抛开启发式代码分析技术实现的具体细节和不同手法不谈,这种代表着未来反病毒技术发展的必然趋势具备某种人工智能特点的反毒技术,向我们展示了一种通用的、不需升级(较省需要升级或不依赖于升级)的病毒检测技术和产品的可能性,由于诸多传统技术无法企及的强大优势,必将得到普遍的应用和迅速的发展。资料显示,目前国际上最著名的排名在前五名的反
病毒软件产品均声称应用了这项技术,从来自不同机构和出处的评测结果来看,纯粹的启发式代码分析技术的应用(不借助任何事先的对于被测目标病毒样本的研究和了解),已能达到80%以上的病毒检出率, 而其误报率极易控制在0.1%之下,这对于仅仅使用传统的基于对已知病毒的研究而抽取“特征字串”的特征扫描技术的查毒软件来说,是不可想象的,一次质的飞跃。
在新病毒,新变种层出不穷,病毒数量不断激增的今天,这种新技术的产生和应用更具有特殊的重要意义。

  几周之前,我隐约记得好象哪里有一篇文章,顺便找人去试试看能否要来。不想今天下午从E-mail里面收到了。文章显然是译文,有很多用词的习惯可能不一样。我大致看了一遍。整理一下就POST上来了。

  总的来说,这篇文章和前面的虚拟机一文正好互相补充。虚拟机为启发式扫描的实现提供一个基础,而启发扫描是以虚拟机的分析为基础进行病毒判定的具体手段。可以说,这基本上是目前比较先进的技术了。但是我们也看到,启发式扫描对病毒的判定同样不是使用以病毒定义出发的直接标准,而是一系列间接的准则──甚至可以说是使用的统计方法。正如我们在模式
识别工作中的过程类似,虚拟机解码病毒并提供特征素材,而启发式扫描方法是进行特征的分类(如前面所说的各种“标志”,最后要进行权衡分析(特别象模式识别中的距离计算)。

  可以看出,我们在处理很多问题上都是采用的类似直接与间接方法相配合的手段。汉字/图象识别、声音识别、病毒处理……, 当直接准则不易于实现时,往往就采用间接准则。经常还是基于统计的间接准则。从反病毒角度看,我们当然希望存在一种技术,它能够使用与病毒的定义准则更加接近的标准。同时,我们在以MS-DOS文件病毒为例进行分析时,别忘了不断新生
的新的病毒,包括Windows病毒、宏病毒等等……

   希望有兴趣的虫虫能把自己的体会多多地说出来。不必担心说错,更不必保守。大家一起探讨。


Coding program

花指令加密法
 
用‘花指令’来进行静态加密是很有效的,这会使解密者无法一眼看到全部指令,杜绝了先把程序打印下来再慢慢分析的做法。我们知道,一条指令的长度是不等长的,假使有一条指令为
3 字节长,然后你从它的第二个字节开始反汇编,你照样会看到一条面目全非的指令,‘花指令’就是在指令流中插入很多‘垃圾’,使静态反汇编无法进行,如何实现你把以下程序编译出来用
Debug 的 U 指令看一下,跟踪一下就能理解了。
汇编编程示例:
XX1 MACRO
local _next1
 jmp short
_next1
 db 0e8h
_next1:
 ENDM
;————————————–
XX2 MACRO
local _next2
 jmp short
_next2
 db 0e9h
_next2:
 ENDM
;————————————–
XX3 MACRO
local _next3
 jmp short
_next3
 db 09ah
 db 0e8h
_next3:
 ENDM
;————————————–
XX4 MACRO
local _next4
 jmp short
_next4
 db 09ah
 db 0e8h
_next4:
 ENDM
;————————————–
.286
CODE SEGMENT
 ASSUME CS:CODE,DS:CODE
 ORG 100H
start:
 db 20 dup (90h)
 
 xx3
 mov ax,0201h
 xx3
 mov bx,0200h
 xx3
 mov cx,0001h
 xx3
 mov dx,0080h
 xx2
 int 13h
 xx2
 int 20h
CODE ENDS
 END START
     

Using clock to anti-debug
用时间差反跟踪
概述:
 如果关掉中断,不仅仅是键盘不动了,时钟也不会走,所以可以利用时间差来反跟踪,具体方法是:先关掉中断, 再用当前时间作 key 加密,在执行一大堆指令后,偷偷地再用当前时间解密, 如果为了解密跳过关中断指令, 时间就会变化, 解密结果就会不对,然后…当然是死机啦 !
汇编编程示例:
code segment
 assume cs:code,ds:code
 org 100h
start:
 jmp install
d1 db ‘OK, passed …’,0dh,0ah,24h
install:
 xor ax,ax
 mov es,ax
 mov ax,es:[046ch]
 ;系统时间计数
 xor word ptr _code,ax
 ;把 _CODE 处的指令加密
 mov ah,0ffh
 in al,21h
 xchg ah,al
 out 21h,al
 ;关掉中断,并保存原中断开关情况到
AH
 
 mov cx,100
 ;这儿是延时语句,模拟其他程序的执行时间
lop1:
 push cx
 xor cx,cx
lop2:
 loop lop2
 pop cx
 loop lop1
 
 mov bx,es:[046ch]
 ;再把时间取回来解密
 xor word ptr _code,bx
 xchg ah,al
 ;记得把中断复原
 out 21h,al
_code:
 nop
 nop
 mov ah,9
 mov dx,offset d1
 int 21h
 int 20h
code ends
 end start
     

国际上对病毒命名的惯例

国际上对病毒命名的一般惯例为前缀+病毒名+后缀。前缀表示该病毒发作的操作平台或者病毒的类型,而DOS下的病毒一般是没有前缀的;病毒名为该病毒的名称及其家族;后缀一般可以不要的,只是以此区别在该病毒家族中各病毒的不同,可以为字母,或者为数字以说明此病毒的大小。

例如:WM.Cap.A,A表示在Cap病毒家族中的一个变种,WM表示该病毒是一个Word宏病毒

==前缀==

WM: Word宏病毒,可以在Word6.0和Word95(Word7.0)下传播发作,也可以在Word97(Word8.0)或以上的Word下传播发作,但该病毒不是在Word97制作完成的。

W97M: Word97宏病毒,这些是在Word97下制作完成,并只在Word97或以上版本的或以上的Word传播发作。

XM: Excel宏病毒在Excel5.0和Excel95下制作完成并传播发作,同样,此种病毒也可以在Excel97或以上版本传播发作。

X97M: 在Excel97下制作完成的Excel宏病毒,此类病毒也可以在Excel5.0和Excel97下传播发作。

XF: Excel程式(Excel formula)病毒,此类病毒是用Excel4.0把程序片断植入新的Excel文档中的。

AM: 在Access95下制作完成并传播发作的Access的宏病毒。

A97M: 在Access97下制作完成并传播发作的Access的宏病毒。

        O2KM: Office2000宏病毒,可能感染各种类型的Office2000文档。

        O97M: Office97宏病毒,可能感染各种类型的Office97文档。

W95: 顾名思义,这类是Windows95病毒,运行在Windows95操作系统下,当然也可以运行在Windows98下。

Win: Windows3.x病毒,感染Windows3.x操作系统的文件。

W32: 32位Windows病毒,感染所有的32位Widnows平台。

WNT: 同样是32位Windows病毒,但只感染Windows NT操作系统。

        UNIX: 在任何基于UNIX的操作系统下运行的病毒。

        Linux: 以Linux操作系统为目标的病毒。

        Palm: 设计成在特定的Palm操作系统下运行的病毒

HLLC: 高级语言同伴(High Level Language Companion)病毒,他们通常是DOS病毒,通过新建一个附加的文件(同伴文件)来传播。

HLLP: 高级语言寄生(High Level Language Parasitic)病毒,这些通常也是DOS病毒,寄生在主文件中。

HLLO: 高级语言改写(High Level Language Overwriting)病毒,通常是DOS病毒,以病毒代码改写主文件。

       HLLW: 用高级语言编译的蠕虫。(注意:这个修饰语通常不是前缀,只有在DOS高级
语言蠕虫里它才是前缀。如果一个蠕虫是Win32文件,命名将会是W32.HLLW。  
 
       BAT: 批处理文件病毒。
   
       HTML: 以HTML文件为目标的病毒。

       IRC: 以IRC应用为目标的病毒。

       VBS: 用Visual Basic Script程序语言编写的病毒。

      JS: 用JavaScript编程语言编写的病毒。

  JAVA: 用JAVA程序语言编写的病毒。

       PWSTEAL: 窃取密码等信息的木马。
  
       AOL: 美国在线(AOL)环境下特殊的木马,其目的通常位窃取AOL的密码等信息

  Trojan/Troj: 这并不是病毒,只是特洛伊木马,通常装扮成有用的程序,但通常 
          有恶意代码,特洛伊木马并不会复制传染。

       DDos: 分布式拒绝服务(Distributed Denial of Service)病毒。分布式拒绝服  
          务是利用被控制的电脑对一个Internet网站进行进行攻击。

       DoS: 拒绝服务(Denial of Service)病毒。不要跟DOS病毒混淆了,DOS病毒是没
         有前缀的。

    == 后缀 ==

    @m: 表明该病毒或蠕虫是通过电子邮件传播的,例如Happy99(W32.ska),它只在你
           (用户)发送电子邮件时随着邮件一同将自身发送。

    @mm: 表明该病毒或蠕虫通过群发电子邮件传播,例如Melissa,它将会给你信箱中
         的每一个邮件地址发送附带病毒的信息。

    Cli: 木马程序的客户端。客户端亦即控制端(由控制者使用)。

    dam: 表明文件被病毒破坏或者包括非活动的病毒残余后,该文件将不能正确执行 
         或不能得到正确的运行结果。

    dr: 表明查出的文件是另一个病毒的投载工具。这是一个将病毒或蠕虫植入受害人

    enc: 指被加密或编码的文件。例如,使用 MIME 编码创建自身复本的蠕虫会被检
         测到具有 .enc 后缀。

    Family: 表明基于病毒特征的属于一个特殊家族的病毒。

    Gen: 表明基于病毒特征的属于一个特殊类型的病毒。

    Int: 表明是故意的病毒,即是有意传播而不是由于病毒代码的漏洞或错误的。

    Worm: 表明是蠕虫,而不是病毒。蠕虫通过网络、电子邮件或其他传播机制复制自身