面向安卓应用程序的渐进控制流混淆方法和电子设备技术

技术编号:24251149 阅读:66 留言:0更新日期:2020-05-22 23:22
本申请公开了面向安卓应用程序的渐进控制流混淆方法和电子设备。该方法包括:获取目标应用程序的smali文件;将所述smali文件中的各个函数拆分成可执行的逻辑块;确定各个逻辑块的混淆级别,并根据混淆级别将各个逻辑块划分为多个集合;按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。根据本申请,程序开发人员可以更自由的在程序混淆复杂程度和计算开销之间进行权衡。

A gradual control flow obfuscation method and electronic devices for Android Applications

【技术实现步骤摘要】
面向安卓应用程序的渐进控制流混淆方法和电子设备
本申请属于软件开发领域,更具体地,涉及面向安卓应用程序的渐进控制流混淆方法和电子设备。
技术介绍
Android(安卓)字节码易于逆向,因此Android应用程序开发人员采用混淆技术对软件代码进行变换,保护应用程序。控制流混淆是通过改变程序判定条件、对程序结构和执行路径进行调整、或向程序中添加不透明谓词等方法增加程序的复杂度,增加反编译程序的难度。尽管控制流混淆技术能够为应用程序提供更强的安全保障,但由于需要插入大量的调用和返回指令,会产生很大的开销,不易于实践。
技术实现思路
有鉴于此,本申请实施例提供了一种渐进控制流混淆方法、电子设备及介质,以便于在混淆复杂程度和计算开销之间取得平衡。第一方面,本申请实施例提供了一种面向安卓应用程序的渐进控制流混淆方法,包括:获取目标应用程序的smali文件;将所述smali文件中的各个函数拆分成可执行的逻辑块;确定各个逻辑块的混淆级别,并根据混淆级别将各个逻辑块划分为多个集合;按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。在一种可能的实施方式中,所述获取目标应用程序的smali代码,包括:将目标应用程序的apk文件解压,获取对应的classes.dex文件;使用apktool将classes.dex文件反编译成smali文件。在一种可能的实施方式中,所述确定各个逻辑块的混淆级别,包括:根据每个逻辑块的长度和/或安全级别,确定该逻辑块的混淆级别。在一种可能的实施方式中,所述根据混淆级别将各个逻辑块划分为多个集合,包括:将混淆级别处于同一范围的逻辑块,划分至同一个集合。在一种可能的实施方式中,所述按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,包括:从所述多个集合中选择混淆级别最高的预定数量个集合。在一种可能的实施方式中,所述判断当前混淆后的代码是否达到期望的复杂度,包括:对当前混淆后的代码进行攻击;如果在预定时间内,当前混淆后的代码被成功破解,则判断未达到期望的复杂度;如果在预定时间内,当前混淆后的代码未被破解,则判断达到期望的复杂度。第二方面,本申请实施例还提供了一种电子设备,该电子设备包括:存储器,存储有可执行指令;处理器,所述处理器运行所述存储器中的所述可执行指令,以实现上述方法。第三方面,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法。上述技术方案中,以渐进的方式对程序进行混淆,直到程序混淆达到符合目标的复杂程度。根据本申请,程序开发人员可以在程序混淆复杂程度和计算开销之间取得期望的平衡。本申请的其它特征和优点将在随后具体实施方式部分予以详细说明。附图说明通过结合附图对本申请示例性实施方式进行更详细的描述,本申请的上述以及其它目的、特征和优势将变得更加明显,其中,在本申请示例性实施方式中,相同的参考标号通常代表相同部件。图1示出了根据本申请一个实施例的面向安卓应用程序的渐进控制流混淆方法的流程图。具体实施方式下面将更详细地描述本申请的优选实施方式。虽然以下描述了本申请的优选实施方式,然而应该理解,可以以各种形式实现本申请而不应被这里阐述的实施方式所限制。图1示出了根据本申请一个实施例的面向安卓应用程序的渐进控制流混淆方法的流程图。如图所示,该方法包括下列步骤。步骤101,获取目标应用程序的smali文件。在一种可能的实施方式中,可以将目标应用程序的apk文件解压,获取对应的classes.dex文件;再使用apktool将classes.dex文件反编译成smali文件。步骤102,将所述smali文件中的各个函数拆分成可执行的逻辑块。例如,每个切分后的逻辑块可以在Dalvik上可执行。可采用专用的软件进行切分,也可人工切分,本申请对此不做限定。步骤103,确定各个逻辑块的混淆级别,并根据混淆级别将各个逻辑块划分为多个集合。在一种可能的实施方式中,可根据每个逻辑块的长度和/或安全级别来确定该逻辑块的混淆级别。例如,针对每个逻辑块,可给其长度和安全级别赋予相应的加权系数,再将二者的加权和作为混淆级别。例如,也可根据长度来确定初始混淆级别,代码长度越长则混淆级别越高;然后根据逻辑块的安全级别对初始混淆级别进行调整,安全级别很好的逻辑块可适当提升其混淆级别。例如,也可仅根据长度来确定混淆级别,代码长度越长则混淆级别越高;或者仅根据安全级别来确定混淆级别,安全级别越高则混淆级别越高。在一种可能的实施方式中,可将混淆级别处于同一范围的逻辑块划分至同一个集合。集合与混淆级别范围间的对应关系可以是人为设定的,也可以是根据特定算法确定的。不同的集合之间正交,即一个逻辑块仅被划分至一个集合,不同集合之间没有重叠的逻辑块。本领域技术人员可以理解地是,可将一些不可或不必混淆的代码归入一个专门的集合,而在后续混淆中不对这个集合中的代码进行混淆。例如,涉及安卓四大组件的代码就不可混淆,如果混淆则无法启动目标应用程序。例如,第三方开源节流代码可能就没有必要进行混淆。步骤104,按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆。在一种可能的实施方式中,可以从所述多个集合中选择混淆级别最高的预定数量个集合,例如,可以选择混淆级别最高的前100个集合对其进行混淆。可采用本领域技术人员认为适用的任何方法对选中的集合中的逻辑块进行混淆。步骤105,判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。在一种可能的实施方式中,可通过下列方法判断当前混淆是否达到期望的复杂度:对当前混淆后的代码进行攻击;如果在预定时间内,当前混淆后的代码被成功破解,则判断未达到期望的复杂度;如果在预定时间内,当前混淆后的代码未被破解,则判断达到期望的复杂度。如果当前混淆后代码没有达到期望的复杂度,在一种可能的实施方式中,可通过下列方法对当前混淆后的代码进行进一步混淆:继续对已被混淆的逻辑块进行下一轮混淆。例如,在步骤103一共划分得到500个集合,并在步骤104选择混淆级别最高的100个集合进行混淆,如果在步骤105判断混淆未达到期望复杂度,则可对这100个集合中的逻辑块进行下一轮混淆,直到达到期望的复杂度,混淆结束。如果当前混淆后代码没有达到期望的复杂度,在另一种可能的实施方式中,可通过下列方法对当前混淆后的代码进行进一步混淆:从未被选中的集合中按照混淆级别选择集合进行混淆。例如,在步骤103一共划分得到500个集合,并在步骤104选择混淆级别最高的100个集合进行混淆,如果在步骤本文档来自技高网...

【技术保护点】
1.一种面向安卓应用程序的渐进控制流混淆方法,其特征在于,包括:/n获取目标应用程序的smali文件;/n将所述smali文件中的各个函数拆分成可执行的逻辑块;/n确定各个逻辑块的混淆级别,并根据混淆级别将所有逻辑块划分为多个集合;/n按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;/n判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。/n

【技术特征摘要】
1.一种面向安卓应用程序的渐进控制流混淆方法,其特征在于,包括:
获取目标应用程序的smali文件;
将所述smali文件中的各个函数拆分成可执行的逻辑块;
确定各个逻辑块的混淆级别,并根据混淆级别将所有逻辑块划分为多个集合;
按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;
判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。


2.根据权利要求1所述的方法,其特征在于,所述获取目标应用程序的smali代码,包括:
将目标应用程序的apk文件解压,获取对应的classes.dex文件;
使用apktool将classes.dex文件反编译成smali文件。


3.根据权利要求1所述的方法,其特征在于,所述确定各个逻辑块的混淆级别,包括:
根据每个逻辑块的长度和/或安全级别,确定该逻辑块的混淆级别。


4.根据权利要求1所述的方法,其特征在于,所述根据混淆级别将所有逻辑块划分为多个集合,包括:
将混淆级别处于同一范围的逻辑块,划分至同一个集合。


5.根据权利要求1所述的方法,其特征在...

【专利技术属性】
技术研发人员:刘茜
申请(专利权)人:航天信息股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1