CN111190601A - 面向安卓应用程序的渐进控制流混淆方法和电子设备 - Google Patents
面向安卓应用程序的渐进控制流混淆方法和电子设备 Download PDFInfo
- Publication number
- CN111190601A CN111190601A CN201911360253.9A CN201911360253A CN111190601A CN 111190601 A CN111190601 A CN 111190601A CN 201911360253 A CN201911360253 A CN 201911360253A CN 111190601 A CN111190601 A CN 111190601A
- Authority
- CN
- China
- Prior art keywords
- level
- confusion
- sets
- currently
- obfuscation
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 25
- 230000000750 progressive effect Effects 0.000 title claims abstract description 10
- 238000004590 computer program Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
- G06F8/434—Pointers; Aliasing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Abstract
本申请公开了面向安卓应用程序的渐进控制流混淆方法和电子设备。该方法包括:获取目标应用程序的smali文件;将所述smali文件中的各个函数拆分成可执行的逻辑块;确定各个逻辑块的混淆级别,并根据混淆级别将各个逻辑块划分为多个集合;按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。根据本申请,程序开发人员可以更自由的在程序混淆复杂程度和计算开销之间进行权衡。
Description
技术领域
本申请属于软件开发领域,更具体地,涉及面向安卓应用程序的渐进控制流混淆方法和电子设备。
背景技术
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个集合进行混淆,如果在步骤105判断混淆未达到期望复杂度,则可对500个集合中混淆级别次高的50个集合中的逻辑块进行混淆,直到达到期望的复杂度,混淆结束。
根据本申请实施例的电子设备包括存储器和处理器。
该存储器用于存储非暂时性计算机可读指令。具体地,存储器可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
该处理器可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制电子设备中的其它组件以执行期望的功能。在本申请的一个实施例中,该处理器用于运行该存储器中存储的该计算机可读指令。
本领域技术人员应能理解,为了解决如何获得良好用户体验效果的技术问题,本实施例中也可以包括诸如通信总线、接口等公知的结构,这些公知的结构也应包含在本申请的保护范围之内。
有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。
本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法。
根据本申请实施例的计算机可读存储介质,其上存储有非暂时性计算机可读指令。当该非暂时性计算机可读指令由处理器运行时,执行前述的本申请各实施例方法的全部或部分步骤。
上述计算机可读存储介质包括但不限于:光存储介质(例如:CD-ROM和DVD)、磁光存储介质(例如:MO)、磁存储介质(例如:磁带或移动硬盘)、具有内置的可重写非易失性存储器的媒体(例如:存储卡)和具有内置ROM的媒体(例如:ROM盒)。
以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。
Claims (10)
1.一种面向安卓应用程序的渐进控制流混淆方法,其特征在于,包括:
获取目标应用程序的smali文件;
将所述smali文件中的各个函数拆分成可执行的逻辑块;
确定各个逻辑块的混淆级别,并根据混淆级别将所有逻辑块划分为多个集合;
按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,对选中的集合中的逻辑块进行混淆;
判断当前混淆后的代码是否达到期望的复杂度,如果没有达到,则对当前混淆后的代码进行进一步混淆,直到达到期望的复杂度。
2.根据权利要求1所述的方法,其特征在于,所述获取目标应用程序的smali代码,包括:
将目标应用程序的apk文件解压,获取对应的classes.dex文件;
使用apktool将classes.dex文件反编译成smali文件。
3.根据权利要求1所述的方法,其特征在于,所述确定各个逻辑块的混淆级别,包括:
根据每个逻辑块的长度和/或安全级别,确定该逻辑块的混淆级别。
4.根据权利要求1所述的方法,其特征在于,所述根据混淆级别将所有逻辑块划分为多个集合,包括:
将混淆级别处于同一范围的逻辑块,划分至同一个集合。
5.根据权利要求1所述的方法,其特征在于,所述按照混淆级别从高到低的顺序从所述多个集合中选择部分集合,包括:
从所述多个集合中选择混淆级别最高的预定数量个集合。
6.根据权利要求1所述的方法,其特征在于,所述判断当前混淆后的代码是否达到期望的复杂度,包括:
对当前混淆后的代码进行攻击;
如果在预定时间内,当前混淆后的代码被成功破解,则判断未达到期望的复杂度;
如果在预定时间内,当前混淆后的代码未被破解,则判断达到期望的复杂度。
7.根据权利要求1所述的方法,其特征在于,所述对当前混淆后的代码进行进一步混淆,包括:
从未被选中的集合中根据混淆级别选择集合进行混淆。
8.根据权利要求1所述的方法,其特征在于,所述对当前混淆后的代码进行进一步混淆,包括:
继续对已被混淆的逻辑块进行下一轮混淆。
9.一种电子设备,其特征在于,所述电子设备包括:
存储器,存储有可执行指令;
处理器,所述处理器运行所述存储器中的所述可执行指令,以实现权利要求1-8中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911360253.9A CN111190601A (zh) | 2019-12-25 | 2019-12-25 | 面向安卓应用程序的渐进控制流混淆方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911360253.9A CN111190601A (zh) | 2019-12-25 | 2019-12-25 | 面向安卓应用程序的渐进控制流混淆方法和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111190601A true CN111190601A (zh) | 2020-05-22 |
Family
ID=70709409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911360253.9A Pending CN111190601A (zh) | 2019-12-25 | 2019-12-25 | 面向安卓应用程序的渐进控制流混淆方法和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190601A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6668325B1 (en) * | 1997-06-09 | 2003-12-23 | Intertrust Technologies | Obfuscation techniques for enhancing software security |
US20060195703A1 (en) * | 2005-02-25 | 2006-08-31 | Microsoft Corporation | System and method of iterative code obfuscation |
US20150363580A1 (en) * | 2014-06-17 | 2015-12-17 | Apple Inc. | Protecting software through a fake cryptographic layer |
CN108170433A (zh) * | 2017-12-22 | 2018-06-15 | 上海你我贷互联网金融信息服务有限公司 | 一种Java代码的混淆方法、恢复方法及其装置 |
-
2019
- 2019-12-25 CN CN201911360253.9A patent/CN111190601A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6668325B1 (en) * | 1997-06-09 | 2003-12-23 | Intertrust Technologies | Obfuscation techniques for enhancing software security |
US20060195703A1 (en) * | 2005-02-25 | 2006-08-31 | Microsoft Corporation | System and method of iterative code obfuscation |
US20150363580A1 (en) * | 2014-06-17 | 2015-12-17 | Apple Inc. | Protecting software through a fake cryptographic layer |
CN108170433A (zh) * | 2017-12-22 | 2018-06-15 | 上海你我贷互联网金融信息服务有限公司 | 一种Java代码的混淆方法、恢复方法及其装置 |
Non-Patent Citations (2)
Title |
---|
刘方圆;孟宪佳;汤战勇;房鼎益;龚晓庆;: "基于smali代码混淆的Android应用保护方法", no. 03, pages 2 - 7 * |
向广利: "《软件保护新技术》", 武汉大学出版社, pages: 19 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3779745B1 (en) | Code pointer authentication for hardware flow control | |
KR101890125B1 (ko) | 메모리 힙 영역 공격을 방어하기 위한 메모리 정렬 랜덤화 방법 | |
US7716459B2 (en) | Protection of a program jump from fault injection by masking a memory address with a random number | |
JP2014526751A (ja) | リターン指向プログラミングのペイロードを検出するためのシステム、方法、および、非一時的コンピュータ可読媒体 | |
CN114266050B (zh) | 一种跨平台恶意软件对抗样本生成方法及系统 | |
US10417412B2 (en) | Protecting computer code against ROP attacks | |
US20200380150A1 (en) | Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method | |
KR102302484B1 (ko) | 특성 선택에 기반한 모바일 악성 코드 분류 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
CN111324916A (zh) | 一种数据销毁方法、装置、设备及可读存储介质 | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
CN108985096B (zh) | 一种Android SQLite数据库安全增强、安全操作方法以及装置 | |
CN108446538B (zh) | 基于状态、符号执行和单点逻辑的源代码加固方法及装置 | |
CN111190601A (zh) | 面向安卓应用程序的渐进控制流混淆方法和电子设备 | |
US20060095977A1 (en) | Software protecting method and apparatus using the same | |
US8800048B2 (en) | Software protection through interdependent parameter cloud constrained software execution | |
Murphy et al. | Software profiling options and their effects on security based diversification | |
US11256786B2 (en) | Method to secure a software code | |
CN108021792B (zh) | 镜像软件的生成方法、装置及相应终端 | |
KR100955725B1 (ko) | 메모리 해킹 차단 방법 및 시스템 | |
KR101810765B1 (ko) | 상수 인코딩을 이용한 정적 워터마킹 방법 | |
CN108446541B (zh) | 基于有限状态机和符号执行的源代码加固方法及装置 | |
KR102427767B1 (ko) | 구현 특징에 기반한 모바일 악성 애플리케이션 탐지 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
KR102186221B1 (ko) | 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치 | |
CN104252597A (zh) | 一种指示移动设备操作环境的方法和能够指示操作环境的移动设备 | |
CN108416191B (zh) | 基于不透明谓词和有限状态机加固源代码的方法及装置 |
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 |