一种基于动态虚拟指令变换的Android应用安全保护方法技术

技术编号:21004301 阅读:30 留言:0更新日期:2019-04-30 21:35
本发明专利技术公开了一种基于动态虚拟指令变换的Android应用安全保护方法。本发明专利技术定义了自定义的虚拟指令集和虚拟机解释器,通过指令混淆操作将Dalvik指令集变换为自定义的虚拟指令集,在执行时对指令集之间的映射关系进行动态变换,并由自定义的虚拟机解释器对变换后的指令进行解释和执行,从而实现对Android应用中的关键方法和执行逻辑的保护。同时,基于自定义虚拟指令集的Android应用代码及其对应的虚拟机解释器内嵌在Android应用中,因而无需拥有Root权限或对Android底层系统进行修改。本发明专利技术能够对Android应用中的关键方法和执行逻辑提供有效的保护,提高应用程序的混淆程度和不可读性,能够有效提高攻击者实施逆向分析和代码转储攻击的时间与空间复杂度,实现Android应用的安全加固。

A Security Protection Method for Android Applications Based on Dynamic Virtual Instruction Transform

【技术实现步骤摘要】
一种基于动态虚拟指令变换的Android应用安全保护方法
本专利技术涉及一种Android应用软件安全保护方法,特别是基于动态虚拟指令变换的Android应用保护的方法,结合虚拟指令与自定义解释器两方面的优势充分保护Android应用软件的安全性。
技术介绍
Google公司于2007年推出Android系统,在短短几年内迅速占领移动智能手机的市场,成为目前最流行的手机操作系统,根据通讯流量监测机构Statcounter提供的数据显示,2017年3月Android首次超过Windows成为全球第一大操作系统,占比37.93%,超过了微软的Windows系统的37.91%。虽然Android系统的源码开源特性在一定程度上给开发人员带来了一定的便利,但是该特性也给Android应用带来了安全隐患。Android系统本身的安全机制是一种粒度较粗的安全机制,攻击者可以通过反编译、静态分析、动态分析、重打包等技术对应用程序进行恶意修改,同时,Android应用市场良莠不齐,难以管理,导致Android应用成为恶意软件泛滥的重灾区,严重损害了用户的利益。目前攻击者针对Android应用实施攻击的主要手段是静态分析与动态分析。静态分析是攻击者在不运行程序的前提下对应用程序进行分析以获得程序的核心代码与执行逻辑,从而对应用程序进行恶意的篡改。目前,主要的静态分析工具有dex2jar、jd-gui、jadx、enjarify、Apktool等,利用这些工具对应用程序中的DEX文件进行分析后可以获得应用程序的源码,而Android应用程序绝大部分是由Java语言编写,由于Java语言具有丰富的语义信息,很容易被攻击者理解,导致应用程序核心代码的暴露。动态分析则需要攻击者运行应用程序,并通过追踪程序的执行过程来获得其期望得到的信息。一般来说,动态分析的主要方式是内存Dump,可以在程序运行时将映射到内存空间的程序原始的明文代码和数据转储起来。目前,已有的针对Android应用的保护方法主要有代码混淆、完整性校验、DEX加壳等,这些方法虽然能够在一定程度上对Android应用起到保护作用,但是并不能完全抵御攻击者的静态分析与动态分析。另外,这些安全加固方法的原理比较固定,攻击者一旦了解其原理即可对其进行相应的破解。更为严重的是,这些方法并不能有效解决程序运行时的内存Dump问题,致使内存中保留的明文文件容易被攻击者通过内存转储技术获得,进而对明文文件进行分析。
技术实现思路
本专利技术的目的在于提供一种基于动态虚拟指令集的Android应用安全保护方法,通过抽取Android应用程序中DEX文件中的关键方法指令,并对其进行混淆和动态变换,进而利用自定义的虚拟机解释器进行解释执行,从而绕过原始Dalvik虚拟机的解释执行过程,以达到保护Android应用程序的目的。实现本专利技术目的的技术方案是:一种基于动态虚拟指令集的Android应用安全保护方法,包括以下步骤:步骤一,确定Android应用程序中的待保护方法,一部分方法由开发人员提供,另一部分为应用程序中访问系统敏感资源的方法,将两部分方法生成一个关键方法集合;步骤二,根据步骤一中生成的关键方法集合,从DEX文件中抽取出关键方法的方法指令、参数类型、返回值类型、寄存器个数,即根据对应的偏移量将关键方法的信息从类数据区中抽取出;步骤三,对步骤二中抽取出的关键方法的指令实施混淆操作,包括两部分:第一,对Dalvik虚拟机中所有的指令进行格式长度上的统一;第二,通过分析各应用软件中相伴出现频率较高的指令,将其组合在一起定义为新的虚拟指令;经过混淆操作后生成与原始方法指令不同的虚拟指令;步骤四,动态随机生成程序指令的置换矩阵;步骤五,利用步骤四中生成的置换矩阵对步骤三中混淆后的关键方法指令实施动态变换;置换矩阵中每一行与每一列有且仅有一个非零元素,利用矩阵相乘的原理,将指令操作码所代表的置换矩阵中那一行元素中非零元素所在的列数作为该操作码变换后的结果,并保存原始方法指令与虚拟指令间的映射关系;步骤六,针对步骤三生成的虚拟指令,采用自定义解释器来执行经过混淆与变换后的虚拟指令;步骤七,将步骤五生成的原始方法指令与虚拟指令之间的映射关系、步骤六生成的自定义解释器存储在动态链接库文件中,并将该文件内嵌或集成到Android应用程序中。本专利技术与现有技术相比,其显著优点是:将关键方法的方法指令等信息从Android应用程序中的DEX文件中抽取出,并进行动态指令变换,使得在攻击者静态分析该程序时无法获取到对应关键方法的有效信息。本专利技术设计了一套虚拟指令集,通过统一原始的Dalvik指令集的指令长度,并对那些指令长度较短的指令进行随机填充,并且向其添加新的混淆指令,从而使得攻击者无法采用统计分析的方式对程序指令进行攻击。针对生成的虚拟指令集,本专利技术设计了自定义解释器用来解释执行虚拟指令,虚拟指令的执行不经过Android系统的Dalvik虚拟机。本专利技术将虚拟指令集与自定义解释器内嵌到Android应用程序中,在运行时无需修改Android底层系统。运行经过保护后的Android应用程序不需要Root权限。附图说明图1为本专利技术基于动态虚拟指令变换的Android应用安全保护方法的系统架构图。图2为本专利技术基于动态虚拟指令变换的Android应用安全保护方法中总体处理流程示意图。具体实施方式本专利技术基于动态虚拟指令集的Android应用安全保护方法包括如下步骤:1、确定Android应用程序中的保护对象,保护对象是Android应用程序中的关键方法,其中关键方法包括两部分,第一部分由开发人员提供,开发人员提供他们认为哪些方法在程序运行过程中十分重要需要被保护起来,第二部分由本专利技术给出,本专利技术对应用程序进行分析并将访问系统敏感资源的方法作为关键方法。2、根据步骤一中获取的关键方法集合,从DEX文件中抽取出关键方法的方法指令等信息。程序中关键方法是属于某个类的类方法,它的相关信息是存储在DEX文件中所属类的类数据区中,根据对应的偏移量将关键方法的信息从类数据区中抽取出。3、对步骤二中抽取出的关键方法的指令实施混淆操作,本专利技术中指令混淆操作包括两部分,第一,在通过分析研究Dalvik指令格式的基础上对Dalvik虚拟机中所有的指令进行格式长度上的统一。第二,通过分析各应用软件中指令相伴出现频率较高的指令,将其组合在一起定义为新的虚拟指令。4、动态随机生成置换矩阵,置换矩阵是一类特殊的矩阵,它是只由0和1组成的方块矩阵,并且置换矩阵的每一行和每一列都恰好只有一个1,其余的元素都是0。5、利用步骤4中生成的置换矩阵对步骤3中混淆后的方法指令实施动态变换。指令间变换本质是指令中操作码的变换,指令中的操作码就是该条指令的标识,根据置换矩阵的特性(每一行与每一列有且仅有一个非零元素)并结合矩阵相乘的原理,本专利技术规定在利用置换矩阵变换时操作码所表示的置换矩阵的那一行元素中非零元素所在的列数为该操作码变换后的结果。6、针对步骤5生成的虚拟指令,本专利技术设计了自定义解释器用来执行经过混淆与变换后的方法指令,该自定义解释器独立于Android自带的Dalvik虚拟机解释器,拥有一套针对于虚拟指令集的专属解释程序。7、将步骤5生成本文档来自技高网
...

【技术保护点】
1.一种基于动态虚拟指令集的Android应用安全保护方法,其特征在于:步骤一,确定Android应用程序中的待保护方法,一部分方法由开发人员提供,另一部分为应用程序中访问系统敏感资源的方法,将两部分方法生成一个关键方法集合;步骤二,根据步骤一中生成的关键方法集合,从DEX文件中抽取出关键方法的方法指令、参数类型、返回值类型、寄存器个数,即根据对应的偏移量将关键方法的信息从类数据区中抽取出;步骤三,对步骤二中抽取出的关键方法的指令实施混淆操作,包括两部分:第一,对Dalvik虚拟机中所有的指令进行格式长度上的统一;第二,通过分析各应用软件中相伴出现频率较高的指令,将其组合在一起定义为新的虚拟指令;经过混淆操作后生成与原始方法指令不同的虚拟指令;步骤四,动态随机生成程序指令的置换矩阵;步骤五,利用步骤四中生成的置换矩阵对步骤三中混淆后的关键方法指令实施动态变换;置换矩阵中每一行与每一列有且仅有一个非零元素,利用矩阵相乘的原理,将指令操作码所代表的置换矩阵中那一行元素中非零元素所在的列数作为该操作码变换后的结果,并保存原始方法指令与虚拟指令间的映射关系;步骤六,针对步骤三生成的虚拟指令,采用自定义解释器来执行经过混淆与变换后的虚拟指令;步骤七,将步骤五生成的原始方法指令与虚拟指令之间的映射关系、步骤六生成的自定义解释器存储在动态链接库文件中,并将该文件内嵌或集成到Android应用程序中。...

【技术特征摘要】
1.一种基于动态虚拟指令集的Android应用安全保护方法,其特征在于:步骤一,确定Android应用程序中的待保护方法,一部分方法由开发人员提供,另一部分为应用程序中访问系统敏感资源的方法,将两部分方法生成一个关键方法集合;步骤二,根据步骤一中生成的关键方法集合,从DEX文件中抽取出关键方法的方法指令、参数类型、返回值类型、寄存器个数,即根据对应的偏移量将关键方法的信息从类数据区中抽取出;步骤三,对步骤二中抽取出的关键方法的指令实施混淆操作,包括两部分:第一,对Dalvik虚拟机中所有的指令进行格式长度上的统一;第二,通过分析各应用软件中相伴出现频率较高的指令,将其组合在一起定义为新的虚拟指令;经过混淆操作后生成与原始方法指令不同的虚拟指令;步骤四,动态随机生成程序指令的置换矩阵;步骤五,...

【专利技术属性】
技术研发人员:俞研胡恒伟付安民苏铓黄婵颖
申请(专利权)人:南京理工大学
类型:发明
国别省市:江苏,32

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

1