对软件程序集的本机图像进行防病毒检查的系统和方法_2

文档序号:9922226阅读:来源:国知局
位系统 是C:\Windows\System32\MSCorEE. dll)。程序集的源代码的实例按以下存在:
[0048]为了方法的执行(为了方便起见,代码以其原始形式存在,且并未编译成CIL代 码),如,方法System· Console。WriteLine(〃Kaspersky〃),JIT编译器将CIL代码转换成机器 命令。
[0049] 图2示出了执行程序集代码的示例性方法。首先,在执行函数MainO之前,CLR环境 找出所有公告的类型(级别)(例如,类型Console)。接下来,CLR环境确定方法,将它们组合 在统一〃结构〃内的记录中(一个方法,如类型Console中分别限定那样)。该条目(entry)包 含可找到方法的实施方式所处的位置。在方法WriteLine的首次访问中,调用JIT编译器。 JIT编译器知晓调用的方法和限定该方法的类型。一旦调用,则JIT编译器搜索对应的程序 集的元数据来实施方法代码(即,实施方法胃1';^61^116(81:1';[1^81:1')的代码)。]11'编译器然 后将CIL代码编译成机器代码,且将编译的代码保存在动态存储器中。接下来,JIT编译器返 回类型数据(控制台)的内部〃结构〃,且以具有机器代码的存储器区段的地址替换调用的方 法的地址。方法Ma i η ()又访问方法Wr i t e L i n e (s t r i n g s t r)。由于已经编译了代码,故访问 没有JIT编译器调用。在执行方法WriteLine(string str)之后,控制回到方法MainO。
[0050] 从描述中得出的是,当JIT编译器将CIL代码转换成处理器指令时,该函数仅在第 一调用时工作〃较慢〃。在所有其它情况中,代码已经在存储器中,且提供为针对给定处理器 优化。然而,如果又一个程序在另一个过程中开始,则将为了此同一方法又调用JIT编译器。
[0051] 上文所述的本机图像解决了在第一调用时程序缓慢工作的问题。当加载程序集 时,将加载图像,机器代码将从其执行。使用该技术,有可能加速应用的加载和运行,因为 JIT编译器不需要编译任何东西,且/或还每次重新创建数据结构。其所有都取自图像。图像 可对于任何给定的.NET程序集创建,而不管其是否安装在GAC中。对于编译,在一个实例中, 人们使用由路径%评1冊11?%\]\1;[(31'080;1^.呢1'\?瓜1116¥0冰\〈?抑1116¥0冰_^^;[011>\1^611.6叉6 定位的实用程序ngen.exe。在ngen.exe启动时,使用了 JIT编译器创建程序集的CIL代码的 机器代码,且结果保存至本机图像缓存("NIC")中的盘上。编译在本地装置上完成,考虑了 其软件和硬件配置,且因此,图像应用仅用于编译其的环境。创建此图像的目的在于提高管 理的应用的有效性,即,在JIT编译的地方加载机器代码完成的程序集。
[0052] 如果程序集的代码由许多应用使用,则图像的创建显著增大了启动和执行应用的 速度,因为图像可由许多应用同时使用,同时由JIT编译器即时生成的代码仅由其为之编译 的应用的副本使用。
[0053] 至可编译图像的路径形成为以下,例如:C: \Windows\assembly\NativeImages_ v4·0·30319_32\Kaspersky\9c87f327866f53aec68d4fee40cde33d\Kaspersky.ni·dll,其 中:
[0054] C: \Windows\assembly\Native Images 是至系统的图像缓存的路径;
[0055] ν4·0·30319_32是〈版本.NET框架>_〈处理器架构(32or 64)>;
[0056] Kaspersky是程序集的易记名称;
[0057] 9c87f327866f53aec68d4fee40cde33d是应用的哈希值;以及
[0058] Kaspersky · ni · dl 1是〈程序集的易记名称>· ni ·〈扩展名〉。
[0059]在创建64位应用的程序集ngen.exe的机器代码的图像时,相关部分可保存在注册 表分支 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ · NETFramework\v2 · 0 · 50727\ NGenService\Roots中,对于32位应用,可保存在HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Microsoft\.NETFramework\v2·0·50727\NGenService\Roots\* 〇 [0060] 如果对于位于GAC中的程序集安装图像,则可调用分支:"_\Roots\ Accessibil ity,版本=2 · 0 · 0 · 0,Culture = Neutral,Publ icKeyToken = b03f5f7f lld50a3a,processorArchitecture=msil。但如果程序集并未安装在GAC中,则其 可调用:··ARootsXCz/Program Files(x86)/ATI Technologies/ATI .ACE/Core-Static/ A4·Foundation·DLL。
[0061 ] i_Wind〇WS8 之前,开发者总是必须自己利用ngen.exe(或通过配置安装程序) 来开始程序集的图像的创建、更新和移除。在Windows ?中,可为某些冒indow ?程序集 自动地创建图像。
[0062] 在一个特定情况中,本机图像服务用于控制图像。这允许在装置静止不动时开发 者推迟安装、更新和移除机器代码(这些进程随后执行)的图像。本机图像服务由安装应用 或更新程序启动。这借助于实用程序ngen.exe完成。该服务结合保存在Windows?注册表 中的请求队列进行工作,各个请求具有其自身的优先级。形成的优先级确定了将何时执行 任务。
[0063] 在另一个特定情况中,机器代码的图像不但根据开发者或管理员的主动性创建, 而且由.NET框架平台自动创建。.NET框架平台自动地创建图像,跟踪JIT编译器的工作。大 体上,在应用的操作期间创建图像花费很多时间,且因此,该操作通常随后被执行,为此目 的,CLR环境将任务置于队列中,且在装置空闲期间执行任务。
[0064] CLR环境使用程序集结合模块(即,程序集结合器)来找出在执行对应的程序集时 加载的程序集。CLR可使用若干类型的结合模块。图像结合模块(即,本机结合器)用于搜索 图像。搜索所需的图像在两个阶段中执行,首先,给定模块识别文件系统中的程序集和图 像,且其次,给定模块检查图像与程序集的对应关系。
[0065] 图3示出了运行结合模块的方法。如图所示,在步骤310中,程序集结合模块搜索程 序集,搜索在GAC中执行,GAC预先假定了搜索的程序集被签名且程序集的内容未被读取;且 在应用目录中,其中打开程序集且读取元数据。
[0066] 接下来,在步骤320中,图像结合模块在对应于识别的程序集的NIC中搜索图像。在 识别图像的情况中,这在步骤330中被检查,且图像结合模块在步骤340中从图像读取所需 的数据和元数据,以确保图像满足执行仔细分析的某些标准,包括但不限于,查阅:
[0067] ?强名称;
[0068] ?创建时间(图像应当比程序集更近);
[0069] ?程序集和图像的MVID;
[0070] · .NET框架的版本;
[0071] ?进程器架构;以及
[0072] ?相关图像的版本(例如,图像mscorlib.dll)。
[0073] 如果程序集没有强名称,则MVID用于检查。在步骤350处,分析图像来确定其是否 是当前的,且如果其不是当前的,则控制在步骤370中传递至JIT编译器。否则,来自图像的 代码在步骤360中加载。
[0074] 从前述描述得出的是,本机图像的数目大致超过程序集的数目,而且由相同父程 序集生成的本机图像的数目对于不同的设备以及不同的图像版本来说可能是不同的,所有 这些都极大使分配图像的任务复杂化。一些常规文件分类方法使用云服务等,但还未创造 出能够正确且有效地分类图像的解决方案。

【发明内容】

[0075] 公开了用于对软件程序集的本机图像进行防病毒检查的示例性系统、方法和计算 机程序产品。在一个方面,用于检测机器代码的恶意本机图像的示例性方法,所述方法包 括:通过硬件处理器接收所述机器代码的本机图像;通过硬件处理器识别父程序集,所述父 程序集用于创建所述本机图像;通过硬件处理器确定所述父程序集是否对应所述机器代码 的本机图像;和当所述父程序集不对应所述机器代码的本机图像时,通过硬件处理器确定 本机图像是恶意
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1