二进制软件分析的制作方法

文档序号:6349017阅读:172来源:国知局
专利名称:二进制软件分析的制作方法
技术领域
本发明大体上涉及计算机系统,且更确切地说涉及用于分析可执行软件以辨识特定函数、算法或模块的方法及设备。
背景技术
计算机及移动装置配置有软件,所述软件用指令序列对计算机及移动装置的处理器发出指示。软件通常是用源代码编写的,源代码是一种人类可读的计算机编程语言。为了让处理器理解并执行指令序列,必须将源代码编译成可执行二进制代码,其是用处理器可执行格式对指令进行编码的1及0的序列。将源代码编译成完成的可执行格式的过程有时称为“构造”,且汇编的可执行软件有时称为二进制映象。随着计算机及移动装置应用的复杂性扩大,软件开发人员逐渐需要使其能够确定哪个源代码已被编译成可执行二进制映象的工具。此些工具可用于内部分析,例如确保在构造中包含漏洞修补(bug fix),或确保构造中不包含通用公共许可证(GPL)码。传统的用于确保发布的软件映象中没有错误的方法依赖于追踪或分析用于产生给定可执行二进制映象的源代码。然而,此些传统方法无法直接分析可执行二进制映象,且因此可能不会准确地反映二进制映象中的内容,且对于分析无源代码可用的可执行软件来说没有多大价值。

发明内容
各种实施例的方法及系统分析可执行软件二进制软件二进制映象以便辨识特定函数、函数的部分、算法及算术块。使软件二进制映象内的存储器寄存器及存储器地址参考正规化。识别二进制映象内的函数。将二进制映象内的每一识别出的函数与已知或参考函数的一个或一个以上参考二进制映象比较,以确定是否存在匹配。参考函数二进制映象可存储于参考数据库中,所述数据库含有多个函数二进制映象。可通过比较位模式或通过比较通过将散列函数应用于函数及参考函数产生的散列值来实现函数与参考函数的比较。在一实施例中,识别正分析的二进制映象内的函数内的组成部分,且将其与参考函数或参考函数组成部分二进制映象的数据库内的函数组成部分的二进制映象比较。可通过比较相应二进制代码中的位模式或通过比较通过将散列函数应用于组成部分及参考组成部分中的每一者产生的散列值来实现组成部分与参考组成部分的比较。可使用比较结果来确定软件二进制映象与一个或一个以上参考函数及/或函数的组成部分匹配的程度。


附图并入本文中且构成本说明书的一部分,

本发明的示范性实施例,且与上文提供的一般描述及下文提供的详细描述一起用以解释本发明的特征。图1是用于分析软件二进制映象的第一实施例方法的过程流程图。图2是用于分析软件二进制映象的替代实施例方法的过程流程图。图3是图1中说明的实施例方法的细节部分的过程流程图。
图4是图1中说明的实施例方法的另一细节部分的过程流程图。图5是图4中说明的替代细节部分的过程流程图。图6是用于分析软件二进制映象的替代实施例方法的过程流程图。图7是用于分析软件二进制映象的替代实施例方法的过程流程图。图8是用于分析软件二进制映象的替代实施例方法的过程流程图。图9是根据一实施例的用于产生参考函数二进制映象数据库的方法的过程流程图。图10是根据一实施例的用于产生参考函数及算术块二进制映象散列数据库的方法的过程流程图。图11是适合于与各种实施例一起使用的计算机系统的组件图。
具体实施例方式将参看附图详细描述各种实施例。只要可能,将在整个图式中使用相同的参考标号来指代相同或相似的部分。对特定实例及实施方案做出的参考是出于说明性目的,且并不意在限制本发明或权利要求书的范围。在此描述中,术语“示范性”在本文中用来意味着“充当实例、例子或说明”。不必将本文中描述为“示范性”的任何实施方案解释为比其它实施方案优选或有利。如本文中所使用,术语“计算机”及“计算机系统”意在包涵可能存在或未来将开发的任何形式的可编程计算机,包含例如个人计算机、膝上型计算机、移动计算装置(例如, 蜂窝式电话、个人数据助理(PDA)、掌上型计算机、无线数据卡及多功能移动装置)、大型计算机、服务器及集成计算系统。计算机通常包含耦合到存储器电路的软件可编程处理器,但可进一步包含下文参看图11描述的组件。如本文中所使用,术语“软件二进制映象”、“二进制映象”、“二进制代码”及“代码” 是指采用二进制形式(即,作为“1”及“0”的序列)的可执行(即,编译的)软件。如本文中所使用,术语“代码块”、“代码的块”及“块”是指二进制映象的特定子集,例如成序列的若干位或字节。如本文中所使用,术语“函数”是指软件指令序列,其在由处理器执行时会实现某种期望的结果。一些函数可包含一个或一个以上其它函数。如本文中所使用,术语“组成部分”是指少于整个函数的函数部分。如本文中所使用,术语“模块”是指单独开发及测试的应用程序部分,且通常与产生应用的可执行二进制映象的构造中的其它模块组合(在编译之前或之后)。如本文中所使用,术语“散列算法”意在包涵任何形式的计算算法,在给定任意数据量的情况下,所述计算算法计算可用于(具有某种概率信任度)识别输入数据的确切版本的固定大小数字。散列算法无需用密码方式安全(即,难以确定计算出相同缩减数字的替代输入),然而,其使用情境可能会强制性有此要求。如本文中所使用,术语“散列”及“散列值”意在指代散列算法的输出。越来越需要了解哪个源代码已编译成可执行二进制映象。这个需要可由内部分析驱动,例如确保构造包含特定漏洞修补或不含有任何通用公共许可证(GPL)码。在开发复杂计算机软件时遇到的常见问题是确定特定软件构造是否包含包含已知漏洞或问题的可执行代码部分。在复杂软件构造中,特定是在涉及许多不同开发团队及实施人员的软件中,即使已经完全测试了每一个别软件组成模块,还是可能无意中引入软件漏洞。当前测试组成软件模块及追踪源代码血统的方法对于人类在汇编最终映象时的处理错误很脆弱,且因此不是用于确保可执行二进制映象版本无缺陷的理想方法。通常被引入到复杂软件应用中的漏洞是已知的,但驻留在被未意识到问题的个人在整个汇编及构造过程中的某个点无意中复制的小型算法、模块或函数中。有缺陷的算法、模块或函数可能几乎无法与正确的代码区分开来,且因此使用简单的比较技术不容易辨识。此外,漏洞可能驻留在编译了大多模块之后引入的代码中,且因此无法通过分析源代码来识别。存储器使用、寄存器指派及变量名的变化会改变编译的代码的二进制映象,从而导致无法使用直接的二进制比较技术来发现有问题的代码。为了解决此问题且克服调查源代码及追踪源代码血统的传统方法的缺点,各种实施例提供用于直接分析软件二进制映象的方法。这些方法可辨识正分析的二进制映象内包含的特定参考函数、函数的组成部分、算法及算术块。使用此些方法,可快速扫描软件二进制映象以确定是否包含任何已知有问题的代码元素,而无需依赖于对源代码的分析。此外, 所述方法使得能够扫描任何软件二进制映象,以确定是否有可能已包含任何已知软件例程或模块。举例来说,可使用所述方法来确定是否已将任何公司软件复制到仅作为可执行二进制映象可用的软件中。本文中描述两种用于识别给定软件二进制映象内的源代码血统的基本实施例方法。应用第一实施例方法来识别完全的代码匹配。也就是说,如果软件二进制映象中包含已知函数,则将检测到匹配。应用第二实施例方法来检测可能的代码匹配。也就是说,如果函数含有已知实施方案的若干部分,则可检测及报告已知实施方案的百分比。在完全匹配实施例方法中,在正分析的二进制映象内识别每一软件函数。可在二进制映象中记录或标记所识别的函数的开始及结束指令,或者可将含有每一函数的二进制代码的块复制到临时数据库中。每一所识别的函数的寄存器指派及存储器分配受到调整 (“正规化”)以与在参考函数二进制映象的数据库中指派存储器地址及寄存器的方式一致。接着将每一所识别的且正规化的函数的二进制代码与参考函数的一个或一个以上二进制映象比较以确定是否有任何匹配。可在逐位或逐字节的基础上使用位模式辨识技术来实现此比较。另一选择是,作为优化,可将散列算法应用于对应于正分析的每一函数的二进制代码以产生散列值,可将所述散列值与针对数据库中的参考函数二进制映象中的每一者产生的散列值进行算术比较。当发现散列值之间的匹配时,可识别及记录匹配。以此方式,可将二进制映象中的每一函数与存储于数据库中的多个参考函数二进制映象中的每一者个别比较,以便扫描二进制映象以寻找与参考函数库的匹配。可能匹配实施例方法类似于完全匹配实施例方法,区别在于,所述比较可在函数组成部分的级别实现。可将参考数据库中的每一参考函数的二进制映象分解成其组成部分,组成部分二进制映象存储于函数及函数组成部分二进制映象的参考数据库中。任选地, 可针对参考数据库中的函数二进制映象及函数组成部分二进制映象中的每一者产生一散列,所得的散列值存储于参考散列数据库中。对正分析的软件二进制映象进行预处理以使寄存器及存储器地址参考正规化,且接着将其分解成可记录、标记或存储于临时数据库中的函数及函数的组成部分。可接着用逐位或逐字节的方式将组成部分中的每一者与存储于编译的函数组成部分的参考数据库中的函数组成部分比较。任选地,可将散列函数应用于每一组成部分二进制映象以产生散列值。可将每一组成部分散列值与参考散列数据库比较,且识别匹配。可产生与数据库匹配的每一匹配的函数及组成部分的表或类似列表。可基于软件二进制映象中与参考散列数据库中反映的参考函数的组成部分匹配的组成部分的百分比,来推断正分析的二进制映象内的函数与参考数据库内的参考函数相同或几乎相同的可能性。正分析的二进制映象内的任何给定函数可能与来自一个或一个以上参考函数的组成部分匹配。如果二进制映象内的函数内的组成部分中有较大百分比与参考数据库中的组成部分二进制映象匹配,则这可能指示有可能已复制了函数或函数的若干部分。可接着对正分析的二进制映象的与参考函数数据库内的匹配的参考函数二进制映象匹配的部分进行更加深入的分析,借此确定可能的匹配。此更加深入的后续分析可能包含对二进制映象的逐位分析,或对于对应源代码的逐行审阅。—种用于确认特定大型二进制代码块是否与另一块相同的方法是向每一二进制代码块应用散列算法,例如循环冗余校验(CRC)算法或MD5密码散列算法,以产生数字 (即,散列值),且接着比较所述两个散列值。此些方法可用于通过将特定软件二进制映象的散列值与鉴定机构提供的散列值比较来鉴定所述软件二进制映象。当鉴定机构测试及确认特定软件二进制映象没有错误或恶意软件时,所述机构可使用私用加密密钥来产生所述软件二进制映象的密码散列。在一些实施方案中,鉴定机构可使用私用加密密钥,其允许接收方对数字签名进行解码,以便还确认鉴定机构产生了密码散列。接着,将散列值包含在发布的软件包中,使得计算机可对软件二进制映象执行类似的密码散列算法及将结果与同软件相关联的散列值比较,借此确认软件二进制映象版本。此些方法在计算机领域中是众所周知的。然而,此传统的散列比较方法仅确定两个二进制映象是否相同。在映象中的一者内隐藏较深的两个二进制映象之间的即使微小的差别,也将导致不同的所产生的散列值。因此,验证软件二进制映象的传统散列比较方法无法确定关于所包含的函数及函数的组成部分的任何信息。图1是说明可在完全匹配实施例方法中实施的实例步骤的过程流程图。如上所述,此实施例方法设法识别正分析的软件二进制映象内与可存储于函数二进制映象的参考数据库中的一个或一个以上已知参考函数的完全函数匹配。可由配置有用以执行实施例方法的软件的计算机来接收可执行软件二进制映象(步骤10)。软件二进制映象可用各种形式接收,包含例如在例如压缩光盘(CD)、数字视频/多功能光盘(DVD)等有形存储媒体上、从例如光盘驱动器或USB存储器单元等内部或外部存储器,或经由网络连接从网络接收。一旦接收到软件二进制映象,便可对其进行预处理以使其准备好接受分析。此预处理包含使二进制映象内的寄存器及存储器地址参考正规化以产生正规化的二进制映象(步骤12),及在二进制映象内识别函数边界(步骤14)。虽然图1展示了使寄存器及存储器地址正规化的步骤(步骤1 是在识别二进制映象内的函数边界的步骤(步骤14)之前,但所述顺序只是为了说明性目的,仅仅是因为这些步骤也可用相反顺序(即,步骤14在步骤 12之前)或在相同预处理步骤中执行。在使寄存器及存储器地址正规化的过程步骤(步骤12)中,扫描正分析的软件二进制映象以识别对存储器寄存器及存储器地址的参考,且将识别出的寄存器及地址改变成正规化值,例如全部为零。所述正规化值是指派给用于存储于如下文进一步描述的参考函数数据库22中的参考函数的存储器寄存器及地址的相同值。进行寄存器及存储器地址的此正规化是为了确保对软件二进制映象的分析可辨识函数及指令模式,而不会受到寄存器及存储器地址指派的误导。通常对编译的软件的不同块的寄存器及存储器地址指派将取决于包含于软件的围绕特定函数的其它部分中的存储器指派。寄存器及存储器地址指派的此变化会引起在软件二进制映象内识别函数块的问题,因为在不同软件构造中实施的两个相同函数可能会被指派不同的寄存器及存储器地址,从而使两个软件二进制映象显得不同。 使软件二进制映象内的寄存器及存储器地址正规化以产生正规化二进制映象,使得后续分析能够集中于指令序列,因为在正分析的二进制映象及存储于参考数据库22中的参考函数二进制映象内的所有寄存器及地址于是将相同。可使用各种方法在正分析的二进制映象中识别存储器寄存器及地址指派,所述方法包含使用反编译器或众所周知的用于识别给定处理器上的给定编译器的函数的开头及结尾的技术来分析二进制映象(步骤16),或如下文参看图3所述扫描二进制映象以辨识二进制序列内的寄存器或存储器地址参考。为了在函数级别分析软件二进制映象,还分析软件二进制映象以在二进制序列内识别函数边界(步骤14)。此过程主要将软件二进制映象分解成二进制代码的函数块,可对所述函数块进行个别分析且与存储于参考数据库22中的已知函数比较。在函数级别分析软件二进制映象使得实施例方法能够辨识编译的软件内的特定函数,而不必考虑被编译以创建二进制映象的源代码。可使用已知方法在软件二进制映象的二进制序列内识别函数边界,所述方法例如是反编译器应用或众所周知的用于识别给定处理器上的给定编译器的函数的开头及结尾的技术(步骤16),所述步骤剖析二进制序列,从而辨识指令及识别函数块。另一选择为,实施例方法可扫描二进制映象的整个二进制序列以识别与函数的开头及结尾相关联的指令模式,且如下文参看图4更完整描述,使用所述辨识出的指令模式来测定函数边界。当在正分析的二进制映象内识别出函数边界时,可将与每一函数相关联的二进制代码的块的开头及结尾位的位置存储于存储器中,例如用指针的形式存储,或者用添加到二进制映象的边界标签(例如,旗标或唯一位模式)来识别所述位置。另一选择为,可将二进制代码的每一函数块单独存储于函数的临时数据库中。将开头及结尾位位置存储于存储器中,或用函数边界标签来标记二进制映象,使得后续处理能够作用于软件二进制映象从开始到结束的整个二进制序列,从而用每一函数在二进制映象中出现时的序列来分析每一函数。在临时数据库中分开存储识别出的函数的二进制代码块,准许用任意序列来分析每一函数,而无需对正分析的二进制映象进行进一步剖析。每一识别出的函数的二进制代码块还可用其在正分析的二进制映象中出现时的顺序存储于临时数据库中,从而能用函数出现时的序列来分析所述函数。在使寄存器及存储器地址正规化且识别出函数边界(或将函数个别存储于临时数据库内)后,可开始个别分析每一函数的过程。可如图1所示用在整个软件二进制映象中操作的循环来执行此处理。为进行此操作,选择代码的函数块来进行分析(步骤18)。在通过分析循环的第一遍中,在步骤18中选择的代码的函数块将是二进制序列中或临时数据库内的代码的第一函数块,而在通过分析循环的后续遍中,在步骤18中选择的代码的下一函数块将是二进制序列或数据库。在此选择中,可将与选定函数相关联的整个代码块存储于有源存储器中,以便可在测试20中将所述代码块内的位的模式与参考函数的参考二进制映象比较。可将参考二进制映象存储于参考数据库22中,以便可将每一选定函数与数据库内的一个、一些或所有参考函数比较。可使用众所周知的用于比较位序列的方法来实现此比较测试20,所述方法包含模式辨识及逐位或逐字节比较。可在测试20中将单个参考函数二进制映象与代码的选定函数块比较,当正进行分析以确定特定函数是否已包含于正分析的二进制映象中时可能就是这种情况。另一选择为,可将参考函数二进制映象的数据库 22内的多个参考二进制映象与代码的选定函数块比较,以确定数据库中包含的函数中的任一者是否存在于正分析的代码的选定函数块中。在一实施例中,可在子单元级别(即,代码的选定块的部分)将代码的选定函数块与参考数据库22中的参考函数二进制映象比较,而不是将代码的整个选定块总体与参考函数二进制映象比较。举例来说,可对代码的选定块内的若干字节(例如一次四个到十个字节)执行分析,以便使比较过程简化。作为另一实例,可在算术单元的级别执行分析,例如通过在条件语句(即,将依据条件测试产生分支的指令,例如“如果一那么”软件步骤的编译的实施方案)之间选择代码块。此逐块或逐段分析可能比整个函数比较执行起来更容易,且可用来辨识已用与存储于参考数据库22中的参考函数的二进制映象稍微不同的方式实施的函数。可接着将逐块或逐段比较的结果组合,以在测试20中确定在步骤18中选择的整个函数是否与参考数据库22中的函数匹配。换句话说,如果所有块或段均与参考数据库22中的函数内的对应块或段匹配,且顺序与其在参考函数中出现时的顺序相同,那么选定函数与所述特定参考函数匹配。如果所有块或段均与参考数据库22中的函数内的对应块或段匹配,但顺序未必与其在参考函数中出现时的顺序相同,则这指示所述函数有可能匹配。类似地,如果许多块或段与参考数据库22中的函数内的对应块或段匹配,这也指示所述函数有可能在功能方面是等效的。如下文更完整论述,如果比较结果表明可能存在匹配,则可进行进一步分析以确定选定函数及参考函数是否完全匹配,或者参考函数是否已被复制。在又一实施例中,可将模式匹配与文本分析器中使用的分析技术组合,以在并非所有块或段均与参考数据库22内的参考函数的块或段匹配时辨识函数内的匹配块或段。 在一些情况下,函数的实施方案可能使得某一代码散布于函数内的常见组成部分之间,使得代码的选定函数块可能不与参考数据库22内的参考函数完全匹配,即使在运算中所述函数在功能方面等效时也是如此。举例来说,参考数据库22内的参考函数可能在正分析的二进制映象中稍被修改,在选定函数的中间的某个位置添加了某一代码,但这并未改变其整个过程。作为一实例,可实施一函数,其中特定的组成部分被替换成等效但稍有不同的组成部分。作为另一实例,可将某一无关紧要的代码添加到函数,以便使代码的整个函数块显得不同。当在逐块或逐段的基础上将此选定函数与参考函数比较时,可能发现若干块或段与参考数据库22中的参考函数的块或段匹配,直到遇到插入或改变的部分为止,此时将不会发现匹配。于是,选定函数内的后续块或段将不匹配,因为替代的或插入的二进制代码将使代码的选定函数块中的二进制代码的其余部分相对于参考数据库22中的参考函数二进制映象中的位序列偏离。为了克服此问题,可实施模式辨识软件(例如在文本分析器应用中使用的)以扫描代码的选定函数块中在不匹配块或段之后的位序列,以确定是否可用参考数据库22中的参考函数二进制映象来为代码的选定函数块重新排序。在此过程中,分析后续位模式以确定代码的选定函数块与参考函数二进制映象之间是否存在任何匹配模式。如果在代码的选定函数块内辨识出后续位模式匹配,则可使用此信息在位模式匹配的点重新启动与参考函数二进制映象的逐块或逐段比较。使用此方法,即使当用不同顺序实施组成部分或已修改了正分析的代码块而隐藏其已被复制的事实时,也可识别出函数匹配。如果在测试20中进行的代码匹配分析确定代码的选定函数块与参考数据库22内的参考函数二进制映象匹配或接近匹配,则可记录与参考函数的特定匹配(步骤30)。除非仅搜索单个函数(在此情况下,匹配可使得过程终止),否则可通过确定二进制映象中是否还有另一函数要分析(测试32)而继续所述过程,且如果是的话,则返回到选择代码的下一要分析的函数块的过程步骤(步骤18)。如果在测试20中进行的代码匹配分析确定选定函数块并不与参考数据库22内的参考函数二进制映象匹配或接近匹配(即,测试20 = “否”),则所述过程可继续以通过确定是否还有另一函数要分析(测试3 来选择代码的下一要分析的函数块,且如果是的话,则返回到选择代码的下一要分析的函数块的过程步骤 (步骤18)。一旦已分析了正分析的二进制映象内的所有函数(即,测试32 = “否”),则分析过程可通过列出所有被发现与参考数据库22内包含的参考函数匹配的函数(步骤34) 而终止。图2中说明用于分析软件二进制映象以寻找与参考数据库内的参考函数二进制映象的完全或接近完全匹配的替代实施例。在此替代实施例中,用对代码段散列值的更加高效的比较来取代二进制代码的选定部分与函数二进制映象库的逐位、逐块或逐段比较的处理器密集型步骤。如上所述,可使用散列算法将大二进制序列(例如,编译的软件代码的一部分)转换成对于所述特定二进制映象来说在统计学上唯一的小得多的数字。两个不同二进制映象将产生相同散列值的概率取决于二进制映象的大小及散列值中的数字的数目, 但是对于典型的散列算法来说,此概率非常低,以至于可将散列值视为唯一地识别其相关联的二进制映象。比较两个散列值是简单的算术运算,因为可简单地将两个数字相减以确定是否有余数一如果有余数,那么所述两个二进制映象是不同的。由于此简化的处理,可将函数及函数组成部分快速地与大量参考函数二进制映象比较。然而,选定函数块与参考函数映象之间的细微差别将产生不存在匹配的确定,即使上文参看图1所述的逐块或逐段比较可能检测到匹配也是如此。因此,图2中说明的实施例能够更快速得多地对照大数据库分析二进制映象,但缺点是接近匹配可能会被忽略。图2中说明的实施例中涉及的过程步骤涉及上文参看图1所述的许多步骤。确切地说,对在步骤10中接收到的软件二进制映象进行预处理以使寄存器及存储器参考正规化(步骤12),且识别函数边界(步骤14)。与图1中说明的实施例一样,对软件二进制映象的分析可在循环中继续,以轮流分析每一识别出的函数。为了分析每一函数,选择一函数, 且针对所述选定代码块产生散列值(步骤19)。与上文参看图1所述的步骤18 —样,在通过分析循环的第一遍中,在步骤19中选择的代码的函数块将是二进制序列内或临时数据库内的第一者,而在通过分析循环的后续遍中,在步骤19中选择的代码的下一函数块将是二进制序列或数据库。可接着在测试21中将针对代码的选定函数块产生的散列值与特定参考函数二进制映象的散列值或散列数据库M内的散列值比较。用于针对在步骤19中选择的函数产生散列值的散列算法与用于产生参考函数二进制映象的散列值的散列算法相同。在一实施例中,散列算法是单向散列,例如CRC算法。虽然可在测试21中的比较时产生任何参考函数二进制映象的散列值,但更高效的方法涉及针对存储于参考数据库22中的参考函数二进制映象产生散列值,及在散列数据库M中存储所述散列值。此散列数据库M可包含识别与每一散列值相关联的参考函数的识别符(ID)。可接着在开始对软件二进制映象的分析之前的任何时间产生散列数据库 24。通过使用众所周知的二进制数字比较技术(例如,相减及余数测试),在测试21中实现的比较可快速地确定针对代码的选定函数块产生的散列值是否与存储于散列数据库 M中的散列值中的任一者匹配。如果检测到任何匹配(即,测试21 = “是”),则可在步骤 30中记录散列数据库M中的匹配散列值的识别符。一旦记录了函数匹配(步骤30),或如果未检测到散列匹配(测试21 = “否”),则可通过确定二进制映象中是否还有另一函数要分析(测试3 而继续所述过程,且如果是的话,则返回以选择代码的下一要分析的函数块且产生其散列值(步骤19)。一旦已分析了正分析的二进制映象内的所有函数(即,测试 32 = “否”),则分析过程可通过列出所有被发现与参考数据库22内包含的参考函数匹配的函数(步骤34)而终止。如上所述,可通过使用反编译器应用或众所周知的用于识别给定处理器上的给定编译器的函数的开头及结尾的技术(步骤16),或通过直接扫描正分析的二进制映象以辨识寄存器或存储器地址参考,来识别及正规化存储器寄存器及存储器地址值(步骤1 。图 3中说明可在步骤12内实施以扫描正分析的二进制映象以寻找寄存器及存储器地址参考的过程步骤的实例。在此过程中,可选择二进制映象内的二进制代码块(步骤120),其中用字节计算大小的选定块对应于与寄存器及存储器地址参考相关联的指令的大小。接着将二进制代码的选定块与已知寄存器或存储器位置参考的二进制位模式比较(测试12 。如图 3所示,此过程可构造成循环,其在正分析的整个二进制映象中操作。在通过循环的第一遍中,在步骤120中选择的代码块将为二进制映象内的前X个字节,而在通过分析循环的后续遍中,在步骤120中选择的代码块将为二进制映象中的代码的在前一遍中处理的X个字节之后的下一 X个字节(即,最后选择之后的X个或X+Y个字节)。如果代码的选定块包含寄存器或存储器位置参考(即,测试122 = “是”),则选择且正规化位的后续块(例如,将选定位全部设定为等于零)(步骤124)。此选择中的位的数目将取决于二进制映象既定用于的处理器或操作系统中实施的地址大小。举例来说,可选择及正规化16、32或64个位。在一些指令中,在指令本身内而不是在后续位中编码寄存器值,在此情况下,选择及正规化位的块的步骤选择指令内的编码寄存器值的那些位。一旦使选定位正规化或如果在步骤120中选择的代码并不对应于寄存器或存储器位置参考(即,测试122 = “否”),则可通过确定是否还有更多二进制代码要分析(测试 126)来继续所述过程,且如果是的话,则返回以选择要分析的下一代码块(步骤120)。一旦已如此分析了整个代码(即,测试126 = “否”),则处理可继续到下一步骤,例如上文参看图1及图2描述的步骤14。如上所述,可通过使用反编译器应用或众所周知的用于识别给定处理器上的给定编译器的函数的开头及结尾的技术(步骤16),或通过直接扫描正分析的二进制映象以辨识开始及结束函数的指令模式,来在二进制映象内识别函数块(步骤14)。图4中说明可实施以扫描二进制映象以寻找函数边界的过程步骤的实例(步骤14)。由于函数且尤其是组成部分(例如,由条件指令划界的段)可在循环内嵌套,所以在二进制映象内识别函数块的过程可包含使用循环计数器i (或追踪二进制映象内的嵌套及递归循环的类似方法),其可在分析开始时初始化为“0”(步骤140)。在此过程中,可选择二进制代码块(步骤142), 其中用字节计算大小的代码块对应于与函数的开头及结尾相关联的指令的大小。如图4所示,此过程可构造成循环,其在正分析的整个二进制映象中操作。在通过循环的第一遍中, 在步骤142中选择的代码块将为二进制映象内的前X个字节,而在通过分析循环的后续遍中,在步骤142中选择的代码块将为二进制映象中的代码的在前一遍中处理的X个字节之后的下一 X个字节。接着将二进制代码的选定块与模式比较,以寻找表征函数的开头的指令,例如循环开始指令或分支开始指令(测试144)。通常将通过将指令指针推送到堆栈上且分支到函数开始指令来开始一函数或分支。可容易辨识此些指令模式以确定函数的开头 (即,识别函数开始边界)。如果辨识出函数的开始(即,测试144 = “是”),则将所述指令的位序列位置存储于存储器中,或用函数开始标记来标记(步骤146)。为了适应嵌套函数,可用循环计数器值i或其它用于追踪嵌套循环的方式来识别特定函数开始标记,接着将所述值递增(步骤 148),以便可使嵌套函数的开头及结尾准确相关。可接着通过确定是否还有更多二进制代码要分析(测试156)来继续处理,且如果是的话,则返回到步骤142以选择要分析的下一代码块。如果选定代码块不包含函数的开头(即,测试144 = “否”),则可测试代码块以确定其是否包含指示函数的结尾的指令(测试150)。类似于函数或分支的开头,典型的函数通过将指令指针(地址序列值)从堆栈中推出且分支回到所指示的指令地址而结束。可容易辨识此些指令模式以确定函数的结尾(即,识别函数的结尾边界)。如果识别出函数的结尾(即,测试150 = “是”),则可例如通过寻找“向上”条件分支(即,其地址小于分支指令的地址的分支)将特定函数结尾标记与特定循环相关(步骤15幻。类似地,“如果”语句是向下条件分支。将所述指令的位序列位置存储于存储器中,或用与相关联的循环开始语句相关的函数结尾标记来标记(步骤15幻。为了适应嵌套函数,还可使循环计数器递增(步骤154),以便可准确地追踪函数的开头及结尾。可接着通过确定是否还有更多二进制代码要分析(测试156)来继续处理,且如果是的话,则返回到步骤142以选择要分析的下一代码块。一旦已如此分析了整个二进制映象(即,测试156 = “否”),则处理可接着继续到分析中的下一步骤,例如上文参看图1所述的步骤18。替代于在步骤146及152中将函数开始及结束标签添加到二进制映象,可将地址指针存储于数据库中,所述指针指示二进制映象的位序列中或存储器中含有与函数的开头或结尾相关联的位的特定位置。地址指针的此数据库可简单地为存储器位置表,其可成对地存储以用于指示二进制映象内的函数的开头位置及结尾位置。在后续处理中,处理器可通过开始读取存储于函数开始指针中的存储器位置处的映象及在达到存储于函数结束指针中的存储器位置时停止读取过程而使用此存储器位置来选择二进制映象的要分析的函数块(步骤18或19)。如上所述,可将识别出的函数单独存储于临时数据库(或类似数据结构)中,而不标记二进制映象中的函数边界。图5中说明可实施以扫描二进制映象且在数据库中存储辨识出的函数的过程步骤的实例(步骤14)。此替代过程非常类似于上文参看图4所述的过程,区别在于,当识别出函数结束指令(即,测试150 = “是”)时,将在步骤146中辨识出的函数开始指令与在测试150中辨识出的函数结束指令之间延伸的代码块作为函数代码块存储于存储器中(步骤153)。可用各种众所周知的数据结构来组织存储函数代码块的数据库,且所述数据库可包含对函数在二进制映象中的何处开始的指示(例如,首次在测试 144中辨识的指令的位序列位置),以便可用函数在二进制映象中出现时的顺序来选择函数(例如,在步骤18或19中)。这样做便会适应函数彼此嵌套的情形,在此情况下,函数结束指令可用与函数开始指令出现时的序列不同的序列出现。一旦已经存储了辨识出的函数代码块,可接着通过确定是否还有更多代码要分析(测试156)来继续处理,且如果是的话, 则返回到步骤142以选择要分析的下一代码块。一旦已如此分析了整个二进制映象(即, 测试156 = “否”),则处理可接着继续到分析中的下一步骤,例如上文参看图1所述的步骤 18。所属领域的技术人员将了解,函数通常会调用或包含其它函数。上述实施例将适应独立函数、嵌套于另一函数内的函数及函数的函数。在嵌套函数的情况下,可获得多个函数匹配,当包含于参考函数映象数据库22内的函数含有包括其它函数的函数及所述包含的函数中的一者或一者以上两者时,就会出现上述情况。举例来说,如果参考函数映象数据库22包含参考维特比解码器函数及包含所述相同维特比解码器函数的参考调制解调器控制函数,则当正分析的二进制映象包含所述特定调制解调器控制函数时,将确定与所述两个参考函数的匹配。在一实施例中,可组合在图3及图4中说明的步骤12及14中的操作以在单个循环中继续。在此实施例中,分析在步骤120或142中选择的每一代码块以确定其是否含有寄存器标签或存储器地址参考(测试122),且如果否的话,则分析相同代码块以确定其是否含有循环开始或分支开始指令(测试144),或循环结束或分支返回指令(测试150)。如果任何测试结果是肯定的(即,测试122、144或150中的任一者=“是”),则实现相关联的处理(即,步骤124、146、152或153中的一者),且循环通过确定是否还有剩余的更多代码要分析(测试126、156)而继续,且如果是的话,则选择下一代码块(即,重复步骤120或 142)。此实施例准许在单遍中实现对二进制映象的预处理。上述实施例非常适合于确定软件构造内是否包含特定的函数版本,因为所述方法辨识与参考数据库22中的函数映象完全匹配或接近完全匹配。这些实施例可能对于在发布之前确认软件二进制映象的内容或识别二进制映象内可能存在的已知漏洞非常有用。在其它情形或应用中,可能需要确定任何二进制映象是否有可能包含某些函数。 此情形的实例是当分析软件以确定是否已未经授权而复制了任何函数时。在此些情形下, 寻找完全匹配可能使所述方法对于通过在函数代码中包含无关紧要的修改而隐藏复制的行为脆弱。为了解决此些情形,可能匹配实施例方法在函数内的组成部分的级别将正分析的二进制映象与参考数据库比较,以确定是否函数的若干部分与已知函数实施方案匹配。通过以较小的函数组成段来分析正分析的二进制映象,可将类似的函数组成部分与参考数据库中的函数内的参考组成部分匹配,这可用来确定正分析的二进制映象在功能方面与参考函数及已知函数实施方案相似的程度。通过以统计或图形度量呈现匹配的组成部分信息,可能匹配实施例方法可通知用户正分析的二进制映象包含复制的软件的可能性。即使结果不是绝对的,但此些可能性评估也可用于确定是否值得执行更严格的分析方法,例如对二进制映象的逐位比较或对源代码的逐行比较。因此,可使用可能匹配实施例方法作为筛选工具将二进制映象与大量已知实施方案比较以确定是否需要进行进一步的调查。图6中说明可在可能匹配实施例方法中实施的实例过程步骤。如上文参看图1及图2所述,对所接收的用于分析(步骤10)的二进制映象进行预处理以使寄存器及存储器地址参考正规化(步骤1 ,且识别函数块(步骤14)。如上所述,此预处理可在不扰乱构造之间将不同的寄存器及存储器地址值的情况下实现函数及函数组成部分的比较。为了在比上述实施例提供的详细级别更精细的级别上分析二进制映象,所述预处理通过识别函数内的组成部分(例如算术及类似组成块)而继续(步骤40)。在步骤40中可使用各种准则来识别函数内的组成部分的边界,因此此进一步分段不仅仅限于算术块一图中使用“算术块” 只是为了说明的目的。可使用反编译器应用或众所周知的用于识别给定处理器上的给定编译器的函数的开头及结尾的技术来识别函数的此些组成部分(步骤16),因为反编译器及其它技术可识别分支、条件语句及类似指令。另一选择为,可用上文参看图4及图5所述的方式来执行对二进制映象的逐块分析,以识别函数内的重要组成部分的开头及结尾。举例来说,许多函数包含条件语句,可基于所述条件语句的唯一位模式来辨识条件语句。还可根据分支指令辨识函数内的组成部分,可基于组成部分的位模式或基于将指令排序器值推送到堆栈上的指令来辨识所述组成部分,其中通过将所述排序器值从堆栈中推出来指示组成部分的结尾。当在步骤40中识别组成部分时,可个别地识别组成部分,或者可将其识别为对应于包含其的特定函数。任一方法均将奏效,且每一方法均有优点及缺点,这可使得一种方法在某些应用或环境中更优越。类似于上文参看图4及图5所述的可识别函数或将其存储于临时数据库中的方式,可例如通过以下方式来识别函数的识别出的组成部分添加到二进制映象的开头及结尾标记,存储指示二进制映象内的开头及结尾位的指针,或在临时数据库中存储识别出的组成部分代码块。在识别出函数及其组成部分或在数据库中存储函数及其组成部分后,可通过选择要分析的组成部分(步骤4 来继续处理。如图6所示,可在循环中执行此处理,所述循环在正分析的整个二进制映象中操作。在通过分析循环的第一遍中,在步骤42中选择的代码块将是二进制序列内或临时数据库内的第一者,而在通过分析循环的后续遍中,在步骤42 中选择的下一代码块将是二进制序列或数据库中的下一者。在一实施例中,可使用如上文参看图1所述的用于测试20的逐位比较方法将代码的选定组成部分或算术块与存储于组成部分参考数据库46中的参考组成部分比较。然而,在给定在将二进制映象分解成组成部分而非函数尤其是当将每一组成部分与大型参考组成部分二进制映象库比较时需要进行的大量比较的情况下,优选实施例在步骤42中产生选定组成部分或算术块的单向散列。接着可在测试44中将所述产生的散列与可存储于组成部分散列数据库47中的参考组成部分散列值比较。如上文参看图2所述,可在分析之前产生组成部分散列值的数据库,且在用于与实施例方法一起使用的库或数据库中维持所述数据库。如上所述,比较散列值涉及的处理远远少于逐位比较二进制代码或辨识二进制序列中的模式,且因此使用此方法可在给定量的处理时间内将多得多的组成部分与参考数据库比较。如果在步骤42中产生的代码的选定组成部分块的散列值与参考组成部分散列数据库47内的散列值匹配(即,测试44 = “是”),则记录所述匹配(步骤48)。依据实施方案,可单独记录匹配组成部分,或与包含其的函数组合记录。换句话说,依据组成部分散列数据库47的组织方式,所述过程可仅仅追踪匹配的组成部分或在特定函数内匹配的组成部分。由于可在各种不同函数中使用许多算术块,所以二进制映象内的此些算术块的匹配可能不如特定函数中的此些算术块的匹配重要。另一方面,二进制映象内的任何位置处的非常唯一的算术块的匹配可指示可能已复制了软件的至少包含匹配的唯一算术块的部分。 在又一实施例中,可仅记录已检测到匹配的事实,例如用匹配计数器的形式记录。举例来说,可简单地通过为匹配的数目及比较的组成块的数目计数来计算匹配组成部分的百分比 (即,与组成部分散列数据库47内的组成部分匹配的所有组成块的百分比)。如果选定组成部分不与散列数据库47中的任何散列值匹配(S卩,测试44 = “否”),或已经记录了检测到的匹配(步骤48),则通过确定是否还有另一组成部分或算术块要分析(测试50)来使过程继续,且如果是的话,则返回到步骤42以选择代码的下一组成部分块,且产生其散列值。一旦已分析了所有组成部分(即,测试50 = “否”),则可使用记录的匹配将匹配函数群组与已知实施方案比较(步骤52)。可使用记录的匹配结果来执行各种不同分析以便得出与二进制映象的内容有关的结论。举例来说,可针对整个二进制映象产生匹配组成部分的直接百分比,其中提供输出作为统计测量结果(步骤56)。此统计数据将揭示与整个二进制映象是基于类似软件应用的复制的可能性有关的信息。然而,如果二进制映象仅含有几个复制的函数,则此全局百分比统计数据可能并不揭示所述复制。出于所述原因,可在步骤52中比较与函数的组成部分匹配的群组以识别较大百分比的组成部分与参考数据库 22,46内的参考函数中的组成部分匹配的函数。如果一函数内的较大百分比的组成部分与参考数据库22、46中的参考函数中的组成部分匹配,则此可指示所述特定函数很可能已被复制。此还可呈现为展示特定函数内的组成部分匹配的统计数据(步骤56)。在更详细的分析中,可在步骤52中评估匹配组成部分在函数内出现时的顺序。组成过程的执行顺序通常并不影响整个函数,且因此函数中与参考数据库22、46内的参考组成部分匹配的组成部分的数目可能足以指示复制。然而,对于一些函数来说,组成部分的执行顺序较为重要。对于此些函数来说,如果匹配的组成部分在正分析的二进制映象内的函数中出现时的顺序不同于在参考数据库22、46内的参考函数内出现时的顺序,则大量匹配的组成部分可能并不指示有可能发生复制。可用识别特定参考函数的形式及组成部分与已知实施方案匹配的方式向用户呈现此信息(步骤M)。在对组成部分匹配结果的进一步分析中,可用可揭示正分析的二进制映象内的特定组成部分在各种参考函数中出现的频率的直方图的形式呈现结果。此方法可能可用于在许多不同函数中出现的组成部分或用于检测复制的整体模式。在另一实例中,特定组成部分在一函数或若干函数内的出现可能对于特定实施方案来说是唯一的,且因此其匹配可指示很有可能发生复制。可输出此分析作为与已知实施方案的比较(步骤54)或作为统计匹配(步骤56)。在另一实例中,可将组成部分在正分析的二进制映象内出现时的顺序或在所述二进制映象内的特定函数内出现时的顺序与已知实施方案比较。通常在层级中调用函数,且因此,函数调用的层级可能对于特定函数或软件版本来说是唯一的。在可能存在许多匹配函数或许多匹配函数组成部分的情形下,调用组成部分或函数的序列可提供对软件已被复制的可能性的更好感测。因此,复制的概率可能与在给定二进制映象内调用常用函数及组成部分的序列有关。步骤52中的这些各种分析可利用各种众所周知的逻辑及统计过程(包含例如贝叶斯统计分析),以产生对复制的可能性的测量。图7中说明替代实施例,其包含额外预处理以便使分支地址正规化。可在已识别出函数及算法块之后实现分支功能性的正规化。可通过将地址设定为零或使用零作为函数或算法块的基地址计算相对地址来使分支地址正规化。后一种过程在一些情形下可能更加准确。为了更能够检测以不同于参考数据库内的函数的组成部分的顺序呈现的函数的组成部分,可对正分析的二进制映象进行进一步预处理以使分支地址正规化(步骤41)。如上所述,可在步骤40中使用函数内的分支来检测算术块及组成部分。当检测到此分支时,可在步骤41中将此些指令中包含的分支地址设定为标准值,例如全部为零或设定为相对于函数或算法块的零基地址而计算的相对地址,使得可无需考虑分支地址而比较所得的正规化代码块。除了添加用于使分支地址正规化的步骤41之外,此实施例中的步骤的处理如上文参看图6所述继续进行。在图8中说明的又一实施例中,可将完全匹配与可能匹配实施例组合成单个过程。在此实施例中,可选择代码的函数块(步骤18或19),且在测试20或21中在函数级别上将其与参考数据库22比较。所述比较可如上文参看图1所述基于其位模式来进行(测试20),或者如上文参看图2所述基于比较散列值来进行(测试21)。如果检测到匹配,则处理可如上文参看图1及图2所述继续。然而,如果未检测到函数匹配,则在此实施例中的过程可通过选择所述函数内的组成部分(例如算术块)(步骤4 而继续。可接着将所述选定组成部分与参考函数组成部分的参考数据库46比较(测试44)。如果检测到匹配 (即,散列值相等),则可记录所述匹配(步骤48),且通过选择选定函数内的下一组成部分而继续所述过程,如果测试50指示函数内还有更多组成部分(即,测试50 = “是”),则重复步骤42。请注意,如果选定函数与参考数据库22中的参考函数匹配,则不需要执行步骤 42-50的组成部分匹配分析。一旦已分析了函数的所有组成部分,如果还有更多函数要分析(即,测试32 = “是”),则过程返回以选择代码的下一函数块,重复步骤18或19。此组合实施例中的预处理(步骤10-14及40-4 及对结果的所述呈现(步骤34、56)实施上文参看图1-2及图6-7描述的过程。此组合实施例使得能够在对软件二进制映象的单次分析中检测完全函数匹配及可能函数复制两者。在图8中说明的实施例的另一替代方案中,可只有在函数不与参考函数散列数据库M中的函数匹配(即,测试21 = “否”)的情况下才执行识别函数内的算术块或组成部分的过程(步骤42)。在此替代实施例中,将就在步骤42之前执行步骤40,且步骤40将限于步骤19中选择的函数。否则,此实施例的处理将与上文参看图8所述的大致相同在前面执行。各种实施例可具有若干有用的应用。如上所述,一种应用是用于在发布之前筛选二进制映象,以确认其不包含已知漏洞或过时的软件模块。由于可在代码被编译且被转换成可执行二进制映象之后实现此处理,所以此校验不依赖于软件来源追踪,或其它用于追踪二进制映象的内容的高成本方法。另一应用涉及使用所述方法来辨识特定函数或软件模块以诊断运算问题或确定特定二进制映象内的漏洞来源。另一应用是使用所述方法来确认二进制映象不包含第三方编写的函数或软件模块,所述第三方例如是公共资源软件或无法提供许可证的软件。此外,如上所述,所述方法可用于检测对软件或函数的未经授权的复制。在此方面,所述方法可用作用以识别可包含可能需要对其进行进一步分析的复制函数的软件的筛选工具。可使用与上文参看图1及图2所述的相同预处理步骤来产生已知函数映象的参考数据库22。如图9中说明,可通过处理计算机来接收待添加到参考数据库22的可执行函数二进制映象(步骤60),例如用有形存储媒体(例如,CD、DVD或外部硬驱动器)的形式或经由网络来接收。此接收到的函数应采用可执行编译形式,类似于其可能在正分析的二进制映象中出现时的形式。由于二进制映象可能在编译器之间不同,所以在一实施例中,可用各种编译器品牌及编译器版本来编译函数,以产生可能遇到的各种各样的二进制映象。接着分析每一接收到的函数二进制映象以使用与上文参看图1所述的步骤12中的相同方法来使寄存器及存储器地址参考正规化(步骤62)。地址及寄存器被设定的正规化值应当与分析二进制映象时使用的正规化值相同,例如将所有地址设定为零。如果在如上文参看图 7所示的步骤41所述的分析中使分支地址正规化,则接收到的函数也应当使其分支地址正规化(任选步骤64)。如果通过比较散列值而分析二进制映象以寻找函数内容,则将散列算法应用于正规化函数以产生其散列值(任选步骤66)。最后,将正规化代码或散列值存储于参考数据库中(步骤68)。可使用任何众所周知的数据结构来构造此参考数据库,且此参考数据库可包含特定函数的识别符(ID),使得如果检测到匹配,则可容易识别出匹配函数。可用类似方式产生函数组成部分的参考数据库。如图10中说明,可用上述格式中的任一者在计算机中接收要存储于参考数据库中的函数二进制映象(步骤70)。由于二进制映象可能在编译器之间不同,所以在一实施例中,可用各种编译器品牌及编译器版本来编译函数,以产生可能遇到的各种各样的二进制映象。接着对接收到的函数二进制映象进行预处理以使存储器寄存器及存储器地址参考正规化(步骤7 ,且识别接收到的函数内的组成部分或算术块边界(步骤74)。在识别出组成部分后,选择代码的第一组成部分块 (步骤76)。将散列算法应用于代码的选定组成部分块以产生其散列值(步骤78),将散列值存储于组成部分散列数据库中(步骤80)。可使用任何众所周知的数据结构来构造此数据库,且此数据库可包含特定函数及组成部分的ID,使得如果检测到匹配,则可容易识别出匹配函数及组成部分。可通过确定函数内是否还有另一组成部分或算术块(测试8 来继续所述过程,且如果是的话,则选择代码的下一组成部分块以产生散列值供存储于散列数据库中,重复步骤76、78及80。一旦已处理了所有组成部分(即,测试82= “否”),则此函数的处理完成。虽然参考数据库22、24、46、47可用一次一个函数的方式构造,但也可加载整个软件二进制映象,在此情况下,图9及图10中说明的处理将包含如上文参看图1、图4及图5 所述的识别函数的步骤(步骤14)。以此方式,可针对所有软件二进制映象快速地产生库, 所述软件二进制映象已通过将其循序馈送到经配置以执行图9及图10中说明的方法的计算机中来发布。可通过在新函数被批准发布时存储新函数的映象来产生参考函数及参考函数组成部分的库数据库。以此方式,可随时间积累数据库,以反映用户公司进行的所有软件发布。可产生各种不同的参考数据库,且使用其来支持对实施例方法的各种使用。举例来说,一个参考数据库可仅包含具有已知漏洞的函数的二进制映象,其用于筛选软件版本以确认其不包含此些已知问题。另一参考数据库可包含一家公司的所有经授权的软件版本,用于筛选其它公司发布的软件以检测未经授权的复制。另一参考数据库可包含所有过时函数映象,用于筛选软件版本以确认其不包含过时的软件模块。上文所述的实施例还可实施于图11中说明的个人计算机160上。此个人计算机 160通常包含耦合到易失性存储器162及例如磁盘驱动器163等大容量非易失性存储器的处理器161。计算机180还可包含耦合到处理器161的软盘驱动器164及⑶/DVD驱动器 165。通常计算机160还将包含用户输入装置,例如键盘166及显示器137。计算机160还可包含若干连接器端口,用于接纳耦合到处理器161的外部存储器装置,例如通用串行总线(USB)端口(未图示),还包含用于将处理器161耦合到网络的网络连接电路(未图示)。可通过执行经配置以实施上述方法中的一者或一者以上的软件指令的计算机处理器161来实施各种实施例。可将此些软件指令作为单独应用或作为实施实施例方法的编译的软件而存储于存储器162、163中。可将参考数据库存储于内部存储器162内、硬盘存储器164中、有形存储媒体上或可经由网络(未图示)接入的服务器上。此外,可将软件指令及数据库存储于任何形式的有形处理器可读存储器上,包含随机存取存储器162、硬盘存储器163、软盘(可在软盘驱动器164中读取)、压缩光盘(可在CD驱动器165中读取)、 只读存储器、快闪存储器、电可擦除可编程只读存储器(EEPROM)及/或插入到计算机160 中的存储器模块(未图示),例如外部存储器芯片或USB可连接外部存储器(例如,“快闪驱动器”)。所属领域的技术人员将了解,结合本文所揭示的实施例而描述的各种说明性逻辑块、模块、电路及算法步骤可作为电子硬件、计算机软件或者两者的组合来实施。为清楚说明硬件与软件的此可互换性,上文已大致关于其功能性而描述了各种说明性组件、块、模块、电路及步骤。所述功能性是实施为硬件还是软件取决于特定应用及施加于整个系统上的设计约束。所属领域的技术人员可针对每一特定应用以不同方式来实施所描述的功能性,但所述实施决策不应被解释为会导致脱离本发明的范围。上文所述且在图中展示的方法的步骤的顺序只是出于实例目的,因为在不偏离本发明及权利要求书的精神及范围的情况下,一些步骤的顺序可相对于本文中所述的顺序改变。结合本文中揭示的实施例描述的方法或算法的步骤可直接以硬件、以由处理器执行的软件模块或以所述两者组合体现。软件模块可驻存于处理器可读存储器中,其可为RAM 存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可装卸盘、 CD-ROM中的任一者,或此项技术中已知的任何其它形式的存储媒体。示范性存储媒体耦合到处理器,使得处理器可从存储媒体读取信息及将信息写入到存储媒体。在替代方案中,存储媒体可与处理器成一体式。处理器及存储媒体可驻留于ASIC中。ASIC可驻留于用户终端或移动装置中。在替代方案中,处理器及存储媒体可作为离散组件驻留于用户终端或移动装置中。此外,在一些方面中,方法或算法的步骤及/或动作可作为代码及/或指令中的一者或任何组合或集合而驻存在可并入到计算机程序产品中的机器可读媒体及/或计算机可读媒体上。
提供对各种实施例的前述描述以使得所属领域的任何技术人员能够制作或使用本发明。所属领域的技术人员将容易明白对这些实施例的各种修改,且在不脱离本发明的精神或范围的情况下,本文中界定的一般原理可应用于其它实施例。因此,本发明不希望限于本文所示的实施例,而是权利要求书应被赋予与本文所揭示的原理及新颖特征一致的最广范围。
权利要求
1.一种用于分析软件二进制映象的方法,其包括使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化;及将所述正规化二进制映象与参考二进制映象比较以确定是否存在匹配。
2.根据权利要求1所述的方法,其进一步包括使所述软件二进制映象内的分支地址正规化。
3.一种计算机,其包括 处理器;及存储器,其耦合到所述处理器,其中所述处理器配置有用以执行包括以下的步骤的软件指令 使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化;及将所述正规化二进制映象与参考二进制映象比较以确定是否存在匹配。
4.根据权利要求3所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令使所述软件二进制映象内的分支地址正规化。
5.一种计算机,其包括用于使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化的装置;及用于将所述正规化二进制映象与参考二进制映象比较以确定是否存在匹配的装置。
6.根据权利要求3所述的计算机,其进一步包括用于使所述软件二进制映象内的分支地址正规化的比较装置。
7.一种有形存储媒体,其上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行包括以下的步骤使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化;及将所述正规化二进制映象与参考二进制映象比较以确定是否存在匹配。
8.根据权利要求7所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤使所述软件二进制映象内的分支地址正规化。
9.一种用于分析软件二进制映象的方法,其包括使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化的二进制映象;识别所述正规化二进制映象内的函数;及将所述正规化二进制映象内的每一识别出的函数与参考二进制映象比较以确定是否存在匹配。
10.根据权利要求9所述的方法,其中所述比较步骤包括将所述正规化二进制映象中的每一识别出的函数与多个参考二进制映象中的每一者比较以确定是否与所述多个参考二进制映象中的任一者存在匹配。
11.根据权利要求9所述的方法,其中所述比较步骤包括 选择所述正规化二进制映象内的所述识别出的函数中的一者;及通过将所述识别出的函数中的所述选定一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定一者与所述参考二进制映象比较。
12.根据权利要求5所述的方法,其进一步包括选择所述正规化二进制映象内的所述识别出的函数中的下一者;及通过将所述识别出的函数中的所述选定下一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定下一者与所述参考二进制映象比较。
13.根据权利要求9所述的方法,其中所述比较步骤包括 选择所述正规化二进制映象内的所述识别出的函数中的一者;将散列算法应用于所述识别出的函数中的所述选定一者以产生第一散列值;及将所述第一散列值与第一参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象而产生所述第一参考散列值。
14.根据权利要求13所述的方法,其进一步包括选择所述正规化二进制映象内的所述识别出的函数中的下一者; 将所述散列算法应用于所述识别出的函数中的所述选定下一者以产生第二散列值;及将所述第二散列值与所述第一参考散列值比较以确定是否存在匹配。
15.根据权利要求13所述的方法,其中所述将所述第一散列值与所述第一参考散列值比较的步骤包括将所述第一散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象中的每一者而产生了所述多个散列值。
16.根据权利要求9所述的方法,其进一步包括 识别所述识别出的函数中的至少一者内的组成部分; 选择所述识别出的组成部分中的第一者;将散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与参考组成部分散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
17.根据权利要求13所述的方法,其进一步包括 识别所述识别出的函数中的至少一者内的组成部分; 选择所述识别出的组成部分中的第一者;将所述散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与参考组成部分散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
18.根据权利要求9所述的方法,其进一步包括使所述正规化二进制映象内的分支地址正规化。
19.一种用于分析软件二进制映象的方法,其包括使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象;识别所述正规化二进制映象内的函数; 识别所述识别出的函数中的每一者内的组成部分;选择所述正规化二进制映象内的所述识别出的函数中的一者;选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者;将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值;及将所述组成部分散列值与参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于参考函数二进制映象的组成部分而产生了所述参考散列值。
20.根据权利要求19所述的方法,其中所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
21.根据权利要求19所述的方法,其进一步包括使所述正规化二进制映象内的分支地址正规化。
22.根据权利要求19所述的方法,其中重复所述选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者、将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值,及将所述组成部分散列值与参考散列值比较的步骤,直到所述识别出的函数中的所述选定一者的所述组成部分中的每一者的每一组成部分散列值已与所述参考散列值比较为止。
23.根据权利要求22所述的方法,其中重复所述选择所述正规化二进制映象内的所述识别出的函数中的一者的步骤,直到所述正规化二进制映象内的所述识别出的函数中的每一者的所述组成部分中的每一者的所有组成部分散列值已与所述参考散列值比较为止。
24.根据权利要求23所述的方法,其中所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
25.根据权利要求M所述的方法,其进一步包括提供识别与一个或一个以上参考散列值匹配的组成部分散列值的数目的输出。
26.根据权利要求25所述的方法,其中所述输出是与参考函数内的组成部分匹配的组成部分的百分比。
27.根据权利要求19所述的方法,其进一步包括提供将选定函数内的匹配的组成部分的顺序与参考函数内的匹配的组成部分的顺序比较的输出。
28.一种计算机,其包括处理器;及存储器,其耦合到所述处理器,其中所述处理器配置有用以执行包括以下的步骤的软件指令使软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象;识别所述正规化二进制映象内的函数;及将所述正规化二进制映象中的每一识别出的函数与参考二进制映象比较以确定是否存在匹配。
29.根据权利要求观所述的计算机,其中所述处理器配置有软件指令,使得所述比较步骤包括将所述正规化二进制映象中的每一识别出的函数与多个参考二进制映象中的每一者比较以确定是否与所述多个参考二进制映象中的任一者存在匹配。
30.根据权利要求观所述的计算机,其中所述处理器配置有软件指令,使得所述比较步骤包括选择所述正规化二进制映象内的所述识别出的函数中的一者;及通过将所述识别出的函数中的所述选定一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定一者与所述参考二进制映象比较。
31.根据权利要求30所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令选择所述正规化二进制映象内的所述识别出的函数中的下一者;及通过将所述识别出的函数中的所述选定下一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定下一者与所述参考二进制映象比较。
32.根据权利要求观所述的计算机,其中所述处理器配置有软件指令,使得所述比较步骤包括选择所述正规化二进制映象内的所述识别出的函数中的一者; 将散列算法应用于所述识别出的函数中的所述选定一者以产生第一散列值;及将所述第一散列值与第一参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象而产生了所述第一参考散列值。
33.根据权利要求32所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令选择所述正规化二进制映象内的所述识别出的函数中的下一者; 将所述散列算法应用于所述识别出的函数中的所述选定下一者以产生第二散列值;及将所述第二散列值与所述第一参考散列值比较以确定是否存在匹配。
34.根据权利要求32所述的计算机,其中所述处理器配置有软件指令,使得所述将所述第一散列值与参考散列值比较的步骤包括将所述第一散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象中的每一者而产生了所述多个散列值。
35.根据权利要求观所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令识别所述识别出的函数中的至少一者内的组成部分; 选择所述识别出的组成部分中的第一者;将散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
36.根据权利要求32所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令识别所述识别出的函数中的至少一者内的组成部分; 选择所述识别出的组成部分中的第一者;将所述散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与第二参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
37.根据权利要求观所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令使所述正规化二进制映象内的分支地址正规化。
38.一种计算机,其包括 处理器;及存储器,其耦合到所述处理器,其中所述处理器配置有用以执行包括以下的步骤的软件指令 使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象;识别所述正规化二进制映象内的函数; 识别所述识别出的函数中的每一者内的组成部分; 选择所述正规化二进制映象内的所述识别出的函数中的一者; 选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者; 将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值;及将所述组成部分散列值与参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于参考函数二进制映象的组成部分而产生了所述参考散列值。
39.根据权利要求38所述的计算机,其中所述处理器配置有软件指令,使得所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
40.根据权利要求38所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令使所述正规化二进制映象内的分支地址正规化。
41.根据权利要求38所述的计算机,其中所述处理器配置有软件指令,使得重复所述选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者、将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值,及将所述组成部分散列值与参考散列值比较的步骤,直到所述识别出的函数中的所述选定一者的所述组成部分中的每一者的每一组成部分散列值已与所述参考散列值比较为止。
42.根据权利要求41所述的计算机,其中所述处理器配置有软件指令,使得重复所述选择所述正规化二进制映象内的所述识别出的函数中的一者的步骤,直到所述正规化二进制映象内的所述识别出的函数中的每一者的所述组成部分中的每一者的所有组成部分散列值已与所述参考散列值比较为止。
43.根据权利要求42所述的计算机,其中所述处理器配置有软件指令,使得所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
44.根据权利要求43所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令提供识别与一个或一个以上参考散列值匹配的组成部分散列值的数目的输出。
45.根据权利要求44所述的计算机,其中所述处理器配置有用以执行步骤使得所述输出是与参考函数内的组成部分匹配的组成部分的百分比的软件指令。
46.根据权利要求38所述的计算机,其中所述处理器配置有用以执行进一步包括以下的步骤的软件指令提供将选定函数内的匹配的组成部分的顺序与参考函数内的匹配的组成部分的顺序比较的输出。
47.一种计算机,其包括用于使软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象的装置;用于识别所述正规化二进制映象内的函数的装置;及用于将所述正规化二进制映象内的每一识别出的函数与参考二进制映象比较以确定是否存在匹配的装置。
48.根据权利要求47所述的计算机,其中所述用于比较的装置包括用于将所述正规化二进制映象中的每一识别出的函数与多个参考二进制映象中的每一者比较以确定是否与所述多个参考二进制映象中的任一者存在匹配的装置。
49.根据权利要求47所述的计算机,其中所述用于比较的装置包括用于选择所述正规化二进制映象内的所述识别出的函数中的一者的装置;及用于通过将所述识别出的函数中的所述选定一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定一者与所述参考二进制映象比较的装置。
50.根据权利要求49所述的计算机,其进一步包括用于选择所述正规化二进制映象内的所述识别出的函数中的下一者的装置;及用于通过将所述识别出的函数中的所述选定下一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定下一者与所述参考二进制映象比较的装置。
51.根据权利要求47所述的计算机,其中所述用于比较的装置包括用于选择所述正规化二进制映象内的所述识别出的函数中的一者的装置;用于将散列算法应用于所述识别出的函数中的所述选定一者以产生第一散列值的装置;及用于将所述第一散列值与第一参考散列值比较以确定是否存在匹配的装置,其中通过将所述散列算法应用于所述参考二进制映象而产生了所述第一参考散列值。
52.根据权利要求51所述的计算机,其进一步包括用于选择所述正规化二进制映象内的所述识别出的函数中的下一者的装置;用于将所述散列算法应用于所述识别出的函数中的所述选定下一者以产生第二散列值的装置;及用于将所述第二散列值与所述第一参考散列值比较以确定是否存在匹配的装置。
53.根据权利要求51所述的计算机,其中所述用于将所述第一散列值与参考散列值比较的装置包括用于将所述第一散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的装置,其中通过将所述散列算法应用于多个参考二进制映象中的每一者而产生了所述多个散列值。
54.根据权利要求47所述的计算机,其进一步包括用于识别所述识别出的函数中的至少一者内的组成部分的装置; 用于选择所述识别出的组成部分中的第一者的装置;用于将散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值的装置;及用于将所述组成部分散列值与参考散列值比较以确定是否存在匹配的装置,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
55.根据权利要求51所述的计算机,其进一步包括用于识别所述识别出的函数中的至少一者内的组成部分的装置; 用于选择所述识别出的组成部分中的第一者的装置;用于将所述散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值的装置;及用于将所述组成部分散列值与第二参考散列值比较以确定是否存在匹配的装置,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
56.根据权利要求47所述的计算机,其进一步包括用于使所述正规化二进制映象内的分支地址正规化的装置。
57.一种计算机,其包括用于使软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象的装置;用于识别所述正规化二进制映象内的函数的装置; 用于识别所述识别出的函数中的每一者内的组成部分的装置; 用于选择所述正规化二进制映象内的所述识别出的函数中的一者的装置; 用于选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者的装置;用于将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值的装置;及用于将所述组成部分散列值与参考散列值比较以确定是否存在匹配的装置,其中通过将所述散列算法应用于参考函数二进制映象的组成部分而产生了所述参考散列值。
58.根据权利要求57所述的计算机,其中所述用于将所述产生的散列值与参考散列值比较的装置包括用于将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的装置,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
59.根据权利要求57所述的计算机,其进一步包括用于使所述正规化二进制映象内的分支地址正规化的装置。
60.根据权利要求57所述的计算机,其进一步包括用于重复地实施以下装置直到所述识别出的函数中的所述选定一者的所述组成部分中的每一者的每一组成部分散列值已与所述参考散列值比较为止的装置所述用于选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者的装置、用于将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值的装置,及用于将所述组成部分散列值与参考散列值比较的装置。
61.根据权利要求60所述的计算机,其进一步包括用于重复地实施以下装置直到所述正规化二进制映象内的所述识别出的函数中的每一者的所述组成部分中的每一者的所有组成部分散列值已与所述参考散列值比较为止的装置所述用于选择所述正规化二进制映象内的所述识别出的函数中的一者的装置。
62.根据权利要求61所述的计算机,其中所述用于将所述组成部分散列值与参考散列值比较的装置包括用于将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的装置,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
63.根据权利要求62所述的计算机,其进一步包括用于提供识别与一个或一个以上参考散列值匹配的组成部分散列值的数目的输出的装置。
64.根据权利要求63所述的计算机,其进一步包括用于输出与参考函数内的组成部分匹配的参考部分的百分比的装置。
65.根据权利要求57所述的计算机,其进一步包括用于提供将选定函数内的匹配的组成部分的顺序与参考函数内的匹配的组成部分的顺序比较的输出的装置。
66.一种有形存储媒体,其上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行包括以下的步骤使软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象;识别所述正规化二进制映象内的函数;及将所述正规化二进制映象内的每一识别出的函数与参考二进制映象比较以确定是否存在匹配。
67.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述比较步骤包括将所述正规化二进制映象中的每一识别出的函数与多个参考二进制映象中的每一者比较以确定是否与所述多个参考二进制映象中的任一者存在匹配的步骤。
68.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述比较步骤包括以下操作的步骤选择所述正规化二进制映象内的所述识别出的函数中的一者;及通过将所述识别出的函数中的所述选定一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定一者与所述参考二进制映象比较。
69.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤选择所述正规化二进制映象内的所述识别出的函数中的下一者;及通过将所述识别出的函数中的所述选定下一者中的位模式与所述参考二进制映象中的位模式比较以确定是否存在匹配而将所述识别出的函数中的所述选定下一者与所述参考二进制映象比较。
70.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述比较步骤包括以下操作的步骤选择所述正规化二进制映象内的所述识别出的函数中的一者;将散列算法应用于所述识别出的函数中的所述选定一者以产生第一散列值;及将所述第一散列值与第一参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象而产生了所述第一参考散列值。
71.根据权利要求70所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤选择所述正规化二进制映象内的所述识别出的函数中的下一者;将所述散列算法应用于所述识别出的函数中的所述选定下一者以产生第二散列值;及将所述第二散列值与所述第一参考散列值比较以确定是否存在匹配。
72.根据权利要求70所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述将所述第一散列值与参考散列值比较的步骤包括将所述第一散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的步骤,其中通过将所述散列算法应用于多个参考二进制映象中的每一者而产生了所述多个散列值。
73.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤识别所述识别出的函数中的至少一者内的组成部分;选择所述识别出的组成部分中的第一者;将散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
74.根据权利要求70所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤识别所述识别出的函数中的至少一者内的组成部分; 选择所述识别出的组成部分中的第一者;将所述散列算法应用于所述识别出的组成部分中的所述选定第一者以产生组成部分散列值;及将所述组成部分散列值与第二参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于所述参考二进制映象的组成部分而产生了所述参考组成部分散列值。
75.根据权利要求66所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤使所述正规化二进制映象内的分支地址正规化。
76.一种有形存储媒体,其上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行包括以下的步骤处理器;及存储器,其耦合到所述处理器,其中所述处理器配置有用以执行包括以下的步骤的软件指令 使所述软件二进制映象内的存储器寄存器及存储器地址参考正规化以产生正规化二进制映象;识别所述正规化二进制映象内的函数; 识别所述识别出的函数中的每一者内的组成部分; 选择所述正规化二进制映象内的所述识别出的函数中的一者; 选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者; 将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值;及将所述组成部分散列值与参考散列值比较以确定是否存在匹配,其中通过将所述散列算法应用于参考函数二进制映象的组成部分而产生了所述参考散列值。
77.根据权利要求76所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的步骤,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值。
78.根据权利要求76所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤使所述正规化二进制映象内的分支地址正规化。
79.根据权利要求76所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得重复以下步骤直到所述识别出的函数中的所述选定一者的所述组成部分中的每一者的每一组成部分散列值已与所述参考散列值比较为止的步骤选择所述识别出的函数中的所述选定一者内的所述识别出的组成部分中的一者、将所述散列算法应用于所述识别出的组成部分中的所述选定一者以产生组成部分散列值,及将所述组成部分散列值与参考散列值比较。1
80.根据权利要求79所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得重复以下步骤直到所述正规化二进制映象内的所述识别出的函数中的每一者的所述组成部分中的每一者的所有组成部分散列值已与所述参考散列值比较为止的步骤选择所述正规化二进制映象内的所述识别出的函数中的一者。
81.根据权利要求80所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述将所述组成部分散列值与参考散列值比较的步骤包括将所述组成部分散列值与多个参考散列值中的每一者比较以确定是否与所述多个参考散列值中的任一者存在匹配的步骤,其中通过将所述散列算法应用于多个参考二进制映象的每一组成部分而产生了所述多个参考散列值以确定是否存在匹配。
82.根据权利要求81所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤提供识别与一个或一个以上参考散列值匹配的组成部分散列值的数目的输出。
83.根据权利要求82所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行使得所述输出是与参考函数内的组成部分匹配的组成部分的百分比的步骤。
84.根据权利要求76所述的有形存储媒体,其中所述有形存储媒体上存储有处理器可执行软件指令,所述处理器可执行软件指令经配置以使计算机的处理器执行进一步包括以下的步骤提供将选定函数内的匹配的组成部分的顺序与参考函数内的匹配的组成部分的顺序比较的输出。
全文摘要
本发明提供使得能够识别软件二进制映象内的特定软件函数、模块或算术块的方法及计算装置。使所述二进制映象内的存储器寄存器及存储器地址参考正规化。识别所述二进制映象内的函数。将所述二进制映象内的每一函数与一个或一个以上参考函数二进制映象比较,以确定是否存在匹配。可通过比较位模式或通过比较通过将散列函数应用于选定函数及所述参考函数产生的散列值来实现函数与参考函数的比较。可识别所述二进制映象中的函数内的组成部分,且将其与参考函数内或参考函数组成部分的数据库内的参考函数组成部分比较。可使用所述比较的结果来确定所述软件二进制映象与参考函数及/或组成部分匹配的程度。
文档编号G06F11/36GK102414668SQ201080018602
公开日2012年4月11日 申请日期2010年4月28日 优先权日2009年4月28日
发明者理查德·阿兰·斯图尔特 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1