CN110502876B - 一种基于资源文件的安卓界面静态混淆方法 - Google Patents
一种基于资源文件的安卓界面静态混淆方法 Download PDFInfo
- Publication number
- CN110502876B CN110502876B CN201910725291.3A CN201910725291A CN110502876B CN 110502876 B CN110502876 B CN 110502876B CN 201910725291 A CN201910725291 A CN 201910725291A CN 110502876 B CN110502876 B CN 110502876B
- Authority
- CN
- China
- Prior art keywords
- interface
- nodes
- same
- node
- interface layout
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000003068 static effect Effects 0.000 title claims abstract description 12
- 238000012857 repacking Methods 0.000 claims abstract description 4
- 238000002715 modification method Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Images
Classifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于资源文件的安卓界面静态混淆方法,包括以下步骤:获取待混淆的安卓应用的界面布局文件,所述界面布局文件以树形结构存储控件信息,布局文件树的每个内部节点代表一个布局,每个叶子节点代表一个控件;遍历获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件;拆分得到的界面布局文件;将拆分得到的界面布局文件重新打包为可运行的安卓应用,即得到混淆后的安卓应用。本发明通过对安卓应用界面布局文件的静态修改使得其界面加载过程与原有界面加载过程产生了较大的差异,实现了一种新的安卓混淆攻击方式。
Description
技术领域
本发明属于安卓应用安全技术领域,具体涉及一种基于资源文件的安卓界面静态混淆方法。
背景技术
随着智能手机的大规模普及,移动应用开发也得到了飞速发展,而安卓平台更是以其优良的性能表现赢得了众多开发者和用户的青睐。形形色色的安卓应用出现在应用市场,极大地丰富了人们的日常生活。但是,由于安卓应用易被破解重打包的特性,不法分子可以轻易破解安卓应用,获取安卓应用的重要信息,利用安卓混淆攻击技术对其进行修改后重打包并发布到应用市场上。这种行为不仅仅是对安卓开发者知识产权的一种侵犯,不法分子植入的恶意代码更是会植入广告、窃取用户信息等等,给用户造成极大的困扰。因此,如何有效检测出一个安卓应用是否经过恶意的混淆攻击已经成为安卓安全领域面临的重要挑战。
当前,常用的混淆攻击技术主要是基于传统的代码混淆技术。在应用的源码层次进行的混淆可以有效地提高代码层次的区分度,从而避免混淆攻击被检测出来。而随着软件胎记技术的不断完善,原有的代码混淆技术受到了巨大的挑战。因此,越来越多的工作开始着眼于用户界面。而从实际上来讲,现阶段尚没有针对界面的混淆工具。因此,如何在用户界面的层次上进行混淆攻击仍是目前本领域探索的方向。
发明内容
本发明所要解决的技术问题是针对上述现有技术的不足,提供一种基于资源文件的安卓界面静态混淆方法,该方法可以从用户界面的层次提供一种有效的混淆攻击方式,使得安卓界面的加载过程与原有过程产生较大的差异,可提高混淆攻击的成功率。
为实现上述技术目的,本发明采取的技术方案为:
一种基于资源文件的安卓界面静态混淆方法,包括以下步骤:
步骤1:获取待混淆的安卓应用的界面布局文件,所述界面布局文件以树形结构存储控件信息,布局文件树的每个内部节点代表一个布局,每个叶子节点代表一个控件;
步骤2:遍历步骤1获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件;
步骤3:拆分步骤2得到的界面布局文件;
步骤4:将步骤3拆分得到的界面布局文件重新打包为可运行的安卓应用,即得到混淆后的安卓应用。
为优化上述技术方案,采取的具体措施还包括:
上述的步骤1所述获取待混淆的安卓应用的界面布局文件,具体为:
反编译待混淆的安卓应用;在反编译得到的文件的res文件夹下的layout目录中获取界面布局文件。
上述的步骤2所述遍历步骤1获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件,具体为:
对界面布局文件中父节点相同的两个节点进行比较,判断其是否可交换;
使用随机数生成随机指示变量,对于可交换的两个控件,根据随机指示变量的值决定是否交换。
上述的所述父节点相同的两个节点是否可交换的判断方法为:
若两个节点属性类型相同且各自位于同一层的子节点属性类型相同,则可交换;否则不可交换。
上述的所述父节点相同的两个节点是否可交换的判断方法为:
判断父节点相同的两个节点是否具有相同的属性类型,若不具有相同的属性类型,则不可交换;若属性类型相同,则判断各自的子节点是否具有相同属性类型,并对子节点进行递归判断一直到叶子节点,若在递归过程中位于同一层的节点属性类型均相同,则认为其可交换;如果递归过程中在某一层发现有节点属性类型不同,则不可交换,此时对于原来的节点,若其有子节点,则对其所有子节点,每两个进行比较;若其没有子节点,则返回。
上述的所述判断父节点相同的两个节点是否具有相同的属性类型的方法为:
获取父节点相同的两个节点各自的属性列表并按列表下标遍历,若两个列表在同一下标处的属性名称不同,则两个节点属性类型不同,若遍历完成后没有不同的属性名称,则两个节点属性类型相同。
上述的步骤3所述拆分步骤2得到的界面布局文件,具体为:
在步骤2得到的每个界面布局文件中随机选择若干节点;
将随机选择的节点写入新的界面布局文件,在原界面布局文件中删除随机选择的节点,并且以include的方式包含新生成的界面布局文件,从而保护界面信息不被破坏。
本发明具有以下有益效果:
1)本发明利用安卓界面信息存储在界面布局文件中的特性,通过静态修改界面布局文件,实现了一种新的安卓混淆攻击方式,也为安卓混淆攻击研究提供了更多的新思路;
2)通过寻找并随机交换界面布局文件中的可交换控件,可能产生多种不同的交换组合,提高了交换结果的不确定性,一定程度上降低混淆攻击被识别的几率;
3)通过界面布局文件中控件的交换以及对界面布局文件的拆分,在极大限度不破坏用户体验的前提下进行混淆攻击,并且使得界面加载过程与原有过程产生了较大的差异,有效地达到了混淆攻击的目的。
附图说明
图1为本发明的流程图;
图2为本发明实施例的一个待交换控件的界面示意图;
图3为本发明实施例的一个控件交换后的界面示意图;
图4为本发明实施例的一个文件待拆分的界面示意图;
图5为本发明实施例的一个文件拆分后拆分出来的文件的界面示意图;
图6为本发明实施例的一个文件拆分后原文件的界面示意图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细描述。
实施例中,本发明推荐如下软件环境:
Java运行环境——JRE1.6或以上版本;
安卓反编译打包工具可选择Apktool。
如图1所示,本发明的一种基于资源文件的安卓界面静态混淆方法,包括以下步骤:
步骤1:获取待混淆的安卓应用的界面布局文件,所述界面布局文件以树形结构存储控件信息,布局文件树的每个内部节点代表一个布局,每个叶子节点代表一个控件;具体为:
反编译待混淆的安卓应用;在反编译得到的文件的res文件夹下的layout目录中获取界面布局文件。
实施例中,对于待混淆的安卓应用apk文件,本发明首先借助第三方工具(如Apktool)对其进行反编译,得到待混淆的安卓应用的所有资源文件,其中包含存储界面信息的界面布局文件;
接着解析XML形式的界面布局文件,即可得到树形结构的界面信息。
步骤2:遍历步骤1获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件,具体为:
对界面布局文件中父节点相同的两个节点进行比较,判断其是否可交换;
使用随机数生成随机指示变量,对于可交换的两个控件,根据随机指示变量的值决定是否交换。
所述父节点相同的两个节点是否可交换的判断方法为:
若两个节点属性类型相同且各自位于同一层的子节点属性类型相同,则可交换;否则不可交换。
上述父节点相同的两个节点是否可交换的判断方法为:
判断父节点相同的两个节点是否具有相同的属性类型,若不具有相同的属性类型,则不可交换;若属性类型相同,则判断各自的子节点是否具有相同属性类型,并对子节点进行递归判断一直到叶子节点,若在递归过程中位于同一层的节点属性类型均相同,则认为其可交换;如果递归过程中在某一层发现有节点属性类型不同,则不可交换,此时对于原来的节点,若其有子节点,则对其所有子节点,每两个进行比较;若其没有子节点,则返回。
所述判断父节点相同的两个节点是否具有相同的属性类型的方法为:
获取父节点相同的两个节点各自的属性列表并按列表下标遍历,若两个列表在同一下标处的属性名称不同,则两个节点属性类型不同,若遍历完成后没有不同的属性名称,则两个节点属性类型相同。
图2为一个待交换的界面的示意图。图2为对一个界面布局文件解得到的界面结构的树形表示,以下称其为布局树,根节点约定为第1层。其中,Rel_Lay和Lin_Lay分别是安卓常用布局RelativeLayout和LinearLayout的简化表示,Text_V和Img_V分别是安卓常用控件TextView和ImageView的简化表示,布局树第3层的Rel_Lay1,Rel_Lay2,Rel_Lay3,Rel_Lay4都是普通的RelativeLayout,实施例中加上数字后缀是为了交换后的区分。
图3为一个交换后的界面的示意图。本发明实施例对图2所示的布局树进行遍历。
首先遍历到根节点,其有三个子节点,对其两两比较,两个Rel_Lay具有相同的属性类型(属性信息同样存在于界面布局文件中,由于不便表示故在附图中未体现),接着遍历其子节点,发现子节点类型不同,故其不可交换。
完成两两比较后,接着遍历布局树第2层的所有节点,对每个节点,在其子节点中寻找可交换的控件,在两个Rel_Lay中未找到可交换的子节点,在Lin_Lay中,Lin_Lay的4个子节点中每两个比较一次,发现其属性类型相同,继续递归比较发现子节点类型和属性类型均相同,故可以交换,根据随机指示变量的值决定是否交换,实施例中,Rel_Lay1和Rel_Lay3交换,Rel_Lay2和Rel_Lay1交换,Rel_Lay4和Rel_Lay2交换(本实施例只是运行过程中实际发生的一种情形,实际上可能有其他情形发生),故得到图3所示的新的布局树。
步骤3:拆分步骤2得到的界面布局文件,具体为:
在步骤2得到的每个界面布局文件中随机选择若干节点;
将随机选择的节点写入新的界面布局文件(XML文件),在原界面布局文件中删除随机选择的节点,并且以include的方式包含新生成的界面布局文件,从而保护界面信息不被破坏。
步骤4:借助第三方工具(Apktool),将步骤3拆分得到的界面布局文件重新打包为可运行的安卓应用,即得到混淆后的安卓应用。
图4为一个待拆分的界面示意图,界面布局文件名为activity_main.xml,其布局树同图2。
图5为拆分得到的新文件,其名为activity_main1.xml,图6为节点拆分出去后原来的文件,其名仍为activity_main.xml。本发明实施例在进行文件拆分时,选择若干待拆分出去的节点,具体选择的是位于布局树第2层的Lin_Lay节点,将其从原文件拆分出来,写入到新的activity_main1.xml文件中,而在原文件中将被拆分的节点替换为”includeactivity_main1.xml”。
综上所述,本发明借助第三方工具反编译安卓应用,获取界面布局文件,充分利用界面布局文件中的有效信息,从中寻找可交换的控件并进一步进行随机交换,并且将原有的每个界面布局文件拆分成多个界面布局文件,再将应用重打包,使得混淆后的应用的界面加载过程与原来产生了较大的差异,实现了一种新的安卓界面混淆方法。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (4)
1.一种基于资源文件的安卓界面静态混淆方法,其特征在于:
所述安卓界面静态混淆方法包括以下步骤:
步骤1:获取待混淆的安卓应用的界面布局文件,所述界面布局文件以树形结构存储控件信息,布局文件树的每个内部节点代表一个布局,每个叶子节点代表一个控件;
步骤2:遍历步骤1获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件;
步骤3:拆分步骤2得到的界面布局文件;
步骤4:将步骤3拆分得到的界面布局文件重新打包为可运行的安卓应用,即得到混淆后的安卓应用;
步骤2所述遍历步骤1获取的所有界面布局文件,寻找并随机交换界面布局文件中可交换的同层控件,具体为:
对界面布局文件中父节点相同的两个节点进行比较,判断其是否可交换;
使用随机数生成随机指示变量,对于可交换的两个控件,根据随机指示变量的值决定是否交换;
所述父节点相同的两个节点是否可交换的判断方法为:
若两个节点属性类型相同且各自位于同一层的子节点属性类型相同,则可交换;否则不可交换;
所述父节点相同的两个节点是否可交换的判断方法为:
判断父节点相同的两个节点是否具有相同的属性类型,若不具有相同的属性类型,则不可交换;若属性类型相同,则判断各自的子节点是否具有相同属性类型,并对子节点进行递归判断一直到叶子节点,若在递归过程中位于同一层的节点属性类型均相同,则认为其可交换;如果递归过程中在某一层发现有节点属性类型不同,则不可交换,此时对于原来的节点,若其有子节点,则对其所有子节点,每两个进行比较;若其没有子节点,则返回。
2.根据权利要求1所述的一种基于资源文件的安卓界面静态混淆方法,其特征在于:
步骤1所述获取待混淆的安卓应用的界面布局文件,具体为:
反编译待混淆的安卓应用;在反编译得到的文件的res文件夹下的layout目录中获取界面布局文件。
3.根据权利要求1所述的一种基于资源文件的安卓界面静态混淆方法,其特征在于:
所述判断父节点相同的两个节点是否具有相同的属性类型的方法为:
获取父节点相同的两个节点各自的属性列表并按列表下标遍历,若两个列表在同一下标处的属性名称不同,则两个节点属性类型不同,若遍历完成后没有不同的属性名称,则两个节点属性类型相同。
4.根据权利要求1所述的一种基于资源文件的安卓界面静态混淆方法,其特征在于:
步骤3所述拆分步骤2得到的界面布局文件,具体为:
在步骤2得到的每个界面布局文件中随机选择若干节点;
将随机选择的节点写入新的界面布局文件,在原界面布局文件中删除随机选择的节点,并且以include的方式包含新生成的界面布局文件,从而保护界面信息不被破坏。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910725291.3A CN110502876B (zh) | 2019-08-07 | 2019-08-07 | 一种基于资源文件的安卓界面静态混淆方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910725291.3A CN110502876B (zh) | 2019-08-07 | 2019-08-07 | 一种基于资源文件的安卓界面静态混淆方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110502876A CN110502876A (zh) | 2019-11-26 |
CN110502876B true CN110502876B (zh) | 2021-04-27 |
Family
ID=68586867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910725291.3A Active CN110502876B (zh) | 2019-08-07 | 2019-08-07 | 一种基于资源文件的安卓界面静态混淆方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110502876B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645906A (zh) * | 2013-12-25 | 2014-03-19 | 上海斐讯数据通信技术有限公司 | 基于固定的界面布局文件实现界面重新布局的方法及系统 |
CN107169323A (zh) * | 2017-05-11 | 2017-09-15 | 南京大学 | 一种基于布局簇图的安卓应用重打包检测方法 |
CN109190370A (zh) * | 2018-07-02 | 2019-01-11 | 南京大学 | 一种基于控件区域分布特征的安卓界面相似度计算方法 |
CN109815699A (zh) * | 2018-12-24 | 2019-05-28 | 南京大学 | 一种基于界面图标特征的安卓软件重打包检测方法 |
-
2019
- 2019-08-07 CN CN201910725291.3A patent/CN110502876B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645906A (zh) * | 2013-12-25 | 2014-03-19 | 上海斐讯数据通信技术有限公司 | 基于固定的界面布局文件实现界面重新布局的方法及系统 |
CN107169323A (zh) * | 2017-05-11 | 2017-09-15 | 南京大学 | 一种基于布局簇图的安卓应用重打包检测方法 |
CN109190370A (zh) * | 2018-07-02 | 2019-01-11 | 南京大学 | 一种基于控件区域分布特征的安卓界面相似度计算方法 |
CN109815699A (zh) * | 2018-12-24 | 2019-05-28 | 南京大学 | 一种基于界面图标特征的安卓软件重打包检测方法 |
Non-Patent Citations (2)
Title |
---|
一种静态Android重打包恶意应用检测方法;孙伟 等;《信息安全研究》;20170831;第3卷(第8期);全文 * |
基于UI的Android应用重打包检测方法研究;龙彦君;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180715(第7期);第I138-1109页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110502876A (zh) | 2019-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Duan et al. | Identifying open-source license violation and 1-day security risk at large scale | |
CN104866765B (zh) | 基于行为特征相似性的恶意代码同源性分析方法 | |
CN107665306B (zh) | 一种检测非法文件注入的方法、装置、客户端及服务器 | |
US20100122313A1 (en) | Method and system for restricting file access in a computer system | |
US6980992B1 (en) | Tree pattern system and method for multiple virus signature recognition | |
RU2523112C1 (ru) | Система и способ выбора оптимального типа антивирусной проверки при доступе к файлу | |
CN104536797A (zh) | 一种Java程序预编译方法和预编译器 | |
CN110225029A (zh) | 注入攻击检测方法、装置、服务器及存储介质 | |
CN110084064B (zh) | 基于终端的大数据分析处理方法及系统 | |
CN110071924B (zh) | 基于终端的大数据分析方法及系统 | |
CN103246848A (zh) | 保护软件安全的方法和设备 | |
CN109587151A (zh) | 访问控制方法、装置、设备及计算机可读存储介质 | |
JP5971099B2 (ja) | 情報処理装置、方法及びプログラム | |
Xu et al. | Manis: Evading malware detection system on graph structure | |
EP2107484A2 (en) | A method and device for code audit | |
CN101950339B (zh) | 一种电脑安全防护方法和系统 | |
CN110502876B (zh) | 一种基于资源文件的安卓界面静态混淆方法 | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN105453104B (zh) | 系统保护用文件安全管理装置和管理方法 | |
CN111027059B (zh) | 一种基于llvm的抵御内存泄露的系统及方法 | |
CN106020923B (zh) | SELinux策略的编译方法及系统 | |
CN106503197B (zh) | 一种提取Android系统百度地图基站数据的方法 | |
CN102737203B (zh) | 一种基于程序父子基因关系的病毒防御方法及系统 | |
CN115168861A (zh) | 数据安全验证方法、装置、设备及存储介质 | |
CN114936369A (zh) | 基于标记的sql注入攻击主动防御方法、系统及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |