一种基于Android系统微指令即时编译的加固方法技术方案

技术编号:13631238 阅读:58 留言:0更新日期:2016-09-02 11:40
本发明专利技术公布了一种基于Android系统微指令即时编译的加固方法,包括读取预处理阶段、构造和添加花指令阶段和写回Dex文件阶段;针对一条指令通过添加相反指令的方式构造花指令。本发明专利技术方法针对Android系统的APK应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,然后写回dex文件,从而破坏反汇编软件的静态反汇编过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,使主流反汇编软件无法显示加固后文件的正确反汇编结果,从而达到保护版权的目的。

【技术实现步骤摘要】

本专利技术涉及Android系统程序应用安全,尤其涉及一种基于Android系统微指令即时编译的关于Dex文件的加固方法。
技术介绍
随着Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的操作系统。目前,Android系统不仅仅是一款手机的操作系统,还越来越广泛地被应用于平板电脑、可佩戴设备、电视、数码相机等设备上。近几年来,基于Android系统,每年都会爆发一些破坏性极强并在业界引起轰动的安全性事件,这也导致业界对Android系统的安全问题越来越重视。classes.dex文件是Android系统运行于Dalvik Virtual Machine上的可执行文件,也是Android应用程序的核心所在。而Android的核心代码是以java书写的,Android基于java,而java反编译工具功能很强大,所以对正常AndroidAPK(AndroidPackage的缩写,即Android安装包)应用程序基本上可以做到完全的反编译还原。这样,APK应用程序的代码很容易暴露,无法保护应用开发者的软件著作权与利益,同时,APK源代码也容易被不法分子利用篡改,从而妨害广大用户的隐私安全。目前,Android应用程序防止反编译技术并不完善,难以保护应用开发者的软件著作权与利益和广大用户的隐私安全。
技术实现思路
为了克服上述现有技术的不足,本专利技术提供一种Android系统文件的加固方法,该方法为一种基于Android系统微指令即时编译的关于Dex文件的加固方法,通过在Dex文件中添加花指令代码,可以破坏静态反汇编的过程,使反汇编的结果出现错误;错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,从而达到保护版权的目的。另外,需保证添加的花指令可以正常运行,不改变任何寄存器的值,并且被反汇编器正确反汇编。本专利技术提供的技术方案是:一种基于Android系统微指令即时编译的加固方法,针对Android系统的APK(Android
安装包)应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,从而破坏静态反汇编的过程,使反汇编的结果出现错误;具体包括如下步骤:A.进行读取预处理时,执行如下操作:A1.读取APK程序,解压得到dex文件;A2.解析dex文件结构,得到MainActivity类中Oncreat()方法在string_id中的索引;A3.获取Oncreat()在class_def_item中的索引,读取code_item,得到dex文件中的字节码指令;具体地,解析dex文件结构得到dex文件中的MainActivity类中Oncreat()方法在string_id中的索引;再获取Oncreat()在class_def_item中的索引,读取选择需要加固的类中的code_item,得到字节码指令;选择类即要添加花指令的类,优选关键的类;本专利技术实施例中,针对MainActivity类中的Oncreat()方法进行添加花指令来加固;B.进行添加花指令时,执行如下操作:B1.构造添加的花指令;构造步骤一般是:针对一条指令,在其上下加入一些对程序而言无用的指令,但要保证程序功能不变;具体可以采用的方式包括:添加相反指令的方式,比如让某寄存器的值先加一再减一;向堆栈加入一个数据,然后再弹出一个;或跳转到某个地方接着再跳转回来。根据原程序中的流程,构造复杂的相同功能的指令集合。花指令是在正常的程序中添加一些和功能无关的指令,花指令中的每条指令对于DVM都是正常的指令,这样不会影响程序的正常运行,但是会对程序逆向造成很大的困扰。一般最简单的花指令是nop指令,即这个指令什么都不做,实际应用中,花指令会更复杂,会对原程序中的流程修改得更复杂,但执行结果不会改变。B2.根据添加的花指令的大小,修改选择加固的类中code_item的insns_size;B3.在选择加固的类中code_item的insns中添加花指令;具体可以在选择加固的类中的全部代码段进行添加花指令;可由开发者根据具体需求确定在关键的代码段进行添加花指令,关键代码段包括加密算法、验证登陆的代码部分等。添加花指令的位置C.进行写回Dex文件时,执行如下操作:C1.根据选择类中code_item的insns中添加的花指令的长度(大小)和添加的位置,获取其余类相关信息写回时的偏移值;C2.写回Dex文件;C3.将Dex文件打包,得到加固后的APK应用程序。利用本专利技术提供上述加固方法,可以阻止反汇编软件baksmali、dexdump、androguard、dedexer对加固后的apk应用程序进行反编译,达到有效保护版权的目的。上述加固方法,进一步地,步骤B2所述修改选择加固的类中code_item的insns_size,具体是:修改预处理步骤A3中得到的code_item中的insns_size的取值修改为原insns_size的取值加上偏移值,所述偏移值为所述花指令的字节数。与现有技术相比,本专利技术的有益效果是:本专利技术提供一种基于Android系统微指令即时编译的加固方法,该方法为关于Dex文件的加固方法,通过在Dex文件中添加花指令代码,可以破坏静态反汇编的过程,使反汇编的结果出现错误;错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,使主流反汇编软件无法显示加固后文件的正确反汇编结果,从而达到保护版权的目的。本专利技术从Dex文件入手,在Dex文件中添加花指令,然后写回dex文件,防止apk应用程序的反编译。本专利技术能够阻止包括baksmali、dexdump、androguard、dedexer等软件的反汇编。附图说明图1是本专利技术提供的加固方法的流程框图。具体实施方式下面结合附图,通过实施例进一步描述本专利技术,但不以任何方式限制本专利技术的范围。本专利技术提供一种基于Android系统关于Dex文件的微指令即时编译技术的加固方法,图1是本专利技术提供的Android系统中关于Dex文件的加固方法的流程框图,具体包括如下步骤:A.进行读取预处理时,执行如下操作:A1.读取APK程序,解压得到dex文件;A2.解析dex文件结构,得到MainActivity类中Oncreat()方法在string_ids中的索引;String_ids是dex中的区域,描述了字符串的位置,通过String_ids找到Oncreat()方法的索引;A3.获取Oncreat()方法在class_def_item中的索引,读取code_item;class_def_item是dex中的一个区域,描述的是类的信息;code_item也是Dex文件中的一个区域,描述的是具体方法的指令集合,本专利技术实施例在这个区域增加花指令;B.进行添加花指令时,执行如下操作:B1.构造要用来添加的花指令;花指令更贴切的说法是乱指令,也就是本来一句代码就可以完成我们用好多行代码(花指令)来完成。一般多用跳转指令来间接跳转,给分析者造成极大的分析困扰。具体的构造步骤,一般方法是:针对一条指令,在其上下加入一些对程序而言无用的指令,保证程序功能不变;可以采用添加相反指令的方式,比如让某寄存器的值先加一再减一;向堆栈加入一本文档来自技高网
...

【技术保护点】
一种基于Android系统微指令即时编译的加固方法,针对Android系统的APK应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,从而破坏反汇编软件的静态反汇编过程,使反汇编的结果出现错误;包括读取预处理阶段、添加花指令阶段和写回Dex文件阶段,具体包括如下步骤:A.进行读取预处理时,执行如下操作:A1.读取APK程序,解压得到dex文件;A2.解析dex文件结构,得到MainActivity类中Oncreat()方法在string_id中的索引;A3.获取Oncreat()在class_def_item中的索引,读取code_item,得到dex文件中的字节码指令;B.进行添加花指令时,执行如下操作:B1.构造用来添加的花指令;B2.选择用来加固的类,根据所构造的花指令的大小,修改所述用来加固的类中code_item的insns_size;B3.在用来加固的类中code_item的insns中,添加所构造的花指令;C.进行写回Dex文件时,执行如下操作:C1.根据用来加固的类中code_item的insns中添加的花指令的长度(大小)和添加的位置,获取其余类相关信息写回时的偏移值;C2.写回Dex文件;C3.将Dex文件打包,得到加固后的APK应用程序。...

【技术特征摘要】
1.一种基于Android系统微指令即时编译的加固方法,针对Android系统的APK应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,从而破坏反汇编软件的静态反汇编过程,使反汇编的结果出现错误;包括读取预处理阶段、添加花指令阶段和写回Dex文件阶段,具体包括如下步骤:A.进行读取预处理时,执行如下操作:A1.读取APK程序,解压得到dex文件;A2.解析dex文件结构,得到MainActivity类中Oncreat()方法在string_id中的索引;A3.获取Oncreat()在class_def_item中的索引,读取code_item,得到dex文件中的字节码指令;B.进行添加花指令时,执行如下操作:B1.构造用来添加的花指令;B2.选择用来加固的类,根据所构造的花指令的大小,修改所述用来加固的类中code_item的insns_size;B3.在用来加固的类中code_item的insns中,添加所构造的花指令;C.进行写回Dex文件时,执行如下操作:C1.根据用来加固的类中code_item的insns中添加的花指令的长度(大小)和添加的位置,获取其余类相关信息写回时的偏移值;C2.写回Dex文件;C3.将Dex文件打包,得到加固后的APK应用程序。2.如权利要...

【专利技术属性】
技术研发人员:文伟平
申请(专利权)人:北京鼎源科技有限公司
类型:发明
国别省市:北京;11

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

1