CN111201526A - 选择软件文件的方法 - Google Patents

选择软件文件的方法 Download PDF

Info

Publication number
CN111201526A
CN111201526A CN201880064811.4A CN201880064811A CN111201526A CN 111201526 A CN111201526 A CN 111201526A CN 201880064811 A CN201880064811 A CN 201880064811A CN 111201526 A CN111201526 A CN 111201526A
Authority
CN
China
Prior art keywords
file
program
score
files
character strings
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201880064811.4A
Other languages
English (en)
Inventor
G·加戈纳罗特
T·拉扎芬德拉郎博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EshardSAS
Original Assignee
EshardSAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EshardSAS filed Critical EshardSAS
Publication of CN111201526A publication Critical patent/CN111201526A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting

Abstract

本发明涉及用于选择可执行软件应用的程序文件的方法,包括:从可执行应用文件(APF)中提取程序文本文件(CF);对于每个程序文本文件,计算至少一个句法度量或程序复杂度度量(QT1‑QTn),并基于所计算的度量来计算分数(FMT);以及生成根据计算的分数与阈值的比较而选择的程序文本文件的列表(SFL)。

Description

选择软件文件的方法
技术领域
本发明涉及软件程序和/或应用,并且涉及该应用对逆向工程的保护以及对在该应用中操纵或包括的数据的保护。
背景技术
应用的逆向工程包括对应用的分析,以便收集有关其操作和其操纵的数据的信息。逆向工程的目的是总结,以从其分布式二进制形式重建应用的原始源代码。
同时,近年来,可以从公共“应用商店”或“市场”下载到移动设备的软件应用的数量激增。诸如安卓(Android)应用的应用使用称为AndroidTM Package工具包(APK)的文件进行分发,该文件包括应用将需要与安卓操作系统相关的安装并正确操作的代码和数据。
为产生APK文件,首先编译针对安卓平台设计的程序,并且然后将其所有部分组装到一个包文件APK中,该包文件APK包括所有程序可执行代码(诸如.dex文件)、资源文件、资产文件、证书文件以及清单文件。APK文件通常是具有Java Archive(JAR)文件格式的ZIP格式的包文件。APK文件是通常包含以下文件和文件夹的归档文件:
-META-INF文件夹,其包含:
清单文件,
应用的证书,
清单文件中对应行的SHA-1摘要和资源的列表,
-LIB文件夹,其包含专用于处理器架构的二进制代码,该文件夹在其中分为多个文件夹,包含针对不同处理器编译的程序文件,
-包含未编译的资源文件的文件夹,
-包含应用资产的文件夹,
-附加的安卓清单文件,其包括名称、版本、访问权限和应用所引用的库文件;该文件为安卓二进制XML,该安卓二进制XML可用专用工具(诸如AXMLPrinter2、APKTOOL或Androguard)转换为人可读的纯文本XML,
-一个程序文件“classes.dex”或几个程序文件“classesN.dex”(N对程序文件编号),其包含类的编译的字节码,为Dalvik虚拟机或Android Runtime环境可以理解的dex文件格式,以及
-包含预编译的资源的文件,诸如二进制XML。
每个APK文件具有一个或多个程序文件“classes.dex”,“classesN.dex”,其包含整个程序Java代码。出于可移植性的原因,用于安卓设备的程序通常用Java编写并编译为字节码(其包含在程序.class文件中)。然后,将编译的字节码从与Java虚拟机兼容的.class文件转换为Dalvik兼容的.dex(Dalvik可执行)文件,以便能够在计算设备上进行安装。.class文件中的Java字节码具有二进制格式,并表示可由Dalvik虚拟机执行的指令。
可以使用逆向工程工具(诸如APKTOOL)反汇编APK文件,该工具产生称为“类”的字节码程序文件以及在称为“包(package)”的目录和子目录中布置的数据文件。诸如Java类的类是用于创建对象的可扩展程序代码模板。类代表对象类别,并具有一组对象共有的成员、方法和属性。类的属性定义了属于该类的对象的特性。对象是类的实例。类的方法定义了属于该类的对象的行为或功能。方法是操纵该类的对象的属性的一组程序指令。
Java源代码文件中存在的许多信息通常包含在对应的字节码文件中。这包括有关在“LineNumberTable”中可存在的类、方法、类属性和源代码的信息。该表将指令链接到源代码的特定行,并且另一个称为“StackMapTable”的表用于验证变量类型。
逆向工程工具(诸如反编译工具)利用该附加的嵌入式信息来提高反编译的源代码的输出质量。
一些应用包括、存储或操纵潜在的敏感或私人信息。该敏感信息可以通过反汇编应用包文件并通过手动分析由此获得的文件和/或通过在运行时分析所执行的代码和/或所操纵的数据来取得。为了防止此类分析或使其更加困难和耗时,已经开发了诸如混淆技术的技术和工具。一些工具对应用的必须隐藏的代码部分进行转换,以使这些部分复杂和/或令人困惑。混淆技术的目的是使代码部分的透明度降低且可读性降低,以及增加代码部分的数据和控制流的复杂度。混淆可以应用于代码、数据、控制流和布局。混淆还可以防止反编译。
然而,在考虑某个应用时,很难评估或测量该应用的防篡改性或对其施加的混淆的质量,尤其是在反汇编后的应用包含数百个或数千个类文件的情况下。对混淆质量的评估应要求确定混淆了哪些代码部分,如何对其进行混淆,混淆的弹性如何以及该混淆为了向外部世界隐藏做了何种贡献。确实,与非敏感代码部分相比,应用的安全敏感代码部分可能需要更加混淆。另外,对安全敏感代码部分的混淆可能旨在隐藏安全敏感信息。
在软件开发中已经存在一些用于度量软件的可维护性的软件度量。这些度量中的一些度量使用诸如代码部分的透明度、可读性和数据和控制流复杂度的特性,来评估对代码部分的理解。透明度反映了如何从代码部分中提取直接的算法概念。可读性反映了变量、函数和类的名称对理解代码部分的逻辑的贡献。控制流定义哪些条件控制代码部分的操作,以及按什么顺序对其进行测试。数据流定义了代码部分的数据输入,以及这些输入如何被转换和输出。数据和控制流复杂度反映了代码部分的各组成之间的相互依赖性以及它们在运行时如何彼此通信。
因此,需要对程序文件的混淆进行量化。然后,混淆量化可用于对应被更加混淆的文件进行排序或选择。还需要选择对于当前需求没有被充分混淆的程序文件,并且可选地处理所选的文件以使用混淆来改进对它们的保护。
发明内容
描述了一种方法,该方法用于评估应用的混淆级别以及用于根据所评估的混淆质量对文件进行选择或排序。评估可执行软件应用的混淆的方法可以包括:由处理器从可执行软件应用生成程序文本文件;对于软件应用的每个程序文本文件,计算至少一个句法度量或程序复杂度度量;由处理器基于所计算的度量针对每个程序文本文件计算相应的分数;由处理器根据程序文本文件的相应的所计算的分数对程序文本文件执行排序操作;以及由处理器提供排序操作的结果,或通过对与每个识别的程序文本文件相对应的相应的源代码文件应用混淆处理来生成新的可执行软件应用,以生成用于每个识别的程序文本文件的修改的源代码文件,该新的可执行软件应用从与程序文本文件相对应的源代码文件中获得,其中每个识别的程序文本文件的源代码文件被对应的修改的源代码文件替换。
根据实施例,该方法进一步包括:从可执行应用文件中提取程序代码文件;以及将程序代码文件转换为程序文本文件。
根据实施例,该方法进一步包括:将每个计算的分数与阈值进行比较;以及根据比较的结果来选择程序文本文件。
根据实施例,该方法进一步包括显示所计算的分数,每个分数被显示为具有取决于分数值的颜色并且与对应的程序文本文件的名称相关联的图块。
根据实施例,所显示的图块以行和列布置。
根据实施例,该方法进一步包括从可执行软件应用文件中提取程序代码和数据文件,该程序代码和数据文件分配在文件夹树结构的文件夹中,每个文件夹对应于可执行软件应用的包,并且每个程序代码文件对应于包中的一个包的类。
根据实施例,句法度量被应用于程序文本文件的字符串,并且包括以下中的至少一项:按字符串大小划分的字符串数量相对于总字符串数量的比率、这些比率的分布以及字符串的平均大小,具有至少一个非ASCII字符的字符串的数量相对于总字符串数量的比率,具有至少一个非字母字符的字符串的数量相对于总字符串数量的比率,具有第一编码的字符串和具有第二编码的字符串的数量相对于总字符串数量的比率,具有至少一个Unicode字符的字符串的数量相对于总字符串数量的比率,具有至少一个特殊字符的字符串的数量相对于总字符串数量的比率,具有不可打印字符的字符串的数量相对于总字符串数量的比率,以及具有未知编码的字符串的数量相对于总字符串数量的比率。
根据实施例,程序复杂度度量包括以下中的至少一项:代码的总行数,包、类和函数或方法的数量,每个函数或方法的指令的数量,应用编程接口调用的分布,类、方法、类属性、常量的分布,Halstead度量,以及McCabe圈(cyclomatic)复杂度分析。
根据实施例,该方法进一步包括:针对程序文本文件中的每个程序文本文件生成控制流程图,和/或生成包括应用的函数的所有方法的调用图。
根据实施例,该方法进一步包括:将每个计算的分数与相应的阈值进行比较;根据与其相应的阈值的比较来选择分数;以及根据与所选择的分数相对应的度量,通过添加分别针对每个所选择的分数定义的系数,针对每个程序文本文件计算全局分数。
根据实施例,该方法进一步包括:通过将加权系数应用于针对文件集的程序文本文件计算的全局分数来计算程序文本文件的文件集的全局分数,和/或通过将加权系数应用于从软件应用的每个程序文本文件计算的分数来计算软件应用的全局分数。
根据实施例,新的可执行软件应用的生成包括:选择混淆处理;将所选择的混淆处理应用于每个识别的程序文本文件的源代码文件;以及编译和汇编源代码文件,对新的可执行软件应用进行进一步测试,以识别未充分混淆的程序文本文件。
根据实施例,针对程序文本文件计算的全局分数是基于用户选择的一个或多个度量的,并且混淆处理是根据所选的度量来选择的。
实施例还可涉及一种计算机系统,用于选择可执行软件应用的可执行程序文件,该计算机系统被配置为实现如先前定义的方法。
实施例还可涉及一种计算机程序产品,该计算机程序产品可加载到计算机存储器中并且包括代码部分,该代码部分在由一个或多个计算机执行时配置一个或多个计算机以执行如先前定义的方法。
附图说明
参考以下附图和描述可以更好地理解本方法和/或设备。结合以下附图描述了非限制性和非穷举性的描述。在附图中,除非另外指定,否则贯穿不同的附图相同的参考符号可以指代相同的部分。
图1是根据实施例的文件选择系统的框图,该文件选择系统实现了分析软件应用、计算混淆度并根据所计算的混淆度来选择程序文件的方法;
图2是根据实施例的图1的系统的预处理工具和由预处理工具产生的数据库的框图;
图3A、3B、3C、3D是根据实施例的应用于软件应用的文件的度量的直方图;
图4示出根据实施例的由图1的系统产生的示例性图像;
图5是可用于处理由图1的文件选择系统选择的文件的混淆工具的示例的框图;
图6是根据实施例的可以在其中实现分析系统的网络计算系统的框图;
图7是可以实现文件选择系统的计算机系统或可以访问文件选择系统的用户终端的框图。
具体实施方式
如下文所用,除非另有明确说明外,以下术语具有以下含义。术语“度量”是指表示所检查的代码满足一些评估标准的程度的值。
术语“混淆”是指程序代码的变换,以便例如通过增加复杂度来隐藏代码的原始意图。混淆可以通过计算被模糊的代码的合适度量来测量。
图1示出根据实施例的设计用于分析软件应用的计算机系统1。系统1被配置为确定应用的软件部分的混淆度,并且因此相对于各软件部分实现的操作的安全敏感性来选择和/或识别具有不充分的混淆度的文件。系统1包括预处理模块PPRC、混淆分析模块OAM和度量分析模块MTAM。软件应用文件APF可以是应用软件包,例如安卓应用包,或者可以安装在目标计算设备中或由目标计算设备执行的应用文件。
模块PPRC将应用文件APF反汇编为包文件或源文件和/或可以存储在例如数据库APDB中的单独的文件CF、DF。数据库APDB中的文件包括程序代码文件CF和数据文件DF。模块PPRC可以从应用包提取其它信息或从所提取的文件中提取其它信息,以便于对应用进行混淆分析。
模块OAM包括度量模块MT1,MT2,...,MTn,其可以访问可以在数据库APBD中的所存储的信息。度量模块MT1,MT2,...,MTn中的每个度量模块为数据库APDB中的应用文件APF的每个程序代码文件CF提供相应的度量分数QT1,QT2,...,QTn。
模块MTAM被配置为基于针对文件CF计算的度量分数QT1-QTn,来计算从应用文件APF中提取的每个程序代码文件CF的相应的全局混淆分数FMT。模块MTAM进一步被配置为基于针对包的程序代码文件计算的全局分数FMT,来计算从应用文件APF提取的每个包的相应的全局分数PMT。模块MTAM进一步被配置为基于针对应用的包计算的全局分数PMT,计算应用的全局分数GMT。
系统1可以进一步包括图形用户界面WUI,该图形用户界面WUI使用户能够将命令输入到系统1中并显示混淆分析结果。
用户界面WUI可以配置为使用户能够定义混淆阈值,混淆阈值将应用于全局分数FMT、PMT和AMT。针对文件分数FMT的模糊阈值的定义触发了对模糊不充分的文件的列表SFL的生成。列表SFL指定可以有利地提交给混淆处理的代码文件CF。
图2示出了预处理模块PPRC的操作。模块PPRC可以包括反汇编(disassembling)模块DASM、静态代码分析模块SCA、反编译模块DCMP和控制流程图模块CFGS。
反汇编模块DASM将应用文件APF反汇编为不同的文件,从而使应用能够被反编译。在使用安卓应用包的情况下,反汇编模块可产生数据文件、资源文件和包含可执行代码的二进制文件。二进制文件将进一步被反编译为文本文件。
分析模块SCA执行由模块DASM生成的文本文件的解析。解析操作提取类的列表AF,并且针对每个类提取:
类信息,
类属性,
类常量,以及
类方法。
对于每个方法,模块SCA提供变元表和相同类或不同类的方法之间的调用树。
由模块SCA提取的信息被存储在数据库APDB中的文件AF中。模块SCA可以接收和处理来自用户的交互式命令。这些命令包括用于使用搜索过滤器来搜索类、属性、方法和方法调用的搜索命令。搜索命令包括单个查询或可以组合在一起的多个查询。查询对应于用户想要获取或知道的单条信息。可以将多个查询组合在一起以便形成交叉查询。这使用户可以通过组合多个查询来更好地过滤他所期望的结果。分析模块SCA还可以构建调用图,该调用图示出一个文件或一个包或整个应用的类方法之间的所有方法调用。
反编译模块DCMP将包含可执行代码的文本文件转换为源文件,源文件包括被分派到以树形结构布置的文件夹和子文件夹FD中的类文件CF,每个文件夹或子文件夹FD对应于包或子包。在其中带有文件CF、DF的文件夹树结构被存储在数据库APDB中。
控制流程图模块CFGS被配置为分析包含由反汇编模块DASM产生的可执行代码的文本文件,并针对每个文本代码文件CF中的每种方法生成控制流程图CFG。控制流程图中的代码框表示顺序指令代码块,两个代码块之间的箭头表示程序无条件跳转,并且带有三个箭头的测试框(菱形框)表示连接三个代码块的条件跳转。每个生成的控制流程图CFG可以与对应的源代码文件CF相关联地存储在数据库APDB中。控制流程图模块CFGS可以进一步被配置为分析所生成的控制流程图以确定它们相应的复杂度级别。
在安卓应用包的情况下,反汇编模块DASM将二进制文件反编译成人可读的文本文件,该文本文件包括采用诸如SMALI等的汇编语言的指令。文本文件可以进一步反汇编为Java编程语言(近似对应于原始源代码句法)。反汇编模块DASM可以使用诸如APKTOOL的软件工具来实现。分析模块可以使用诸如SMALISCA的软件工具来实现。反编译模块DCMP可以使用诸如DEX2JAR的软件工具来实现,将SMALI源代码文件转换为Java源代码文件。控制流程图生成模块CFGS可以使用软件模块CFGScanDroid来实现。
模块OAM的度量MT1-MTn模块中的一些度量模块可以执行字符串分析和/或程序代码分析。
类、方法或函数、类属性、变量和常数通常在文件CF中由包括一定数量的字符的字符串形成的名称来识别。另外,一些常量可以将字符串作为值。
在安卓的情况中,汇编代码通常使用SMALI句法(如https://www.quora.com/What-is-smali-inAndroid所说明的)。SMALI句法非常冗长,使得反编译后仍然存在大量信息,并且可为逆向工程提供有价值的信息。类、方法或函数、属性、变量和常量名称是有价值信息的示例。一些混淆技术包括更改这些名称。在其非混淆的版本中,字符串通常是有意义的、可理解的和/或可明白的。字符串易于混淆,并且代表使逆向工程过程更加困难的最简单方法,因为混淆字符串去除了可用于理解程序代码部分的功能以及程序代码部分如何运行的许多有意义的信息。这是因为字符串具有大小、字符分布、编码,并且有时使用人类语言。
通常,有意义的字符串包含6到15个字符。最常用的混淆器(ProGuard https://www.guardsquare.com/en/proguard)使用的最简单的混淆中的一种是修改所有这些名称,因此它们最终只能在其名称中包含一个字符。这是字符串混淆的最简单的形式。混淆的字符串也可以具有很多字符,以及因此,长字符串、具有可区分字符分布的字符串和/或若干字符编码。
字符串分析得出的度量也可以在每个文本代码文件CF中进行计算:
-按字符串大小划分的字符串数量相对于字符串总数量的比率、这些比率的分布、以及字符串的平均大小,
-具有至少一个非ASCII字符的字符串的数量相对于字符串总数量的比率,
-具有至少一个非字母字符的字符串的数量相对于字符串总数量的比率,
-具有第一编码(诸如utf8编码)的字符串和具有第二编码的字符串的数量相对于字符串总数量的比率,
-具有至少一个Unicode字符(无论是否处于转义模式)的字符串的数量相对于字符串总数量的比率,
-具有至少一个特殊字符(诸如回车符、数学符号、空格)的字符串的数量相对于字符串总数量的比率,
-具有不可打印字符的字符串的数量相对于字符串总数量的比率,
-具有未知编码的字符串的数量相对于字符串总数量的比率。
-...
为了确定字符串是否被混淆,可以考虑使用哪种人类语言进行编程。在英语的情况中,平均单词长度为5个字符。另外,程序员经常使用最多合并3个或4个单词的名称。因此,当使用英语时,可以将用于判断字符串是否混淆的阈值设置为2×5。低于该阈值,可以认为字符串可能被混淆,这需要进一步分析以确定其是否确实被混淆。
可以通过将度量数与阈值进行比较来使用数字形式的度量,度量的分数取决于度量数是小于还是大于阈值而为0或1。
可以通过将获得的分布与参考分布进行比较或使用标准来使用分布形式的度量,度量的分数取决于比较结果或标准的应用而为0或1。图3A、3B、3C、3D示出两个软件应用中实体名称的大小分布的直方图的示例。图3A和3B的直方图与类名称相关。图3C和3D的直方图与方法名称相关。图3A的直方图示出12%的类名称只有一个字符,这对于类名称来说是非常短的,并且因为一个字符不足以揭示类在应用中扮演的角色,所以可以暗示混淆。图3A进一步示出约26%的类名称具有六个字符,而约30%的类名称少于五个字符,这对于类名称是短的。高于六个字符的类名称的数量小于3%,并且直方图基本上具有高斯形状。
图3B的直方图示出约14%的类名称具有三个字符,并且约15%的类名称具有少于四个字符,这对于类名称也是短的,并且可揭示混淆。高于12个字符,该直方图也基本上具有高斯形状。
图3C的直方图示出约12%的方法名称仅具有一个字符,这对于方法名称是非常短的,并且可揭示混淆。图3C的直方图进一步示出约2%的方法名称具有两个字符。图3C的直方图进一步示出在18、21、24和27个字符处的相对峰,其可以揭示混淆。高于五个字符,则方法名称的其它长度基本上遵循高斯形状。
图3D的直方图示出约4%的方法名称具有一个字符,并且约12%的方法名称具有少于五个字符,这对于方法名称是短的,并且可揭示混淆。高于五个字符,则直方图基本上具有高斯形状。由于图3C的直方图比图3D的直方图更不规则,并且由于在图3C的1个字符处存在峰值,因此可以认为图3D的应用的方法名称比图3C的应用的方法名称被更少地混淆。
可以推断出,具有高峰值的直方图可以是混淆的软件实体名称的指示。当观察到针对一个或两个字符或2×M个字符的名称的该高峰值时,M是所用语言中的平均单词长度,可以认为软件实体名称被混淆。相反,不能利用具有高斯形状的直方图来确定软件实体名称是否被混淆,因此需要进一步研究。在以前的情况中,也可能进行附加调查,以确认第一分析结果。
对具有少于五个字符的名称和对具有大于五个字符的名称分别应用两种标准偏差的计算可用于揭示混淆。当标准偏差低于适当的阈值时,则不能认为混淆。高于该阈值,则标准偏差可揭示混淆或混淆质量更好。
程序代码分析得出的度量可以在多个代码文件CF中的每个代码文件CF中进行计算:
-代码指令或代码的行的数量,
-包、类和函数或者方法的数量,
-每个函数或方法的指令的数量,
-API(应用编程接口)使用的分布,
-类、方法、类属性、常量的分布,
-Halstead度量,
-McCabe圈复杂度分析,
-…
这些度量中的每一个度量具有可以与阈值(可由用户定义)进行比较的值,该度量的分数取决于比较结果而为0或1。
Halstead度量使用不同的运算符的数量n1、不同的操作数n的数量n2、运算符的总数N1和操作数的总数N2来计算。当这些数应用于方法或函数时,这些数被用于计算:
-程序长度N=N1+N2,
-程序词汇n=n1+n2,
-程序量V=N×LOG2(n),
-难度D=(n1/2)×(N2/n2)
-编程工作量E=D x V
可以将编程工作量视为代表程序代码的复杂度,并且可以将其与阈值进行比较,取决于比较结果,度量的分数为0或1。
McCabe圈复杂度分析通过分析其控制流程图CFG来确定特定函数的程序代码的复杂度和密度。该分析基于控制流程图CFG中的线性独立路径的数量LIPN的计算。数量LIPN可以使用以下公式计算:
LIPN=E-N+2 (1)
其中在图CFG中E是箭头数量,并且N是节点数量(即没有跳转的程序代码块)。在图2中的CFG图形示例中,E=16,n=13,LIPN=5。通常认为,当数量LIPN小于10时,对应的函数具有较低的复杂度。当该数量大于50时,对应的函数被认为非常复杂。基于McCabe圈复杂度分析的度量可以应用等于10的阈值。
执行程序代码分析的其它度量可以在每个代码文件CF中进行计算:
-反编译错误数量,例如使用不同的反编译工具,
-无效代码指令的数量,
-使用的数据结构的复杂度(多维表的使用),
-NPath复杂度(函数或方法中不同路径的数量),
-结的计数(函数或方法中控制流路径的交点的数量),
-Pivovarsky度量,
-Harrison和Magel度量,
-基于数据流的度量,
-…
模块MTAM针对从应用文件APF中提取的程序代码文件CF中的每一者来计算全局混淆分数FMT。字符串分析度量可以应用于整个文件CF。程序代码分析度量可以应用于文件CF中的函数或方法中的每一者。然后,可以使用由应用于文件CF的方法或函数的度量所提供的分数来计算文件CF的代码分析度量分数。可以根据针对文件CF计算的所有度量分数,针对从应用文件APF中提取的程序代码文件CF中的每一者来计算全局分数FMT。可以通过使用线性组合来组合针对文件CF、DF计算的度量分数QT1-QTn,来计算文件CF的全局分数FMT,每个度量分数QT1-QTn由相应的加权系数加权。可以定义加权系数,使得所计算的全局分数FMT具有在0和1之间的值。当度量分数是等于0或1的数时,文件CF的全局分数FMT是与等于1的度量分数相关联的加权系数的总和。
根据实施例,模块MTAM还通过添加属于包(即位于包的文件夹FD和子文件夹中)的所有程序文件CF的全局分数FMT来计算每个包(对应于文件夹FD)的全局分数PMT。模块MTAM可以进一步通过添加应用的所有单独包的全局分数PMT或添加针对应用的所有程序文件CF中的每个程序文件CF计算的全局分数FMT,来计算应用的全局分数AMT。全局分数PMT和AMT还可以通过分别使用来自全局分数FMT和PMT的加权系数计算加权平均值来获得。可以使用机器学习来确定和调节加权系数。
图4示出可以由模块WUI显示的图像OMP的示例。图4还示出图像OMP的详细视图。图像OMP示出以行和列布置的图块TL,每个图块表示数据库APDB中的相应的代码文件CF的全局分数FMT(即混淆度)。每个图块TL可以取决于对应的代码文件CF的全局分数FMT而使用颜色代码或灰度代码来显示。在图4的示例中,图块TL具有正方形或矩形形状。然而,图块可以具有任何其它形状。图块TL可以以与对文件夹树结构FTS的顺序读取相对应的顺序来布置。
通过将指针(例如,鼠标指针)放置在图块TL上,对应的代码文件CF的名称及其在树结构FTS中的位置可以例如在单独的窗口中显示,连同所计算的代码文件的混淆分数FMT。代码文件CF的位置由对应类所属的(嵌套)包的名称来定义。所显示的窗口还可以显示文件中调用的API(应用编程接口)类型(加密、数据库访问、网络访问等)。
在图4的示例中,图像OMP示出了根据图4中使用的灰度代码的与通常较少混淆的代码文件对应的整体上较暗的图块区域FS1。区域FS1可示出与树结构FTS的文件夹FD对应的较少混淆的包。
模块WUI可以进一步显示应用的包的列表,被显示的每个包与由模块MTAM计算的全局混淆分数PMT相关联。模块WUI可以进一步显示针对该应用计算的全局混淆分数AMT。
根据实施例,模块MTAM被配置为允许用户设置分数阈值并提取具有低于分数阈值的混淆分数FMT的代码文件CF的列表SFL。图像OMP的图块TL还可以取决于对应的混淆分数是否大于阈值而用两种不同的颜色或灰度级别来显示。
根据实施例,模块MTAM被配置为允许用户选择一个或多个度量的集合,并针对从应用文件APF中提取的程序代码文件CF、针对应用的包以及针对应用本身,来计算混淆分数,仅考虑所选择的度量提供的结果。当用户选择至少一个度量的集合时,可以基于模块MTAM使用所选度量为文件CF计算的分数来构建图像OMP。以该方式,用户可以集中于特定的度量集,使得列表SFL指定具有相对于所选度量集的不足够的分数的代码文件CF。
可以修改因此被选择为不充分混淆的代码文件CF或对应的源代码文件以改进其混淆。为此目的,存在与混淆度量MT1-MTn对应的混淆工具,其可以处理对应的源文件以改进可以从结果文件CF计算出的度量分数。
图5示出混淆工具2,混淆工具2可以用于处理在由如图1中所示的系统1提供的列表SFL中选择的文件。混淆工具2包括混淆模块OBM以及编译和汇编模块CAM。混淆模块OBM实现可改进由模块OAM针对代码文件CF计算的一个或多个度量分数QT1-QTn的一种或多种混淆技术。
混淆技术中的一种混淆技术可以使用任意或随机名称来重命名代码文件CF中包含的一些或所有名称。以下文件中公开了可以由模块OBM实现的已知混淆技术的其它示例:
-Cloakware/TranscoderTM:Cloakware Code ProtectionTM(Cloakware产品概述广告材料)的核心,
-美国专利No.6,594,761(Chow等人),
-美国专利No.6,668,325(Collberg等人),
-美国专利No.6,779,114(Chow等人),
混淆模块OBM接收由系统1选择的文件CF的列表SFL和软件应用的源代码文件SCF。混淆模块OBM可以被配置为根据列表SFL中列出的文件CF依次选择要处理的源代码文件SCF。在以面向对象编程语言编写的软件应用的情况中,列表SFL中的每个文件对应一类。要处理的对应源代码文件SCF是定义此类的代码。如果对应的源代码文件SCF包含一个以上类的定义,则模块OBM可以仅处理与源代码文件SCF中所选择的文件CF对应的类。可由用户选择或者例如如果系统1对文件的选择基于特定的度量集则根据一个或多个度量的集合来选择对所选源代码文件SCF应用的混淆参数或技术。
当处理了与列表SFL中的文件相对应的所有源代码文件SCF时,模块CAM编译源代码文件SCF并对其汇编以生成可输入到系统1的修改的应用文件APF1。系统1和混淆工具2实现的方法可以使用不同的混淆参数或技术对应用文件APF执行若干次,并且然后对生成的修改的应用文件APF1执行若干次,直到全局分数AMT或识别的包全局分数PMT达到期望值,或者直到文件列表SFL为空或仅包含不需要混淆的文件。
可以在一个或多个计算机系统中实现或涉及一种或多种上述技术。图6示出计算环境的一般示例。该计算环境并不暗示对所描述实施例的使用或功能的范围的任何限制。参考图6,计算环境包括处理服务器ASRV和用户终端UT,该用户终端UT可以经由诸如互联网或任何电信网络等的数据传输网络来访问服务器ASRV。服务器ASRV被配置为实现图1的系统1以选择从用户终端UT接收的应用的文件。系统1的用户界面WUI可以在用户终端UT中实现。
图7示出可以实现服务器ASRV和/或用户终端UT的计算环境CMP。参考图7,计算环境CMP包括至少一个处理单元CPU和存储器MEM。处理单元CPU执行计算机可执行指令,并且可以是硬件实现的处理器或虚拟处理器。存储器MEM可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等),或两者的一些组合。当由一个或多个处理器执行时,存储器MEM可以存储用于实现所描述的系统1的软件指令。
计算环境CMP可以包括附加特征。例如,计算环境CMP可以包括存储MST、一个或多个输入设备CM、一个或多个输出设备DSP,和/或一个或多个通信连接COM。诸如总线、控制器或网络的互连机制将计算环境CMP的组件互连。通常,操作系统软件或固件(未示出)为在计算环境CMP中执行的任何其它软件提供操作环境,并协调计算环境CMP的组件的活动。
存储MST可以是可移动的或不可移动的,并且可以包括磁盘和/或光盘,或可以用于存储信息并且可以在计算环境CMP内访问的任何其它介质。存储MST可以存储与软件相关的指令。
输入设备CM可以是诸如键盘、鼠标、笔、轨迹球、触摸屏或游戏控制器的触摸输入设备,语音输入设备,扫描设备,数字相机,遥控器或向计算环境CMP提供输入的其它设备。输出设备DSP可以是显示器、电视、监测器、打印机、扬声器或提供来自计算环境CMP的输出的其它设备。
通信连接COM实现通过通信介质到另一计算实体的通信。通信介质传递诸如应用文件APF、音频或视频信息或其它数据的信息。
图7示出计算环境、显示设备DSP和输入设备CM作为单独的设备,仅用于易于识别。计算环境CMP、显示设备DSP和输入设备CM可以是单独的设备(例如,通过线路连接到监测器和鼠标的个人计算机),也可以集成在单个设备(例如,具有触摸显示器的移动设备,诸如智能电话或平板计算机)或者设备的任何组合(例如,可操作地耦合到触摸屏显示设备的计算设备、连接到单个显示设备和输入设备的多个计算设备等)中。计算环境CMP可以是移动设备、个人计算机、机顶盒或一个或多个服务器,例如一组联网服务器、集群服务器环境或计算设备的云网络。
先前公开的方法和计算机系统可以处理以面向对象的语言以及其它编程语言编写的应用。
可以在不脱离所附权利要求书中限定的原理的情况下在布置和细节上修改所描述的实施例。应当理解,除非另有说明,否则在此描述的程序、过程或方法不涉及或不限于任何特定类型的计算环境。各种类型的通用或专用计算环境可以与在此描述的教导一起使用或根据其执行操作。以软件示出的所述实施例的元件可以全部或部分地以硬件实现,反之亦然。
在此描述的图示旨在提供对各种实施例的结构的一般理解。这些图示并不旨在用作对利用其中描述的结构或方法的装置、处理器和系统的所有元件和特征的完整描述。通过结合所公开的实施例来阅读本公开,许多其它实施例或其组合对于本领域普通技术人员而言可能是显而易见的。其它实施例可被利用并从本公开中得出,使得可以在不脱离本公开的范围的情况下进行结构和逻辑上的替换和改变。
此外,本公开和说明应被认为是说明性的而不是限制性的,并且所附权利要求旨在覆盖落入说明书的真实精神和范围内的所有此类修改、增强和其它实施例或其组合。因此,所附权利要求的范围将由权利要求及其等同物的最宽泛的允许解释来确定,并且不应由前述描述限制或限定。

Claims (15)

1.一种评估可执行软件应用的混淆性的方法,所述方法包括:
由处理器从所述可执行软件应用生成程序文本文件(CF);
对于所述软件应用的每个程序文本文件,计算至少一个句法度量或程序复杂度度量(QT1-QTn);
由所述处理器基于所计算的度量针对每个程序文本文件计算相应的分数(FMT);
由所述处理器根据程序文本文件的相应的所计算的分数对所述程序文本文件执行排序操作;以及
由所述处理器提供所述排序操作的结果,或者通过对对应于每个识别的程序文本文件的相应的源代码文件(SCF)应用混淆处理来生成新的可执行软件应用(APF1),以生成用于每个识别的程序文本文件的修改的源代码文件,所述新的可执行软件应用(APF1)从对应于所述程序文本文件的源代码文件中获得,其中每个识别的程序文本文件的所述源代码文件被所述对应的修改的源代码文件替换。
2.根据权利要求1所述的方法,进一步包括:
从所述可执行应用文件(APF)中提取程序代码文件;以及
将所述程序代码文件转换为所述程序文本文件(CF)。
3.根据权利要求1和2中的一项所述的方法,进一步包括:
将每个计算的分数(FMT)与阈值进行比较,以及
根据所述比较的结果来选择程序文本文件(CF)。
4.根据权利要求1至3中的一项所述的方法,进一步包括:显示所计算的分数(FMT),每个分数被显示为具有取决于所述分数值的颜色并且与对应的程序文本文件(CF)的名称相关联的图块(TL)。
5.根据权利要求4所述的方法,其中,所显示的图块以行和列布置。
6.根据权利要求1至5中的一项所述的方法,进一步包括:从所述可执行软件应用文件中提取程序代码和数据文件(CF、DF),所述程序代码和数据文件被分配在文件夹树结构(FTS)的文件夹(FD)中,每个文件夹对应于所述可执行软件应用的包,并且每个程序代码文件(CF)对应于所述包中的一个包的类。
7.根据权利要求1至6中的一项所述的方法,其中,所述句法度量(QT1-QTn)被应用于所述程序文本文件的字符串,并且包括以下中的至少一项:
按字符串的大小划分的字符串数量相对于总字符串数量的比率、这些比率的分布以及字符串的平均大小,
具有至少一个非ASCII字符的字符串的数量相对于所述总字符串数量的比率,
具有至少一个非字母字符的字符串的数量相对于所述总字符串数量的比率,
具有第一编码的字符串和具有第二编码的字符串的数量相对于所述总字符串数量的比率,
具有至少一个Unicode字符(无论是否处于转义模式)的字符串的数量相对于所述总字符串数量的比率,
具有至少一个特殊字符(诸如回车、数学符号、空格)的字符串的数量相对于所述总字符串数量的比率,
具有不可打印字符的字符串的数量相对于所述总字符串数量的比率,以及
具有未知编码的字符串的数量相对于所述总字符串数量的比率。
8.根据权利要求1至7中的一项所述的方法,其中,所述程序复杂度度量(QT1-QTn)包括以下中的至少一项:
代码的总行数,
包、类和函数或方法的数量,
每个函数或方法的指令的数量,
应用编程接口调用的分布,
类、方法、类属性、常量的分布,
Halstead度量,以及
McCabe圈复杂度分析。
9.根据权利要求1至8中的一项所述的方法,进一步包括:
针对所述程序文本文件(CF)中的每个程序文本文件(CF)生成控制流程图(CFG),和/或
生成包括所述应用的函数的所有所述方法的调用图。
10.根据权利要求1至9中的一项所述的方法,进一步包括:将每个计算的分数与相应的阈值进行比较;根据与其相应的阈值的所述比较来选择所述分数;以及根据对应于所选择的分数的所述度量,通过添加分别针对每个所选择的分数定义的系数,针对每个程序文本文件计算全局分数(FMT)。
11.根据权利要求1至10中的一项所述的方法,进一步包括:通过将加权系数应用到针对文件集的所述程序文本文件计算的所述全局分数(FMT)来计算程序文本文件(CF)的所述文件集的全局分数(PMT),和/或通过将加权系数应用到从所述软件应用的每个程序文本文件计算的所述分数来计算所述软件应用的全局分数(AMT)。
12.根据权利要求1至11中的一项所述的方法,其中,生成新的可执行软件应用(APF1)包括:
选择混淆处理;
将所选择的混淆处理应用于每个识别的程序文本文件的所述源代码文件;以及
编译并汇编所述源代码文件,对所述新的可执行软件应用进行进一步测试,以识别未充分混淆的程序文本文件。
13.根据权利要求12所述的方法,其中,针对所述程序文本文件计算的所述全局分数(FMT)是基于用户选择的一个或多个度量的,并且所述混淆处理是根据所选择的度量来选择的。
14.一种计算机系统,用于选择可执行软件应用的可执行程序文件,所述计算机系统被配置为实现根据权利要求1至13中的一项所述的方法。
15.一种计算机程序产品,其可加载到计算机存储器中并且包括代码部分,所述代码部分在由一个或多个计算机执行时,将所述一个或多个计算机配置为执行权利要求1至13中的一项所述的方法。
CN201880064811.4A 2017-10-05 2018-09-27 选择软件文件的方法 Pending CN111201526A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP17194988.6 2017-10-05
EP17194988.6A EP3467691B1 (en) 2017-10-05 2017-10-05 Method of selecting software files
PCT/EP2018/076218 WO2019068541A1 (en) 2017-10-05 2018-09-27 METHOD FOR SELECTING SOFTWARE FILES

Publications (1)

Publication Number Publication Date
CN111201526A true CN111201526A (zh) 2020-05-26

Family

ID=60037415

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880064811.4A Pending CN111201526A (zh) 2017-10-05 2018-09-27 选择软件文件的方法

Country Status (4)

Country Link
US (1) US20200226232A1 (zh)
EP (1) EP3467691B1 (zh)
CN (1) CN111201526A (zh)
WO (1) WO2019068541A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113446984A (zh) * 2021-05-22 2021-09-28 西安电子科技大学 轨道角动量探测概率优化选择方法、系统、介质、终端

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
CN110716765B (zh) * 2019-09-29 2023-04-07 浙江网新恒天软件有限公司 一种单体应用Faas化的方法
US20220156370A1 (en) * 2020-11-18 2022-05-19 Foundation Of Soongsil University-Industry Cooperation Obfuscated identifier detection method based on natural language processing and recording medium and apparatus for performing the same

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090119515A1 (en) * 2005-10-28 2009-05-07 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
US20090144698A1 (en) * 2007-11-29 2009-06-04 Microsoft Corporation Prioritizing quality improvements to source code
US20100180346A1 (en) * 2007-01-18 2010-07-15 Nicolson Kenneth Alexander Obfuscation assisting aparatus
US8984299B1 (en) * 2013-08-14 2015-03-17 Soongsil University Research Consortium Techno-Park Apparatus for code obfuscation and method thereof
US9135442B1 (en) * 2008-05-30 2015-09-15 Symantec Corporation Methods and systems for detecting obfuscated executables
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
US20170099307A1 (en) * 2015-10-06 2017-04-06 Shouhuai Xu Systems and methods for instructions-based detection of sophisticated obfuscation and packing

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4739465B2 (ja) 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US6980979B2 (en) * 2001-09-19 2005-12-27 Sun Microsystems, Inc. Method and apparatus for customizing Java API implementations
US9412199B2 (en) * 2006-02-13 2016-08-09 Uber Technologies, Inc. Draggable maps
US20080209401A1 (en) * 2007-02-22 2008-08-28 Microsoft Corporation Techniques for integrating debugging with decompilation
CA3001135A1 (en) * 2015-10-16 2017-04-20 Carefusion 303, Inc. Controlled substance diversion detection systems and methods

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090119515A1 (en) * 2005-10-28 2009-05-07 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
US20100180346A1 (en) * 2007-01-18 2010-07-15 Nicolson Kenneth Alexander Obfuscation assisting aparatus
US20090144698A1 (en) * 2007-11-29 2009-06-04 Microsoft Corporation Prioritizing quality improvements to source code
US9135442B1 (en) * 2008-05-30 2015-09-15 Symantec Corporation Methods and systems for detecting obfuscated executables
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
US8984299B1 (en) * 2013-08-14 2015-03-17 Soongsil University Research Consortium Techno-Park Apparatus for code obfuscation and method thereof
US20170099307A1 (en) * 2015-10-06 2017-04-06 Shouhuai Xu Systems and methods for instructions-based detection of sophisticated obfuscation and packing

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113446984A (zh) * 2021-05-22 2021-09-28 西安电子科技大学 轨道角动量探测概率优化选择方法、系统、介质、终端
CN113446984B (zh) * 2021-05-22 2022-04-19 西安电子科技大学 轨道角动量探测概率优化选择方法、系统、介质、终端

Also Published As

Publication number Publication date
WO2019068541A1 (en) 2019-04-11
US20200226232A1 (en) 2020-07-16
EP3467691B1 (en) 2020-08-26
EP3467691A1 (en) 2019-04-10

Similar Documents

Publication Publication Date Title
US10162610B2 (en) Method and apparatus for migration of application source code
US20200226232A1 (en) Method of selecting software files
Krogmann et al. Using genetic search for reverse engineering of parametric behavior models for performance prediction
Galindo et al. Testing variability-intensive systems using automated analysis: an application to android
US9710238B2 (en) Automatically optimizing analytics database server
US20240045850A1 (en) Systems and methods for database orientation transformation
US8046749B1 (en) Analysis of a sequence of data in object-oriented environments
MXPA02003699A (es) Un metodo y un sistema para generar un codigo de software utilizando un traductor de lenguaje simbolico.
US9311111B2 (en) Programming environment with support for handle and non-handle user-created classes
Domes et al. The optimization test environment
JP2008299723A (ja) プログラム検証方法、プログラム検証装置
CN111104123A (zh) 应用程序的自动部署
Heelan et al. Augmenting vulnerability analysis of binary code
US20160292067A1 (en) System and method for keyword based testing of custom components
Liu et al. Visual exploration of software evolution via topic modeling
Gabrijelčič Mastering Delphi Programming: A Complete Reference Guide: Learn all about building fast, scalable, and high performing applications with Delphi
Buchgeher et al. A platform for the automated provisioning of architecture information for large-scale service-oriented software systems
Polášek et al. Information and knowledge retrieval within software projects and their graphical representation for collaborative programming
Grechanik et al. Differencing graphical user interfaces
US10846198B2 (en) Automatic navigation from log statement to code
Kashima et al. Comparison of backward slicing techniques for java
Gharibi et al. ArchFeature: Integrating features into product line architecture
Gabrijelčič Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management
Kim et al. Providing profiling information for OpenGL ES application programs
Hess et al. Generating automatically class comments in Pharo

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20200526

WD01 Invention patent application deemed withdrawn after publication