基于LLVM 的Android 应用程序加固方法
2021-05-28江秋语殷芙萍
现代计算机 2021年11期
关键词:指令
江秋语,殷芙萍
(1.四川大学计算机学院,成都610065;2.上海理工大学管理学院,上海200082)
0 引言
Android 平台的开源特性使它在全球智能手机市场占据主导地位[1]。然而,近90%的Android 应用程序中存在重打包的现象,严重侵犯了开发者的知识产权。由于Java 类文件和DEX 文件保留了大部分的语义信息,攻击者使用逆向工具可以轻而易举地进行破解以获取程序的源代码。
为解决此问题,常用混淆技术对Android 应用程序进行加固。代码混淆技术是一种代码转换机制,通过将易读的代码或数据进行保留语义的转换、重组和整理来加大代码分析难度,达到保护软件安全的目的。但是对Java 代码进行混淆会大大降低程序的性能,为了解决这个问题,本文提出了一种基于LLVM 的Android应用程序的混淆方法,利用LLVM 将DEX 文件中的Java 函数转化为本地代码,相比于Java 代码,本地代码具有更少的语义信息和更快的加载速度,能有效增加攻击者分析的难度,减少混淆带来的性能损失。
1 相关工作
近年来,由于本地代码具有更少的语义信息和更快的加载速度的特点,Android 应用保护的研究方向也逐渐转向本地代码的保护,研究人员开始结合代码混淆技术和虚拟化保护方法来保护Android 应用中的本地代码。
Vivek Balachandran 等人[2]提出一种针对Java 层代码的混淆保护方法,利用切片技术将函数划分为多个代码片段,通过pack 和switch 指令将代码片段的控制流平展,同时插入垃圾代码扩展分支语句来增强其控制流复杂程度,为了防止符号执行方法恢复混淆后的控制流,使用try 和catch 指令来隐藏控制流的跳转。……
登录APP查看全文
