著录项信息
专利名称 | 用于恶意软件检测的对应用的通用拆包 |
申请号 | CN201480008695.6 | 申请日期 | 2014-03-03 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2015-10-28 | 公开/公告号 | CN105009139A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6查看分类表>
|
申请人 | 迈克菲股份有限公司 | 申请人地址 | 美国加利福尼亚州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 迈克菲有限责任公司 | 当前权利人 | 迈克菲有限责任公司 |
发明人 | D·古普塔 |
代理机构 | 上海专利商标事务所有限公司 | 代理人 | 毛力 |
摘要
用于检测可执行文件中的恶意软件的技术允许在判断该可执行文件是否是恶意软件之前就对经打包的可执行文件拆包。在具有硬件辅助的虚拟化的系统中,硬件虚拟化特征可以被用来不需要对打包技术的知晓就以受控方式迭代地对经打包的可执行文件拆包。一旦可执行文件被完全拆包,则可以采用诸如签名扫描之类的恶意软件检测技术来判断可执行文件是否包含恶意软件。硬件辅助的虚拟化可以被用来促进对存储器中的运行时可执行文件的扫描。
1.一种非瞬态计算机可读介质,包括存储在所述非瞬态计算机可读介质上的计算机可执行指令,所述计算机可执行指令使一个或多个处理单元:
将自解压可执行文件加载到存储器中,所述自解压可执行文件包括第一拆包存根和经打包的可执行文件;
允许所述第一拆包存根将所述经打包的可执行文件拆包为经拆包的可执行文件,其中,允许所述第一拆包存根将所述经打包的可执行文件拆包包括使用硬件辅助的虚拟化来控制存储器页面访问许可以便:
检测向先前执行代码所在的存储器页面的写入;以及
检测执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试;
在执行代码的每一次尝试时,独立于对所述第一拆包存根的知晓,使用一个或多个试探法来检测所述第一拆包存根的完成,其中,所述一个或多个试探法包括:用于将在检测到所述第一拆包存根的完成之前记录的栈指针值和栈内容与在允许所述第一拆包存根开始对所述经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法;以及对所述经拆包的可执行文件扫描恶意软件。
2.如权利要求1所述的非瞬态计算机可读介质,其特征在于,
其中,所述经打包的可执行文件包括自解压可执行文件的序列,所述序列除最后一个成分之外的每一个成分包括拆包存根和后继自解压可执行文件,其中,所述最后一个成分包括最终拆包存根和最终经打包的可执行文件,
其中,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包包括所述指令使一个或多个处理单元:
允许所述第一拆包存根将所述经打包的可执行文件拆包为所述自解压可执行文件的序列的第一成分;以及
允许所述自解压可执行文件的序列的每一个成分对所述后继自解压可执行文件拆包,直到所述最终拆包存根将所述最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,
其中,所述指令使一个或多个处理单元对所述经拆包的可执行文件扫描恶意软件包括:所述指令使一个或多个处理单元对所述最终经拆包的可执行文件扫描恶意软件。
3.如权利要求2所述的非瞬态计算机可读介质,其特征在于,所述指令使一个或多个处理单元对所述经拆包的可执行文件扫描恶意软件进一步包括:所述指令使一个或多个处理单元扫描所述自解压可执行文件的序列中的至少一些。
4.如权利要求1所述的非瞬态计算机可读介质,其特征在于,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包进一步包括所述指令使一个或多个处理单元:
在检测到执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试之后,使用硬件辅助的虚拟化来暂停所述第一拆包存根的执行;
当所述第一拆包存根的执行被暂停时,收集试探法统计信息;以及
允许所述第一拆包存根的执行继续。
5.如权利要求1所述的非瞬态计算机可读介质,其特征在于,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包包括:所述指令使一个或多个处理单元使用硬件辅助的虚拟化来控制存储器页面访问许可以检测所述自解压可执行文件的入口点的执行。
6.如权利要求1所述的非瞬态计算机可读介质,其特征在于,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包进一步包括所述指令使一个或多个处理单元:
在检测到向先前执行代码所在的存储器页面的写入之后,使用硬件辅助的虚拟化来暂停所述第一拆包存根的执行;
当所述第一拆包存根的执行被暂停时,收集试探法统计信息;以及
允许所述第一拆包存根的执行继续。
7.如权利要求1-6中的任何一项所述的非瞬态计算机可读介质,其特征在于,在所述经拆包的可执行文件的执行之前来执行扫描所述经拆包的可执行文件。
8.如权利要求1-6中的任何一项所述的非瞬态计算机可读介质,其特征在于,所述经拆包的可执行文件不被允许执行。
9.如权利要求1-6中的任何一项所述的非瞬态计算机可读介质,其特征在于,所述经打包的可执行文件是使用未知的或不可检测的打包算法来打包的。
10.如权利要求1-6中的任何一项所述的非瞬态计算机可读介质,其特征在于,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包包括:所述指令使一个或多个处理单元在允许所述第一拆包存根将所述经打包的可执行文件拆包为经拆包的可执行文件控制所述第一拆包存根的执行。
11.一种对自解压可执行文件拆包以检测恶意软件的方法,包括:
使用处理器将自解压可执行文件加载到存储器中,所述自解压可执行文件包括第一拆包存根和经打包的可执行文件;
允许所述第一拆包存根将所述经打包的可执行文件拆包为经拆包的可执行文件,其中,允许所述第一拆包存根将所述经打包的可执行文件拆包包括使用硬件辅助的虚拟化来控制存储器页面访问许可以便:
检测向先前执行代码所在的存储器页面的写入;以及
检测执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试;
在执行代码的每一次尝试时,独立于对所述第一拆包存根的知晓,使用处理器来使用一个或多个试探法以检测所述第一拆包存根的完成,其中,所述一个或多个试探法包括:用于将在检测到所述第一拆包存根的完成之前记录的栈指针值和栈内容与在允许所述第一拆包存根开始对所述经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法;以及
对所述经拆包的可执行文件扫描恶意软件。
12.如权利要求11所述的方法,其特征在于,
其中,所述经打包的可执行文件包括自解压可执行文件的序列,所述序列除最后一个成分之外的每一个成分包括拆包存根和后继自解压可执行文件,其中,所述最后一个成分包括最终拆包存根和最终经打包的可执行文件,
其中,允许所述第一拆包存根对所述经打包的可执行文件拆包包括:
允许所述第一拆包存根将所述经打包的可执行文件拆包为所述自解压可执行文件的序列的第一成分;以及
允许所述自解压可执行文件的序列的每一个成分对所述后继自解压可执行文件拆包,直到所述最终拆包存根将所述最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,
其中,对所述经拆包的可执行文件扫描恶意软件包括:对所述最终经拆包的可执行文件扫描恶意软件。
13.如权利要求12所述的方法,其特征在于,对所述经拆包的可执行文件扫描恶意软件进一步包括:扫描所述自解压可执行文件的序列中的至少一些。
14.如权利要求12所述的方法,其特征在于,允许所述第一拆包存根对所述经打包的可执行文件拆包进一步包括:
在检测到执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试之后,使用硬件辅助的虚拟化来暂停所述第一拆包存根的执行;
当所述第一拆包存根的执行被暂停时,收集试探法统计信息;以及
允许所述第一拆包存根的执行继续。
15.一种配置成用于对自解压可执行文件拆包以检测恶意软件的系统,包括:
存储器;以及
一个或多个处理单元,通信地耦合到所述存储器,其中,所述存储器存储指令,所述指令使所述一个或多个处理单元:
将自解压可执行文件加载到存储器中,所述自解压可执行文件包括第一拆包存根和经打包的可执行文件;
允许所述第一拆包存根将所述经打包的可执行文件拆包为经拆包的可执行文件;
其中,允许所述第一拆包存根将所述经打包的可执行文件拆包包括使用硬件辅助的虚拟化来控制存储器页面访问许可以便:
检测向先前执行代码所在的存储器页面的写入;以及
检测执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试;
在执行代码的每一次尝试时,独立于对所述第一拆包存根的知晓,使用一个或多个试探法来检测所述第一拆包存根的完成,其中,所述一个或多个试探法包括:用于将在检测到所述第一拆包存根的完成之前记录的栈指针值和栈内容与在允许所述第一拆包存根开始对所述经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法;以及对所述经拆包的可执行文件扫描恶意软件。
16.如权利要求15所述的系统,其特征在于,
其中,所述经打包的可执行文件包括自解压可执行文件的序列,所述序列除最后一个成分之外的每一个成分包括拆包存根和后继自解压可执行文件,其中,所述最后一个成分包括最终拆包存根和最终经打包的可执行文件,
其中,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包包括所述指令使一个或多个处理单元:
允许所述第一拆包存根将所述经打包的可执行文件拆包为所述自解压可执行文件的序列的第一成分;以及
允许所述自解压可执行文件的序列的每一个成分对所述后继自解压可执行文件拆包,直到所述最终拆包存根将所述最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,
其中,所述指令使一个或多个处理单元对所述经拆包的可执行文件扫描恶意软件包括:所述指令使一个或多个处理单元对所述最终经拆包的可执行文件扫描恶意软件。
17.如权利要求16所述的系统,其特征在于,所述指令使一个或多个处理单元对所述经拆包的可执行文件扫描恶意软件进一步包括:所述指令使一个或多个处理单元扫描所述自解压可执行文件的序列中的至少一些。
18.如权利要求15所述的系统,其特征在于,所述指令使一个或多个处理单元允许所述第一拆包存根对所述经打包的可执行文件拆包进一步包括所述指令使一个或多个处理单元:
在检测到所述尝试之后,使用硬件辅助的虚拟化来暂停所述第一拆包存根的执行;
当所述第一拆包存根的执行被暂停时,收集试探法统计信息;以及
允许所述第一拆包存根的执行继续。
19.一种配置成用于对自解压可执行文件拆包以检测恶意软件的设备,包括:
用于将自解压可执行文件加载到存储器中的装置,所述自解压可执行文件包括第一拆包存根和经打包的可执行文件;
用于允许所述第一拆包存根将所述经打包的可执行文件拆包为经拆包的可执行文件的装置;
其中,用于允许所述第一拆包存根将所述经打包的可执行文件拆包包括:用于使用硬件辅助的虚拟化来控制存储器页面访问许可从而进行以下操作的装置:
检测向先前执行代码所在的存储器页面的写入;以及
检测执行先前由所述第一拆包存根写入到存储器页面中的代码的尝试;
用于在执行代码的每一次尝试时独立于对所述第一拆包存根的知晓而使用一个或多个试探法来检测所述第一拆包存根的完成的装置,其中,所述一个或多个试探法包括:用于将在检测到所述第一拆包存根的完成之前记录的栈指针值和栈内容与在允许所述第一拆包存根开始对所述经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法;以及
用于对所述经拆包的可执行文件扫描恶意软件的装置。
20.如权利要求19所述的设备,其特征在于
其中,所述经打包的可执行文件包括自解压可执行文件的序列,所述序列除最后一个成分之外的每一个成分包括拆包存根和后继自解压可执行文件,其中,所述最后一个成分包括最终拆包存根和最终经打包的可执行文件,
其中,所述用于允许所述第一拆包存根对所述经打包的可执行文件拆包的装置包括:
用于允许所述第一拆包存根将所述经打包的可执行文件拆包为所述自解压可执行文件的序列的第一成分的装置;以及
用于允许所述自解压可执行程序的序列的每一个成分对所述后继自解压可执行程序拆包直到所述最终拆包存根将所述最终经打包的可执行文件拆包为最终经拆包的可执行文件为止的装置,
其中,用于对所述经拆包的可执行文件扫描恶意软件的装置包括:用于对所述最终经拆包的可执行文件扫描恶意软件的装置。
用于恶意软件检测的对应用的通用拆包\n技术领域\n[0001] 本公开一般涉及用于拆包可执行二进制文件以使较少地依赖多个签名(例如,针对每一个打包方法的一个签名)来标识潜在的恶意软件被保持在病毒签名DAT文件中的系统和方法。更具体而言,但不作为限制,本公开涉及:在对经打包的可执行文件进行拆包时使用硬件辅助的虚拟化来确定其原始的入口点,并且在执行该原始的入口点之前,一旦可执行文件到达其完全扩展的形式就执行对其的正式扫描。\n背景技术\n[0002] 当代的应用代码的递送通常涉及其通过打包(pack)过程进行的压缩。通过使用打包过程,二进制文件尺寸可以减小,并且多个文件可以被合并成一个文件。现代的打包过程创建“自解压(self-extracting)可执行文件”,可执行其来对经打包的代码的内容进行拆包(unpack)。也就是说,经打包的代码本身伴随着可执行代码段,当执行该可执行代码段时,其导致使经打包的代码膨胀或解压缩。相应地,运行自解压可执行文件会导致经打包的代码可执行文件被扩展在磁盘上、存储器中,或两者中。\n[0003] 当对文件打包以创建自解压可执行文件时,可以采用许多不同类型的压缩算法以及打包技术。这些技术中的某些是已知的并有文档记载的,而其他技术不是这样。对相同文件采用不同的技术来创建自解压可执行文件将产生不同的文件——由于不同的打包器(packer)以及不同的压缩算法所产生的不同结果,打包代码(packing code)和经打包的代码(packed code)两者都可能不同。此外,如果使用未知的或文档未记载的技术来将文件打包为自解压可执行文件,则可能甚至难以确定打包代码和经打包的代码之间的区别。\n[0004] 自解压可执行文件的这些特性常常被恶意软件开发者利用以对反病毒程序或恶意软件检测程序隐藏恶意软件。检测恶意软件的一种常见的方法是签名扫描。利用签名扫描,对文件进行扫描以发现已知或被怀疑与恶意软件相关联的位模式或签名。当文件中的位模式匹配已知恶意软件的签名时,则可将该文件标识为恶意软件或标识为包含恶意软件。然而,恶意可执行文件的签名可以被轻松地更改以力图误导可执行文件。当恶意软件被打包时,可能避开检测,因为经拆包的恶意软件的已知签名将不会匹配经打包的恶意软件文件的任何位模式。\n[0005] 为了尝试克服隐藏恶意软件的这些企图,反病毒程序和恶意软件检测程序可以采用多项技术。一项技术是在存储器中提取经打包的代码而不执行它,然后,尝试对经解压缩的二进制文件扫描恶意软件签名。可以通过仿真经打包代码的执行来提取该经打包的代码,或者如果打包算法是已知的,则由反病毒程序来执行提取。如果打包技术不是公知的或未经文档记载,则在反病毒程序的控制下来提取经打包的代码可能无法是可能的。此外,许多打包算法在检测到正在由调试器或通过执行仿真来执行拆包之后,使用反仿真和反调试技术来简单地终止拆包过程。对代码流的诸部分标记时间戳是可用于判断代码正在被仿真的标准方法。类似地,标识代码正在被调试可以通过查询操作系统来容易地确定。\n[0006] 即使自解压可执行文件被允许执行或被仿真,反病毒程序也可能在确定执行的拆包部分何时完成以及原始压缩的可执行文件何时开始执行时存在困难。在自解压可执行文件中,拆包代码和经打包的可执行文件是相同的二进制文件的部分,并且在存储器中确定这两者之间的区别可能是困难的。\n[0007] 克服隐藏恶意软件的企图的另一技术是一旦标识了经打包的恶意软件的新签名,就将包含恶意软件的已知的自解压可执行文件的签名添加到反病毒签名数据库中。此技术的弱点在于,可以通过稍微更改打包器代码或打包技术从而产生不同的自解压可执行文件并由此产生不同的签名来轻易地避开该技术。将导致打包技术中的这些变化的签名添加到反病毒签名数据库中会导致增加签名数据库的尺寸。这导致签名的数量以及维持签名文件的难度会相应地增大的问题。此外,由于可按不同的顺序,使用不同的打包算法来重复任意次数的打包过程,从而创建将标识并维持的更大数量的签名,因此可能进一步挫败这些努力。\n附图说明\n[0008] 图1是示出现有技术中已知的可执行文件101和经压缩的自解压可执行文件102(可能具有更小的尺寸)的简化结构的框图100。\n[0009] 图2是示出能够被配置成促进一个或多个所公开的实施例的基础结构200的框图。\n[0010] 图3是示出具有可根据一个或多个所公开的实施例而配置的处理单元的计算机的框图。\n[0011] 图4是示出具有虚拟机监视器、访客操作系统和应用的计算机系统的软件栈的框图。\n[0012] 图5是示出根据一个或多个所公开的实施例的用于通用对可执行文件拆包直到不要求进一步的拆包的技术的流程图。\n[0013] 图6A是示出根据一个或多个所公开的实施例的用于在可执行文件的通用拆包以及执行阶段期间设置存储器页面许可并解决存储器页面许可违规以控制对存储器的页面的存储器访问的技术的流程图。\n[0014] 图6B示出状态图650,其示出了可执行文件从其二进制加载时刻到其执行的终止的受控执行的状态转换。\n[0015] 图7是示出根据一个或多个所公开的实施例的在可执行文件的通用拆包和执行阶段期间所看到的页面存储器许可的各阶段的框图。\n具体实施方式\n[0016] 如上文所解释的那样,不同的打包器的可用性以及可对可执行文件打包多次的事实导致通过将经打包的恶意可执行文件与签名进行比较来标识它是困难的。经打包的恶意可执行文件的每一个经标识的变体都可能需要在反病毒程序的病毒签名数据库中的其自身的签名。这导致病毒签名数据库增长并增加了维护成本和精力——签名文件更新必须被传递到使用反病毒程序的最终用户计算机并由其下载。此外,这些相同的因素也使确定何时应用签名检测算法复杂化。\n[0017] 同样如上文所解释的那样,尝试对经打包的文件拆包以暴露原始的可执行文件也呈现了诸多挑战。由于拆包代码与经打包的可执行文件组合,因此,标识拆包代码完成执行且原始的二进制文件开始执行的时刻可能是困难的。为了避免对原始的可执行文件的执行,反病毒程序可尝试对经打包的可执行文件拆包,而不是让拆包器代码执行。为了做到这一点,反病毒程序必须配备有用于对可执行文件打包的拆包算法。然而,当使用了未知的或未经文档记载的打包技术时,反病毒程序可能不能对该软件拆包。在这些类型的实例中,必须通过包括拆包器算法来更新反病毒软件。由于拆包器算法可能时复杂的,因此,反病毒软件开发者可能需要花费相当长的时间(数月或数年)来包括用于新发现的打包算法的解决方案。此外,甚至通过对打包器算法的轻微的更改就会规避这些努力或使这些努力更费力。\n[0018] 如下文中进一步解释的那样,公开了通过使用用于以受控方式来通用对经单次或多次打包的应用拆包以检测恶意软件的系统和方法来解决这些及其他问题的技术。对经打包的应用通用地拆包允许独立于对拆包算法的知晓并独立于对拆包存根(stub)的实现的知晓就可对应用拆包。可以使用与硬件辅助的虚拟化相关联的功能来帮助以受控方式通用地对经打包的应用拆包。这些技术可以减少或消除为单个类型的恶意软件维持多个签名的需求。\n[0019] 参考图1,框图100示出两个文件(根据现有技术的可执行文件以及该文件的经打包版本)之内的内部区段。通用可执行文件101表示扩展(即,运行时)形式的可执行二进制文件。还示出了经打包的可执行文件102,其是通用可执行文件101通过打包过程被修改的结果。通过由开发者对源代码、对象文件以及库执行编译以及链接过程已创建了可执行文件101。可执行文件101可被组织成三个不同的区段。二进制头部105保存有关该可执行二进制文件的其余部分(包括代码段110和数据段115)的组织的信息。二进制头部105还包括对于文件中所包括的所有区段的存储器许可,当将可执行文件101加载到存储器中时,由操作系统加载器实施这些存储器许可。当被加载到存储器中时,每一个区段都开始于由操作系统定义的存储器页面的边界处。来自文件的区段并不必须仅包含一个存储器页面——相反,每一个区段都可以横跨整数数量的页面。\n[0020] 程序执行从可执行二进制文件101中的代码段中的一个区段的某位置开始(即,运行时),该位置通常被称为程序的“入口点”。取决于编译器/汇编器将“主”函数放在二进制文件中的什么位置,该入口点可在代码段中的任何地方。入口点不需要在任何特定的代码段的开始处开始,这还意味着入口点不一定开始于任何特定的存储器页面的开始处。\n[0021] 打包器可以经由在本文中被称为打包过程的过程来对可执行文件101打包并压缩以创建经打包的可执行文件102。典型的打包器可以执行复杂且唯一的操作,但是,如在此所描述的那样,当从高层级来看时,几乎所有的打包器都执行相对简单操作集。在创建经打包的可执行文件102时,打包器过程在这些区段上使用压缩算法来压缩可执行文件101的代码段110和数据段115。这通常是主要为了减小可执行文件的文件尺寸而执行的,但是,正如恶意软件的情况那样,它可以主要为了改变恶意软件的签名而执行。一旦压缩了这些区段,可将它们置于经打包的可执行文件102中的新区段(经打包的代码和数据135)。或者,打包器还可以将代码和数据打包到其中包含了拆包代码的相同区段中。如此,打包器代码段130和经打包的代码和数据135可以在分开的区段中或在一个区段中。\n[0022] 打包过程通常还创建具有当被执行时在存储器中将获取的预定尺寸的虚拟代码段125。该尺寸通常被计算为大于或等于将在原始的可执行文件101中发现的经解压缩的经打包代码和数据135的尺寸。由于虚拟代码段125是计划用于存储器中经解压缩的数据的区段,因此,它不一定占据经打包的可执行文件102本身中的任何空间。相反,可将包含经打包的可执行文件102的文件中的其尺寸反映为在对打包器代码的解压缩过程的执行之前在存储器中所需的存储器页面的数量。由打包器转换代码在更新的二进制头部120中指定虚拟代码段125的细节。当将由操作系统将二进制可执行文件加载到存储器中时,通常还在二进制头部(例如,二进制头部105或更新的二进制头部120)中指定特定区段将在存储器中获取的存储器页面的数量。因此,即使盘上可执行文件上的区段尺寸为零,该区段也可在由操作系统加载时在存储器中获取一些空间。如此,打包过程通过压缩代码和数据已减小了整个二进制文件的尺寸(即,盘尺寸和下载尺寸),但是准备了足够的存储器以便当在执行时拆包到存储器时保存经解压缩的代码和数据。\n[0023] 或者,并非使用虚拟代码段125,而是驻留在打包器代码段130的打包器存根可以在执行期间分配足够的进程存储器以当在存储器中拆包时保存经解压缩的代码和数据。然而,拆包器存根仍必须将这些存储器页面标记为可执行的以执行它们,并可以监视此过程。\n因此,一旦执行开始,则如果将执行许可分配给存储器页面,那么可将这些存储器页面标识为可能包含经解压缩的代码和数据。如果使用了用于存储器分配的这种技术,则可以通过监视存储器分配来标识经分配的存储器范围,并且可将经分配的存储器范围视为虚拟代码段125。由于大多数打包器都采用将虚拟代码段125用作用于经解压缩的代码和数据的占位符的技术,因此,在以下示例中引用此技术。\n[0024] 打包器代码段130是包含运行时拆包器存根代码的、被添加到经打包的可执行文件102的新代码段。此拆包器存根将从经打包的代码和数据段135读取经打包的代码和数据,解压缩它,并将它置于虚拟代码段125中。更具体而言,可将经解压缩的代码置于被分配用于保存虚拟代码段的存储器中。在原始的打包过程中,二进制头部105被修改为更新的二进制头部120以确保该头部的入口点字段将调用打包器代码段130中的拆包器存根。\n[0025] 可执行文件的打包、传输以及随后的拆包可以在网络基础结构的上下文中执行。\n现在参考图2,示意性地示出了基础结构200。基础结构200包含计算机网络202。计算机网络\n202包括当今可用的许多不同类型的计算机网络,诸如,因特网、企业网络或局域网(LAN)。\n这些网络中的每一个都可以包含有线或无线设备,并使用任意数量的网络协议(例如,TCP/IP)来进行操作。计算机网络202连接到网关和路由器(由208表示)、最终用户计算机206以及计算机服务器204。在基础结构200中还示出了用作蜂窝通信的蜂窝网络203。如在本领域内已知的那样,蜂窝网络支持蜂窝电话以及许多其他类型的设备(例如,未示出的平板计算机)。基础结构200中的蜂窝设备被示为蜂窝电话210。基础结构200中示出的设备中的任何一个都可以尝试执行自解压可执行文件。如果设备的处理器包括所需的能力,则可以在其中实现本公开的概念。基础结构200是说明性的,并仅作为示例,可根据需要在所公开的技术中采用其他基础结构。\n[0026] 现在参考图3,以框图形式示出了根据各实施例的在所公开的技术中使用的示例处理设备300。处理设备300可以在各种设备中实现,诸如,在蜂窝电话210、网关或路由器\n208、最终用户计算机206,或计算机服务器204中。示例处理设备300包括系统单元305,该系统单元305可以任选地连接到输入设备330(例如,键盘、鼠标、触屏等)和显示器335。程序存储设备(PSD)340(有时被称为硬盘、闪存或计算机可读介质)与系统单元305包括在一起。还与系统单元305包括在一起的可以是网络接口320,其用于经由网络(诸如,蜂窝网络203或计算机网络202)与其他计算和公司的基础结构设备(未示出)或其他蜂窝通信设备进行通信。网络接口320可以被包括在系统单元305之内或在系统单元305的外部。在任一种情况下,系统单元305通信地耦合到网络接口320。程序存储设备340表示任何形式的非易失性存储器,包括但不仅限于,所有形式的光和磁存储器(包括固态、存储元件、包括可移动介质),并且程序存储设备340可以被包括在系统单元305之内或在系统单元305外部。程序存储设备340可以用于存储用于控制系统单元305的软件,供处理设备300使用的数据,或两者。\n[0027] 可对系统单元305编程以执行根据本公开的方法。系统单元305包括一个或多个处理单元(由处理单元310表示)、输入/输出(I/O)总线325以及存储器315。可以使用输入/输出总线325来访问存储器315。处理单元310可包括任何可编程控制器设备,包括例如,大型机处理器、蜂窝电话处理器、或来自英特尔公司的 凌动TM(ATOMTM)、 酷\n睿TM(CORETM)、 以及 处理器家族,以及来自\nARM的Cortex和ARM处理器家族中的一个或多个成员。(英特尔、英特尔凌动、酷睿、奔腾和赛扬是英特尔公司的商标。CORTEX是ARM有限公司的注册商标。ARM是ARM有限公司的注册商标。)存储器315可包括一个或多个存储器模块,并可包括随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PROM)、可编程读写存储器以及固态存储器。处理单元310还可以包括某个内部存储器,包括例如,专用于特定处理单元并与用于对可执行二进制文件拆包的其他处理单元隔离的高速缓存存储器或存储器。\n[0028] 处理设备300可以具有驻留在其上的任何所需的操作系统。所公开的检测技术的诸实施例可以使用任何所需的编程语言来实现,并可以实现为一个或多个可执行程序,这些可执行程序可以链接到可以由检测软件/固件的提供商、操作系统的提供商或合适的库例程的任何其他所希望的提供商供应的可执行的例程的外部库。如本文中所使用的那样,术语“计算机系统”可以是指单个计算机系统或一起协作以执行被描述为在计算机系统上执行或由计算机系统执行的功能的多个计算机。\n[0029] 为了准备在处理设备300上执行所公开的诸实施例,可提供存储在任何类型的非瞬态计算机可读介质上的用于将处理设备300配置成执行所公开的诸实施例的程序指令,或可将这些程序指令从计算机服务器204下载到程序存储设备340上。尽管在图3中示出了单个处理设备300,但是,任意数量的处理设备300可以用于根据所公开的诸实施例而配置的设备中。\n[0030] 硬件辅助的虚拟化\n[0031] 虚拟化是允许计算机系统或设备并行地运行多个操作系统而无需在操作系统代码中进行任何修改的特征。这种类型的虚拟化可以区别于要求对托管的操作系统进行修改的准虚拟化。许多最近的基于消费者的执行处理器支持硬件辅助的虚拟化。参考图4,虚拟机监视器(VMM)420(还可以被称为管理程序(hypervisor)层)是驻留在系统硬件410(其可以例如是来自图3中处理设备300)与一个或多个操作系统(“OS”)430之间的软件层。在虚拟化系统上,OS 430可称为“访客”OS 430。在不采用虚拟化的系统上,OS 430通常直接与硬件\n410对接。当使用虚拟化时,OS 430通过VMM 420与硬件410对接。VMM 420能够支持多个OS(诸如,图4中示出的三个OS 430),并且将对系统资源的专用或共享访问分配给每一个OS \n430。按此方法,每一个OS 430都可以与其他OS 430并发地运行。此外,每一个OS 430都可以运行多个应用(诸如,所示出的在图4中的OS 430上运行的诸应用440)。\n[0032] 在不具有虚拟化的系统上,OS内核通常在系统上执行的其他软件之上以最高的特权等级执行。在具有虚拟化的情况下,VMM 420可以使用处理器的硬件虚拟化特征,并以甚至高于OS内核的特权运行。在具有硬件辅助的虚拟化的情况下,可由VMM 420实施存储器页面访问许可。相应地,VMM 420能够设置对物理存储器页面的读取/写入/执行许可。可将每一个存储器页面定义为允许/不允许读取、写入和执行特权。由VMM 420为在系统上执行的OS 430来设置这些许可。如果OS 430违背对于给定存储器页面的许可,则控制被立即转移到VMM 420中的预定义的位置,同时挂起该OS 430。VMM 420可以配备有通用拆包器422,该通用拆包器422将在发生页面许可违规时帮助分析,分类并扫描存储器中的运行时可执行文件。通用拆包器422可以包含试探法(heuristics)引擎424、扫描器426,以及包含试探法统计信息428的数据库或存储器。\n[0033] 当由OS 430请求对存储器页面的访问时,处理单元310将在准许所请求类型的访问之前将检查存储器页面许可。相应地,如果页面未被设置执行许可,则处理单元310不允许来自存储器页面的任何执行。当编译程序时,程序员可诸如通过使用编译器指引来专门设置对于区段的页面的其他许可,诸如通过使用编译器指令。再次参考图1,需要代码段110对于它们的存储器页面被至少设置读取与执行许可。如果不这样,则如果启用了数据执行保护,那么可执行文件101可能在执行的处理器上生成数据执行阻止错误。当被加载到存储器中时,需要数据段115对于它们的页面被设置至少读取许可。然而,可以对于数据段设置读取与写入许可两者。\n[0034] 使用硬件辅助的虚拟化的通用拆包\n[0035] 为了提供跨多个打包器和打包算法(已知或未知的)起作用的灵活的解决方案并限制与对经打包的可执行文件拆包相关联的困难,受控方法允许无需知晓拆包器或拆包算法的特定情况就通用地对经打包的可执行文件拆包。图5演示了方法500,其中,将经打包的可执行文件递送给目标计算机并开始执行。在505处,自解压可执行文件以打包格式或迭代打包格式到达目标机器。此刻,在510处,可对照已知签名来扫描该文件以校验它是否匹配任何已知恶意软件。然而,如上所述,此刻对照任何未经标识的经打包的可执行文件进行的恶意软件检测可能是不成功的。在515处,文件开始执行。此刻,二进制文件的拆包器代码片段(例如,来自图1的打包器代码段130)开始执行。在520处,拆包过程继续。如525处所示,如果已对文件进行了迭代打包,则必须对它进行迭代拆包。在此拆包过程完成之后,二进制文件的原始可执行文件被暴露。如530所示,此刻拆包器代码已完成执行且原始的可执行文件还未开始执行,在此刻可执行另一签名扫描。换言之,如点时刻530处所示,通用拆包将允许经打包的可执行文件执行并在控制被转移到或刚被转移到原始可执行文件的原始入口点(“OEP”)之前,防止如535处所示的执行。原始入口点是当可执行二进制文件处于其原始的未打包的形式时如它的二进制头部中所指定的入口点。如上文所指出的那样,可以使用仿真的执行来到达该点,但是,存在包含在检测到正在仿真打包器代码之后防止拆包过程进一步执行的反仿真代码的许多打包器。\n[0036] 下文描述使用硬件辅助的虚拟化来允许经打包的可执行文件以受控方式执行,同时使用试探法按规律的间隔来执行对存储器中的可执行文件的扫描以便刚好在控制被转移到OEP之前标识并扫描经拆包的可执行文件的技术。在不具有硬件虚拟化特征的系统中,或在不启用硬件虚拟化特征的情况下,如果存在高于OS特权等级的特权等级,则仍然可以在软件中使用和实现这些技术。\n[0037] 二进制文件的受控执行:硬件辅助的虚拟化\n[0038] 刚好在控制被转移到OEP之前捕捉到恶意软件是任何通用拆包解决方案的目标。\n为了实现这一点,以受控方式执行拆包代码,并按规律的间隔来扫描可执行文件的存储器空间并将其对照签名进行比较。\n[0039] 可以利用硬件辅助的虚拟化来实现受控执行。如上文所讨论的那样,以最高的特权等级执行的VMM 420能以页面级别的粒度来为OS页面访问设置读取/写入/执行(R/W/X)访问保护。针对OS访问对OS页面设置存储器保护的该机制可用于设置对经打包的可执行文件的区段以及其相关联的存储器的保护。每当页面访问许可违规发生时,VMM 420获取对执行的控制,并可以试探性地校验OEP转移是否将发生或充分的拆包是否已发生。此刻,可以执行对照恶意软件签名的扫描,或可以执行其他恶意软件检测技术。\n[0040] 为作出关于向OEP转移的试探性判断,通用拆包过程需要按关键间隔来控制对二进制文件的执行。可按如下方式定义这些关键间隔可将二进制文件加载时间定义为目标经打包的可执行二进制文件被加载到存储器中且还未开始执行的时间。入口点执行违规时间定义为将对执行的控制转移到经打包的二进制文件的入口点的时间。可将写入违规时间定义为尝试对由VMM 420标记为可执行且可读取的(但不是可写入的)页面写入的时间。可将页面执行违规时间定义为尝试执行来自由VMM 420标记为可读取且可写入(但不是可执行)的页面的指令的时间。\n[0041] 参考图6A,图600演示了用于控制自解压可执行文件的执行的方法。在二进制加载时间605处,解析经打包的可执行二进制文件的头部中的所有区段。在610处,在二进制头部中将区段标记为可执行与可写入(RWX)的情况下,使用VMM 420在与存储器中的该区段相关联的页面上分配读取与执行(R_X)的许可。对于这些页面,去除了写入许可。“RWX”和“R_X”是表示一个或多个读取、写入和执行许可的设置的符号的示例。如果这些区段的页面尝试在未来某时刻执行且不被写入到其上,则不应当引发标记。然而,如果来自这些区段中的一个区段的页面在被写入到其上之后执行,则存在它是正在被执行的原始的未打包代码的可能性。这是因为在拆包期间可能已将原始代码写入到存储器页面(即,写入访问),且后续的执行可指示原始的可执行文件正在执行。在已对文件打包多次的情形中,写入可以是将拆包代码的下一层写入到存储器页面中,由此后续的执行将不是对原始的可执行文件的执行,而是对拆包代码的迭代的执行。在任一种情况下,此时段呈现了可以执行恶意软件扫描的时间点。如此,对这些页面中的任何页面的写入访问生成“vmexit”,且控制被转移到VMM \n420。\n[0042] vmexit是将控制从OS 430转移到VMM 420的硬件辅助的虚拟化机制。当控制与VMM \n420在一起时,可以记录与拆包器代码的执行有关的处理器寄存器状态、栈指针和其他状态。一旦记录了这些状态并执行了其他任务(例如,建立试探性数据、扫描),则可以将控制往回传递到生成vmexit的OS 430或可以将控制传递到错误处理例程。\n[0043] 在615处,可以标识包含自解压可执行文件的入口点的页面,并且应当将对于该页面的许可设置为只读(R_)。在已由VMM 420设置了页面存储器中的所有许可之后,在620处,将控制返回到OS 430。如625处所示,对入口点的执行将在入口点执行违规时生成vmexit,并且VMM 420将获得控制。相应地,此刻可将表示执行的开始的栈指针值和栈内容记录在通用拆包器422的试探法统计信息428中。在执行的开始时的状态对于建立试探法是有用的,因为该状态是原始的未打包的程序所预期的状态。每当在违规时间之后将控制传递到VMM \n420时,如630处所示,还可基于由试探法引擎424进行的试探法分析,由扫描器426来执行对存储器的扫描。在635处,在二进制头部中将区段标记为可写入与可执行(RWX)的情况下,分配读取与执行但无写入(R_X)的许可。在改变了页面许可之后,可将控制返回到OS 430。\n[0044] 当自解压可执行文件的拆包器存根开始执行时,可能存在个页面访问违规,这些访问违规中的每一个都导致将控制传递到VMM 420。在这些次数中的每一次,可以收集试探法统计信息428(625),可以执行扫描(630),并可以调整许可且将控制返回到OS(635)。下文中将更详细地讨论违规以及基于违规的动作的示例。在某些情形中,当控制位于VMM 420处时,通用拆包器422可以通过扫描来确定识别了用于对反经迭代打包的可执行文件的打包迭代的已知打包算法。如果是,则通用拆包器422可以通过由其自身而不是由受控执行对内容进行拆包来继续进行。如果后续的拆包迭代是无法识别的,则通用拆包器422可以返回到对可执行文件的受控执行。\n[0045] 图6B示出了演示在可执行文件的执行期间的状态图650。状态1(655)表示上文已描述的二进制加载时间。当在二进制加载时间设置了许可并记录了状态之后,入口点执行违规时间时的vmexit导致进入状态2(660),在该时刻记录映像入口点状态。控制被返回到OS,执行通常在状态3(665)继续。\n[0046] 在写入违规时间,进入状态5(675),并且VMM 420将控制转移到通用拆包器422。通用拆包器422更新其内部登记试探法统计信息428。这可包括正在被写入的特定区段的的页面的数量,该特定页面已经被写入的次数等。通用拆包器422还使该特定页面对OS 430是可写入(+W)的,但去除执行(-X)访问。在状态6(680)处,基于试探法,通用拆包器422的试探法引擎424可以在存储器中触发对恶意软件签名的扫描。如果没有发现签名或如果基于试探法没有扫描被执行,则通用拆包器422确定拆包仍未完成,并将控制传递到OS 430,并且执行在状态3(665)处继续。如果发现了恶意软件签名,则如向状态7(685)的转换处所示,可以强制终止对可执行文件的执行。\n[0047] 类似地,在页面执行违规时间,进入状态4(670),并且VMM 420将控制转移到通用拆包器422。通用拆包器422更新其内部登记试探法统计信息428,其可包括已违背执行访问许可的特定区段的页面的数量、特定页面已违背执行访问许可的次数等。通用拆包器422还使特定页面对于OS430是可执行(+X)的,但是去除写入(-W)访问。可以在状态6(680)处执行扫描,并且执行可以在状态3(665)处继续或在状态7(685)处终止。\n[0048] 可以在每个页面违规时间执行对于签名的扫描,但是可以使用试探法来优化并节省处理资源以避免每当页面违规发生时都进行扫描。例如,在每一个页面执行违规时间,可以使用的一个试探法法将会将栈指针和栈内容与它们的原始值进行比较。如果栈指针值等于在入口点执行违规时间(即,状态2(660))时记录的栈指针值,并且栈内容也相同,则存在OEP即将执行的可能性。返回到它们的原始入口点执行违规时间的栈指针和栈内容的值可以指示拆包器过程已运行完成并且应当执行扫描。\n[0049] 另一试探法可以对从其中诱捕了页面执行违规的区段定位。如果该区段的所有页面都已被写入,并且这是在写入之后来自该区段的第一个执行违规,则很有可能已由拆包器存根对该区段中的所有页面拆包,并且控制正在被转移到OEP。此刻,应当执行扫描。在另一情形中,如果还没有对特定部分的所有页面写入,并且从该区段诱捕了第一个执行违规,则仍存在对该区段完全拆包的概率,并且应当执行扫描。可以使用其他技术来识别可执行文件的拆包的完成。\n[0050] 还可以在页面写入违规时间使用试探法。如果在写入违规时来源于其的写入违规的页面是正在被写入的特定区段的最后页面,则存在完全对该区段拆包的高概率。此刻,应当执行扫描。\n[0051] 以上示例试探法基于对其中控制可能正被传递到经拆包的二进制文件的OEP的情形的标识。根据需要,可以采用其他试探法。例如,可以至少部分地基于其他打包器的特定特性(诸如,打包器代码的签名、其他打包器的执行特性等)来建立额外的试探法。上文所描述的试探法可以与这些其他的试探法相结合,或其他试探法可以替换上文所描述的示例试探法。在需要新试探法来标识某些打包器的情况下,对新试探法机制的更新将可能比为反病毒程序写入新拆包器更迅速且更高效。\n[0052] 如上文所解释的那样,在二进制文件被完全拆包之后但是在该二进制文件已开始执行之前,优选地执行将病毒签名与该二进制文件进行比较。按此方法,二进制可执行文件不会通过打包进程而是误导性的以及被隐藏的,并可以直接在存储器中将该二进制可执行文件与病毒签名文件进行比较,同时在执行完恶意软件扫描之前防止该二进制文件执行。\n此外,可附加于或替代签名扫描来执行其他恶意软件检测技术。概括地说,允许拆包代码的执行,但是在经解压缩的经拆包的二进制文件开始原始入口点的执行之前,防止或中断执行。\n[0053] 图7示出了用于确定原始入口点的执行的开始的试探法法以及后续对其执行的阻止的示例。在图7中,示出了试探法的四个状态710、720、730和740。每一个状态示出在执行期间的某时刻对于存储器页面访问的给定集合为OS存储器页面P1、P2、P3、P4和P5设置的许可。如下文将详细地描述的那样,执行的进展导致状态的变化。存储器页面P1-P4形成虚拟代码段125,而页面P5形成打包器代码段130。在此示例中,打包器代码段130仅占据一个页面,即,页面P5。来自页面P5的拆包器存根将会将代码拆包为页面P1-P4。由更新的二进制头部120(在图6B中未示出)定义针对页面P1-P5的许可。\n[0054] 在初始状态710处,以与二进制头部中的定义不同的方式来设置针对这些页面的许可。如此,虽然二进制头部指定包含可执行拆包器存根的页面P5应当具有执行与写入许可,但是在初始状态710处,将页面P5设置为允许读取与写入许可,但不允许执行许可。相应地,在初始状态710处,页面P5被表示为“RW_”,并且执行将触发vmexit。类似地,虽然页面P1-P4在二进制头部中被定义为具有读取、写入与执行许可,但是在初始状态710处,页面P1-P4被设置为允许读取与执行许可,但不允许写入许可。相应地,在初始状态710处,页面P1-P4被表示为“R_X”。\n[0055] 当页面P5中的代码第一次尝试执行时将触发vmexit,因为页面P5没有被设置执行许可。如果将多个页面设置为写入访问,则可将那些页面中触发vmexit的第一个页面标识为入口点执行违规时间。在此示例中,在页面P5是仅有的此类页面的情况下,执行存储在页面P5中的任何地方的代码的第一次尝试是入口点执行违规时间的指示。在完成合适的处理之后,如上所述(诸如,记录栈指针、内容和其他状态信息),将页面P5许可改变为添加执行许可(即,启用“X”)但去除写入许可(即,禁用“W”)。这在第二状态720处示出。\n[0056] 参见页面P1-P4,这些页面在不具有写入许可的情况下已开始。随后,当在页面P1-P4中的任何一个处尝试写入时,触发vmexit。在这些页面中的一个页面中的任何地方的写入也是正在被写入的代码意图在稍后某时刻执行的指示。在该示例中,尝试对页面P1的写入,并触发vmexit。在状态730处,已将页面P1许可改变为添加了写入许可(即,启用“W”)但去除执行许可(即,禁用“X”)。如此,在页面P1处的任何后续的执行尝试都将触发vmexit,从而再次将控制返回到VMM 420。一旦已调整了P1的许可,则VMM 420将控制返回到OS 430,该OS 430接着将控制返回到拆包器存根。此刻,可允许原始的写入指令(其触发vmexit)完成,并且拆包器存根向页面P1写入。\n[0057] 按此方式,可以向页面P1-P4写入多次。每当在某页面处发生第一次写入尝试时,都将触发vmexit,并且将如上文参考页面P1所描述的那样改变许可。如上文所指出的那样,在这些时刻中的每个时刻,可在改变许可并且将控制返回到OS 430之前收集试探法统计信息428。状态740示出其中已尝试了向页面P1-P4中的每一个页面写入,生成vmexit,并且将许可改变为去除执行访问且准许写入访问的情形。如上文所指出的那样,在各状态处,基于试探法分析,可以执行扫描以判断签名是否可以被识别。\n[0058] 在状态740处,在该示例中,假设所有写入(即,拆包)都已经完成。此刻,来自P5的拆包器代码完成执行,并尝试将控制转移到经拆包的可执行文件的原始入口点(其驻留在P1-P4中的某处)。假设页面P3具有原始的未打包的可执行二进制文件的原始入口点(OEP),则页面P5尝试将控制转移给它。在页面P3中的任何地方的执行尝试生成vmexit。此刻,控制被转移到VMM 420,并且试探法通用拆包器引擎获得控制。此刻,通用拆包器引擎可确定页面P1-P4全部都已经被写入,并且这是该区段中的第一个执行违规。相应地,如上文所指出的那样,存在OEP正在执行的高机率,因此,应当扫描整个区段。\n[0059] 如果在此阶段页面P1-P4包含经拆包的恶意软件,则可以通过签名扫描来标识恶意软件。另一方面,如果没有发现任何东西,则可以将页面P3许可标记为允许执行访问且不允许写入访问。执行可以继续,直到vmexit再次触发,并满足新的试探法准则为止。最终,如果没有进一步的试探法被触发或页面P1-P4在拆包的多次迭代之后完成执行且没有对恶意软件的任何标识,则可确定经拆包的可执行文件不是恶意软件(或者至少而言,意软件签名对经拆包的二进制文件是未知的)。\n[0060] 示例\n[0061] 以下示例涉及本公开的进一步的实施例。\n[0062] 1.一种对自解压可执行文件拆包以检测恶意软件的方法,该方法通过以下操作实现:将子解压可执行文件加载到存储器中,该自解压可执行文件包括第一拆包存根和经打包的可执行文件;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件;\n使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶意软件。\n[0063] 2.示例1的方法,其中,经打包的可执行文件是包括一个或多个中间自解压可执行文件的经迭代地打包的可执行文件,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括这些指令使一个或多个处理单元:允许第一拆包存根将经打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及允许一个或多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,其中,指令使一个或多个处理单元对经拆包的可执行文件扫描恶意软件包括:这些指令使一个或多个处理单元对最终经拆包的可执行文件扫描恶意软件。\n[0064] 3.示例2的方法,其中,对经拆包的可执行文件扫描恶意软件进一步包括:对一个或多个中间自解压可执行文件中的至少一个扫描恶意软件。\n[0065] 4.示例2的方法,其中,如果检测到恶意软件,则最终经打包的可执行文件不被允许执行。\n[0066] 5.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一拆包存根写入到存储器页面中的代码的尝试。\n[0067] 6.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文件的入口点的执行。\n[0068] 7.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执行了代码的存储器页面的写入。\n[0069] 8.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行文件拆包进一步包括:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的执行;当第一拆包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判断是否应当扫描存储器;基于该判断来扫描存储器;以及允许第一拆包存根的执行继续。\n[0070] 9.来自前述示例中任何一个的方法,其中,在经拆包的可执行文件的执行之前来执行扫描该经拆包的可执行文件。\n[0071] 10.来自前述示例中任何一个的方法,其中,经打包的可执行文件是使用未知的或不可检测的打包算法来打包的。\n[0072] 11.来自前述示例中任何一个的方法,其中,一个或多个试探法包括:用于将在检测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。\n[0073] 12.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行文件拆包包括:在允许该第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件时,控制该第一拆包存根的执行。\n[0074] 13.一种配置成用于对自解压可执行文件拆包以检测恶意软件的系统,包括:存储器;以及一个或多个处理单元,其通信地耦合到该存储器其中,该存储器存储指令,这些指令使这一个或多个处理单元:将自解压可执行文件加载到存储器中,该自解压可执行文件包括第一拆包存根和经打包的可执行文件;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件;使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶意软件。\n[0075] 14.示例13的系统,其中,经打包的可执行文件是包括一个或多个中间自解压可执行文件的经迭代打包的可执行文件,其其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括指令使一个或多个处理单元:允许第一拆包存根将经打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及,允许一个或多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,其其中,指令使一个或多个处理单元对经拆包的可执行文件扫描恶意软件包括:这些指令使一个或多个处理单元对最终经拆包的可执行文件扫描恶意软件。\n[0076] 15.示例14的系统,其中,对经拆包的可执行文件扫描恶意软件进一步包括:对一个或多个自解压可执行文件中的至少一个扫描恶意软件。\n[0077] 16.示例14的系统,其中,如果检测到恶意软件,则最终经拆包的可执行文件不被允许执行。\n[0078] 17.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一拆包存根写入到存储器页面中的代码的尝试。\n[0079] 18.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文件的入口点的执行。\n[0080] 19.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执行代码的存储器页面的写入。\n[0081] 20.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行文件拆包进一步包括:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的执行;当第一拆包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判断是否应当扫描存储器;基于该判断来扫描存储器;以及,允许第一拆包存根的执行继续。\n[0082] 21.来自前述示例中任何一个的系统,其中,在经拆包的可执行文件的执行之前来执行扫描经拆包的可执行文件。\n[0083] 22.来自前述示例中任何一个的系统,其中,经打包的可执行文件是使用未知的或不可检测的打包算法来打包的。\n[0084] 23.来自前述示例中任何一个的系统,其中,一个或多个试探法包括:用于将在检测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。\n[0085] 24.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行文件拆包包括:在允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件时,控制第一拆包存根的执行。\n[0086] 25.一种计算机可读介质,包括存储在其上的指令,这些指令使一个或多个处理单元:将自解压可执行文件加载到存储器中,该自解压可执行文件包括第一拆包存根和经导报的可执行文件;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件;\n使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶意软件。\n[0087] 26.示例25的计算机可读介质,其中,经打包的可执行文件是包括一个或多个中间自解压可执行文件的经迭代打包的可执行文件,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括指令使一个或多个处理单元:允许第一拆包存根将经打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及,允许一个或多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,其中,指令使一个或多个处理单元对经拆包的可执行文件扫描恶意软件包括:这些指令使一个或多个处理单元对最终经拆包的可执行文件扫描恶意软件。\n[0088] 27.示例26的计算机可读介质,其中,指令使一个或多个处理单元对经拆包的可执行文件扫描恶意软件进一步包括:这些指令使一个或多个处理单元对一个或多个中间自解压可执行文件中的至少一个扫描恶意软件。\n[0089] 28.示例26的计算机可读介质,其中,如果检测到恶意软件,则最终经拆包的可执行文件不被允许执行。\n[0090] 29.来自前述示例中任何一个的计算机可读介质,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括:这些指令使一个或多个处理单元使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一拆包存根写入到存储器页面中的代码的尝试。\n[0091] 30.来自前述示例中任何一个的计算机可读介质,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括:这些指令使一个或多个处理单元使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文件的入口点的执行。\n[0092] 31.来自前述示例中任何一个的计算机可读介质,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括:这些指令使一个或多个处理单元使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执行代码的存储器页面的写入。\n[0093] 32.来自前述示例中任何一个的计算机可读介质,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包进一步包括这些指令使一个或多个处理单元:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的执行;当第一拆包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判断是否应当扫描存储器;基于该判断来扫描存储器;以及允许第一拆包存根的执行继续。\n[0094] 33.来自前述示例中任何一个的计算机可读介质,其中,在经拆包的可执行文件的执行之前来执行扫描经拆包的可执行文件。\n[0095] 34.来自前述示例中任何一个的计算机可读介质,其中,经打包的可执行文件是使用未知的或不可检测的打包算法来打包的。\n[0096] 35.来自前述示例中任何一个的计算机可读介质,其中,一个或多个试探法包括:\n用于将在检测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。\n[0097] 36.来自前述示例中任何一个的计算机可读介质,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括:这些指令使一个或多个处理单元在允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件时,控制第一拆包存根的执行。\n[0098] 37.一种配置成用于对自解压可执行文件拆包以检测恶意软件的设备,包括用于执行下列操作的模块:将自解压可执行文件加载到存储器中,该自解压可执行程序包括第一拆包存根和经打包的可执行程序;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件;使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶意软件。\n[0099] 38.示例37的设备,其中,经打包的可执行文件是包括一个或多个中间自解压可执行文件的经迭代打包的可执行文件,其中,指令使一个或多个处理单元允许第一拆包存根对经打包的可执行文件拆包包括这些指令使一个或多个处理单元:允许第一拆包存根将经打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及允许一个或多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执行文件拆包为最终经拆包的可执行文件为止,其中,指令使一个或多个处理单元对经拆包的可执行文件扫描恶意软件包括:指令使一个或多个处理单元对最终经拆包的可执行文件扫描恶意软件。\n[0100] 39.示例38的设备,其中,对经拆包的可执行文件扫描恶意软件进一步包括:对一个或多个自解压可执行文件中的至少一个扫描恶意软件。\n[0101] 40.示例38的设备,其中,如果检测到恶意软件,则最终经拆包的可执行文件不被允许执行。\n[0102] 41.来自前述示例中任何一个的设备,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一拆包存根写入到存储器页面中的代码的尝试。\n[0103] 42.来自前述示例中任何一个的设备,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文件的入口点的执行。\n[0104] 43.来自前述示例中任何一个的设备,其中,允许第一拆包存根对经打包的可执行文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执行代码的存储器页面的写入。\n[0105] 44.来自前述示例中任何一个的设备,其中,允许第一拆包存根对经打包的可执行文件拆包进一步包括:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的执行;当所述第一开包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判断是否应当扫描存储器;基于该判断来扫描存储器;以及允许第一拆包存根的执行继续。\n[0106] 45.来自前述示例中任何一个的设备,其中,在经拆包的可执行文件的执行之前来执行扫描经拆包的可执行文件。\n[0107] 46.来自前述示例中任何一个的设备,其中,经打包的可执行文件是使用未知的或不可检测的打包算法来打包的。\n[0108] 47.来自前述示例中任何一个的设备,其中,一个或多个试探法包括:用于将在检测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。\n[0109] 48.来自前述示例中任何一个的设备,其中,允许第一拆包存根对经打包的可执行文件拆包包括:在允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件时,控制第一拆包存根的执行。\n[0110] 49.一种配置成用于对自解压可执行文件拆包以检测恶意软件的设备,包括:用于将自解压可执行文件加载到存储器中的装置,该自解压可执行文件包括第一拆包存根和经打包的可执行文件;用于允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件的装置;用于独立于对第一拆包存根的知晓而使用一个或多个试探法来检测第一拆包存根的完成的装置;以及用于对经拆包的可执行文件扫描恶意软件的装置。\n[0111] 50.前述示例的设备,其中,经打包的可执行文件包括自解压可执行程序的序列,该序列除最后一个成分之外的每一个成分包括拆包存根和后继自解压可执行文件,其中,最后一个成分包括最终拆包存根和最终经打包的可执行文件,其中,用于允许第一拆包存根对经打包的可执行文件拆包的装置包括:用于允许第一拆包存根将经打包的可执行文件拆包为自解压可执行文件的序列的第一成分的装置;以及,用于允许自解压可执行文件的序列的每一个成分对后继自解压可执行文件拆包,直到最终拆包存根将最终经打包的可执行文件拆包为最终经拆包的可执行文件的装置,其中,用于对经拆包的可执行文件扫描恶意软件的装置包括:用于对最终经拆包的可执行文件扫描恶意软件的装置。\n[0112] 以上示例中的特定细节可被用在一个或多个实施例中的任何地方。例如,也可将以上所描述的设备的所有任选特征实现为本文中所描述的方法或过程。进一步,可将以上示例实现在系统中的一个设备或多个设备中。\n[0113] 以上所描述的示例和实施例可以被实现为具体化在计算机可读存储介质中的计算机可执行指令或代码。可将计算机可执行指令或计算机程序产品以及在所公开的技术的实现期间创建并使用的任何数据存储在一个或多个有形的计算机可读存储介质中,诸如,光介质盘(例如,DVD、CD)、易失性存储器组件(例如,DRAM、SRAM)或非易失性存储器组件(例如,闪存、盘驱动器)。计算机可读存储介质可以被包含在诸如固态驱动器、USB闪存驱动器和存储器模块之类的计算机可读存储设备中。\n[0114] 在前述的描述中,为了进行说明,阐述了众多特定细节以提供对所公开的诸实施例的全面理解。然而,对本领域技术人员显而易见的是,可在没有这些特定细节的情况下实践所公开的诸实施例。在其他实例中,以框图形式示出结构和设备以避免使所公开的诸实施例含糊。对不具有下标或后缀的编号的引用被理解为引用对应于所引用编号的下标和后缀的全部实例。此外,已出于可读性和指导性目的选择了本公开中所使用的语言,可能未选择这些语言来描绘或限定发明主题,借助于确定此类发明主题所必需的权利要求书。说明书中对“一个实施例”或对“实施例”的引用意味着结合这些实施例所描述的特定特征、结构或特性被包括在至少一个所公开的实施例中,并且不应当将对“一个实施例”或“实施例”的多次引用理解为一定全都引用同一个实施例。\n[0115] 还应当理解,以上描述旨在是说明性的而非限制性的。例如,上文所描述的诸实施例可彼此相结合地使用,并且能以不同于所示的顺序来执行说明性过程步骤。在回顾了以上描述之后,许多其他实施例对本领域技术人员将是显而易见的。因此,应当参照所附权利要求书以及被授予权利的此类权利要求的等效方案的完整范围来确定本发明的范围。在所附权利要求书中,术语“包括”(“including”)和“其中”(“in which”)被用作相应的术语“包括”(“comprising”)和“其中”(“wherein”)的简明英语等效词。
法律信息
- 2019-08-20
专利权人的姓名或者名称、地址的变更
专利权人由迈克菲股份有限公司变更为迈克菲有限责任公司
地址由美国加利福尼亚州变更为美国加利福尼亚州
- 2018-02-06
- 2015-11-25
实质审查的生效
IPC(主分类): G06F 21/56
专利申请号: 201480008695.6
申请日: 2014.03.03
- 2015-10-28
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2012-04-04
|
2011-12-30
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |