的代码的第一次尝试是入口点执行违规时间的指示。在完成合适 的处理之后,如上所述(诸如,记录栈指针、内容和其他状态信息),将页面P5许可改变为添 加执行许可(即,启用"X")但去除写入许可(即,禁用"W")。这在第二状态720处示出。
[0056] 参见页面P1-P4,这些页面在不具有写入许可的情况下已开始。随后,当在页面 P1-P4中的任何一个处尝试写入时,触发vmexit。在这些页面中的一个页面中的任何地方 的写入也是正在被写入的代码意图在稍后某时刻执行的指示。在该示例中,尝试对页面P1 的写入,并触发vmexit。在状态730处,已将页面P1许可改变为添加了写入许可(即,启 用"W")但去除执行许可(即,禁用"X")。如此,在页面P1处的任何后续的执行尝试都将 触发vmexit,从而再次将控制返回到VMM 420。一旦已调整了 P1的许可,则VMM 420将控 制返回到0S 430,该0S 430接着将控制返回到拆包器存根。此刻,可允许原始的写入指令 (其触发vmexit)完成,并且拆包器存根向页面P1写入。
[0057] 按此方式,可以向页面P1-P4写入多次。每当在某页面处发生第一次写入尝试时, 都将触发vmexit,并且将如上文参考页面P1所描述的那样改变许可。如上文所指出的那 样,在这些时刻中的每个时刻,可在改变许可并且将控制返回到0S 430之前收集试探法统 计信息428。状态740示出其中已尝试了向页面P1-P4中的每一个页面写入,生成vmexit, 并且将许可改变为去除执行访问且准许写入访问的情形。如上文所指出的那样,在各状态 处,基于试探法分析,可以执行扫描以判断签名是否可以被识别。
[0058] 在状态690处,在该示例中,假设所有写入(S卩,拆包)都已经完成。此刻,来自P5 的拆包器代码完成执行,并尝试将控制转移到经拆包的可执行文件的原始入口点(其驻留 在P1-P4中的某处)。假设页面P3具有原始的未打包的可执行二进制文件的原始入口点 (0EP),则页面P5尝试将控制转移给它。在页面P3中的任何地方的执行尝试生成vmexit。 此刻,控制被转移到VMM420,并且试探法通用拆包器引擎获得控制。此刻,通用拆包器引擎 可确定页面P1-P4全部都已经被写入,并且这是该区段中的第一个执行违规。相应地,如上 文所指出的那样,存在0EP正在执行的高机率,因此,应当扫描整个区段。
[0059] 如果在此阶段页面P1-P4包含经拆包的恶意软件,则可以通过签名扫描来标识恶 意软件。另一方面,如果没有发现任何东西,则可以将页面P3许可标记为允许执行访问且 不允许写入访问。执行可以继续,直到vmexit再次触发,并满足新的试探法准则为止。最 终,如果没有进一步的试探法被触发或页面P1-P4在拆包的多次迭代之后完成执行且没有 对恶意软件的任何标识,则可确定经拆包的可执行文件不是恶意软件(或者至少而言,意 软件签名对经拆包的二进制文件是未知的)。
[0060] 示例
[0061] 以下示例涉及本公开的进一步的实施例。
[0062] 1.-种对自解压可执行文件拆包以检测恶意软件的方法,该方法通过以下操作实 现:将子解压可执行文件加载到存储器中,该自解压可执行文件包括第一拆包存根和经打 包的可执行文件;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件; 使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶 意软件。
[0063] 2.示例1的方法,其中,经打包的可执行文件是包括一个或多个中间自解压可执 行文件的经迭代地打包的可执行文件,其中,指令使一个或多个处理单元允许第一拆包存 根对经打包的可执行文件拆包包括这些指令使一个或多个处理单元:允许第一拆包存根将 经打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及允许一个或 多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执 行文件拆包为最终经拆包的可执行文件为止,其中,指令使一个或多个处理单元对经拆包 的可执行文件扫描恶意软件包括:这些指令使一个或多个处理单元对最终经拆包的可执行 文件扫描恶意软件。
[0064] 3.示例2的方法,其中,对经拆包的可执行文件扫描恶意软件进一步包括:对一个 或多个中间自解压可执行文件中的至少一个扫描恶意软件。
[0065] 4.示例2的方法,其中,如果检测到恶意软件,则最终经打包的可执行文件不被允 许执行。
[0066] 5.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一 拆包存根写入到存储器页面中的代码的尝试。
[0067] 6.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文 件的入口点的执行。
[0068] 7.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执 行了代码的存储器页面的写入。
[0069] 8.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行 文件拆包进一步包括:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的 执行;当第一拆包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判 断是否应当扫描存储器;基于该判断来扫描存储器;以及允许第一拆包存根的执行继续。
[0070] 9.来自前述示例中任何一个的方法,其中,在经拆包的可执行文件的执行之前来 执行扫描该经拆包的可执行文件。
[0071] 10.来自前述示例中任何一个的方法,其中,经打包的可执行文件是使用未知的或 不可检测的打包算法来打包的。
[0072] 11.来自前述示例中任何一个的方法,其中,一个或多个试探法包括:用于将在检 测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对 经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。
[0073] 12.来自前述示例中任何一个的方法,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:在允许该第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件 时,控制该第一拆包存根的执行。
[0074] 13. -种配置成用于对自解压可执行文件拆包以检测恶意软件的系统,包括:存 储器;以及一个或多个处理单元,其通信地耦合到该存储器其中,该存储器存储指令,这些 指令使这一个或多个处理单元:将自解压可执行文件加载到存储器中,该自解压可执行文 件包括第一拆包存根和经打包的可执行文件;允许第一拆包存根将经打包的可执行文件拆 包为经拆包的可执行文件;使用一个或多个试探法来检测第一拆包存根的完成;以及,对 经拆包的可执行文件扫描恶意软件。
[0075] 14.示例13的系统,其中,经打包的可执行文件是包括一个或多个中间自解压可 执行文件的经迭代打包的可执行文件,其其中,指令使一个或多个处理单元允许第一拆包 存根对经打包的可执行文件拆包包括指令使一个或多个处理单元:允许第一拆包存根将经 打包的可执行文件拆包为一个或多个中间自解压可执行文件中的一个;以及,允许一个或 多个中间自解压可执行文件中的一个相继地拆包,直到最终拆包存根将最终经打包的可执 行文件拆包为最终经拆包的可执行文件为止,其其中,指令使一个或多个处理单元对经拆 包的可执行文件扫描恶意软件包括:这些指令使一个或多个处理单元对最终经拆包的可执 行文件扫描恶意软件。
[0076] 15.示例14的系统,其中,对经拆包的可执行文件扫描恶意软件进一步包括:对一 个或多个自解压可执行文件中的至少一个扫描恶意软件。
[0077] 16.示例14的系统,其中,如果检测到恶意软件,则最终经拆包的可执行文件不被 允许执行。
[0078] 17.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测执行先前由第一 拆包存根写入到存储器页面中的代码的尝试。
[0079] 18.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测自解压可执行文 件的入口点的执行。
[0080] 19.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行 文件拆包包括:使用硬件辅助的虚拟化来控制存储器页面访问许可以检测向先前在其中执 行代码的存储器页面的写入。
[0081] 20.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执行 文件拆包进一步包括:在检测到写入之后,使用硬件辅助的虚拟化来暂停第一拆包存根的 执行;当第一拆包存根的执行被暂停时,收集试探法统计信息;基于试探法统计信息来判 断是否应当扫描存储器;基于该判断来扫描存储器;以及,允许第一拆包存根的执行继续。
[0082] 21.来自前述示例中任何一个的系统,其中,在经拆包的可执行文件的执行之前来 执行扫描经拆包的可执行文件。
[0083] 22.来自前述示例中任何一个的系统,其中,经打包的可执行文件是使用未知的或 不可检测的打包算法来打包的。
[0084] 23.来自前述示例中任何一个的系统,其中,一个或多个试探法包括:用于将在检 测到第一拆包存根的完成之前记录的栈指针值和栈内容与在允许该第一拆包存根开始对 经打包的可执行文件拆包之前记录的栈指针值和栈内容进行比较的试探法。
[0085] 24.来自前述示例中任何一个的系统,其中,允许第一拆包存根对经打包的可执 行文件拆包包括:在允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件 时,控制第一拆包存根的执行。
[0086] 25. -种计算机可读介质,包括存储在其上的指令,这些指令使一个或多个处理单 元:将自解压可执行文件加载到存储器中,该自解压可执行文件包括第一拆包存根和经导 报的可执行文件;允许第一拆包存根将经打包的可执行文件拆包为经拆包的可执行文件; 使用一个或多个试探法来检测第一拆包存根的完成;以及,对经拆包的可执行文件扫描恶 意软件。
[0087] 26.示例25的计算机可读介质,其中,经打包的可执行文件是包括一个或多个中 间自解压可执行文件的经迭代打包的可执行文件,其中,指令使一个或多个处理单元允许 第一拆包存根对经打包的可执行文件拆包包括指令使一个或多个处理单元:允许第一拆包 存根将经打包的