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

文档序号:10553204阅读:221来源:国知局
一种基于Android系统微指令即时编译的加固方法
【专利摘要】本发明公布了一种基于Android系统微指令即时编译的加固方法,包括读取预处理阶段、构造和添加花指令阶段和写回Dex文件阶段;针对一条指令通过添加相反指令的方式构造花指令。本发明方法针对Android系统的APK应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,然后写回dex文件,从而破坏反汇编软件的静态反汇编过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,使主流反汇编软件无法显示加固后文件的正确反汇编结果,从而达到保护版权的目的。
【专利说明】
一种基于Andro id系统微指令即时编译的加固方法
技术领域
[0001 ]本发明涉及Android系统程序应用安全,尤其涉及一种基于Android系统微指令即时编译的关于Dex文件的加固方法。
【背景技术】
[0002]随着Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的操作系统。目前,Android系统不仅仅是一款手机的操作系统,还越来越广泛地被应用于平板电脑、可佩戴设备、电视、数码相机等设备上。近几年来,基于Android系统,每年都会爆发一些破坏性极强并在业界引起轰动的安全性事件,这也导致业界对Android系统的安全问题越来越重视。
[0003]classes.dex文件是Android系统运行于Dalvik Virtual Machine上的可执行文件,也是Android应用程序的核心所在。而Android的核心代码是以java书写的,Android基于java,而java反编译工具功能很强大,所以对正常AndroidAPK(AndroidPackage的缩写,即Android安装包)应用程序基本上可以做到完全的反编译还原。这样,APK应用程序的代码很容易暴露,无法保护应用开发者的软件著作权与利益,同时,APK源代码也容易被不法分子利用篡改,从而妨害广大用户的隐私安全。
[0004]目前,Android应用程序防止反编译技术并不完善,难以保护应用开发者的软件著作权与利益和广大用户的隐私安全。

【发明内容】

[0005]为了克服上述现有技术的不足,本发明提供一种Android系统文件的加固方法,该方法为一种基于Android系统微指令即时编译的关于Dex文件的加固方法,通过在Dex文件中添加花指令代码,可以破坏静态反汇编的过程,使反汇编的结果出现错误;错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,从而达到保护版权的目的。另外,需保证添加的花指令可以正常运行,不改变任何寄存器的值,并且被反汇编器正确反汇编。
[0006]本发明提供的技术方案是:
[0007]一种基于Android系统微指令即时编译的加固方法,针对Android系统的APK(Android安装包)应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,从而破坏静态反汇编的过程,使反汇编的结果出现错误;具体包括如下步骤:
[0008]A.进行读取预处理时,执行如下操作:
[0009]Al.读取APK程序,解压得到dex文件;
[0010]A2.解析dex文件结构,得到MainActivity类中Oncreat O方法在str ing_id中的索弓I;
[0011 ] A3.获取Oncreat()在(:1&8 8_(16;1^_;!^61]1中的索引,读取code_item,得到dex文件中的字节码指令;
[0012]具体地,解析dex文件结构得到dex文件中的MainActivity类中Oncreat ()方法在string_id中的索引;再获取OncreatO在class_def_item中的索引,读取选择需要加固的类中的codejtem,得到字节码指令;选择类即要添加花指令的类,优选关键的类;本发明实施例中,针对MainActivity类中的OncreatO方法进行添加花指令来加固;
[0013]B.进行添加花指令时,执行如下操作:
[0014]B1.构造添加的花指令;
[0015]构造步骤一般是:针对一条指令,在其上下加入一些对程序而言无用的指令,但要保证程序功能不变;具体可以采用的方式包括:添加相反指令的方式,比如让某寄存器的值先加一再减一;向堆栈加入一个数据,然后再弹出一个;或跳转到某个地方接着再跳转回来。
[0016]根据原程序中的流程,构造复杂的相同功能的指令集合。花指令是在正常的程序中添加一些和功能无关的指令,花指令中的每条指令对于DVM都是正常的指令,这样不会影响程序的正常运行,但是会对程序逆向造成很大的困扰。一般最简单的花指令是nop指令,即这个指令什么都不做,实际应用中,花指令会更复杂,会对原程序中的流程修改得更复杂,但执行结果不会改变。
[00?7] B2.根据添加的花指令的大小,修改选择加固的类中code」tem的insns_size ;
[0018]B3.在选择加固的类中code」tem的insns中添加花指令;
[0019]具体可以在选择加固的类中的全部代码段进行添加花指令;可由开发者根据具体需求确定在关键的代码段进行添加花指令,关键代码段包括加密算法、验证登陆的代码部分等。
[0020]添加花指令的位置
[0021]C.进行写回Dex文件时,执行如下操作:
[0022]Cl.根据选择类中code」tem的insns中添加的花指令的长度(大小)和添加的位置,获取其余类相关信息写回时的偏移值;
[0023]C2.写回Dex文件;
[0024]C3.将Dex文件打包,得到加固后的APK应用程序。
[0025]利用本发明提供上述加固方法,可以阻止反汇编软件baksmal 1、dexdump、androguard、dedexer对加固后的apk应用程序进行反编译,达到有效保护版权的目的。
[0026]上述加固方法,进一步地,步骤B2所述修改选择加固的类中code」tem的insns_size,具体是:修改预处理步骤A3中得到的code_item中的insns_size的取值修改为原insns_size的取值加上偏移值,所述偏移值为所述花指令的字节数。
[0027]与现有技术相比,本发明的有益效果是:
[0028]本发明提供一种基于Android系统微指令即时编译的加固方法,该方法为关于Dex文件的加固方法,通过在Dex文件中添加花指令代码,可以破坏静态反汇编的过程,使反汇编的结果出现错误;错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,使主流反汇编软件无法显示加固后文件的正确反汇编结果,从而达到保护版权的目的。本发明从Dex文件入手,在Dex文件中添加花指令,然后写回dex文件,防止apk应用程序的反编译。本发明能够阻止包括baksmal 1、dexdump、androguard、dedexer等软件的反汇编。
【附图说明】
[0029]图1是本发明提供的加固方法的流程框图。
【具体实施方式】
[0030]下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
[0031]本发明提供一种基于Android系统关于Dex文件的微指令即时编译技术的加固方法,图1是本发明提供的Android系统中关于Dex文件的加固方法的流程框图,具体包括如下步骤:
[0032]A.进行读取预处理时,执行如下操作:
[0033]Al.读取APK程序,解压得到dex文件;
[0034]A2.解析dex文件结构,得到MainActivity类中0ncreat()方法在string_ids中的索引;
[0035]String_ids是dex中的区域,描述了字符串的位置,通过Str ing_ids找到OncreatO方法的索引;
[0036]A3.获取OncreatO方法在class_def_item中的索引,读取code_item;
[0037]class_def_item是dex中的一个区域,描述的是类的信息;code_i tem也是Dex文件中的一个区域,描述的是具体方法的指令集合,本发明实施例在这个区域增加花指令;
[0038]B.进行添加花指令时,执行如下操作:
[0039]B1.构造要用来添加的花指令;
[0040]花指令更贴切的说法是乱指令,也就是本来一句代码就可以完成我们用好多行代码(花指令)来完成。一般多用跳转指令来间接跳转,给分析者造成极大的分析困扰。具体的构造步骤,一般方法是:针对一条指令,在其上下加入一些对程序而言无用的指令,保证程序功能不变;可以采用添加相反指令的方式,比如让某寄存器的值先加一再减一;向堆栈加入一个数据,然后再弹出一个;跳转到某个地方接着再跳转回来。
[0041 ] B2.根据添加的花指令的大小,修改选择加固的类中code」tem的insns_size ;
[0042]Insns_size字段描述了代码段的大小,由于增加花指令使得该代码段大小会变大,需要修改选择加固的类中code_item的insns_size为原值加上花指令的大小值;
[0043]B3.在选择类中code_item的insns中添加花指令;
[0044]C.进行写回Dex文件时,执行如下操作:
[0045]Cl.根据添加的花指令大小和写的位置,确定其余类的相关信息写回时的偏移值;
[0046]修改选择加固的类之后,会影响整个类的大小和偏移,需要计算得到其余类的相关信息写回时的偏移值;
[0047]C2.写回Dex文件;
[0048]C3.将Dex文件打包成apk应用程序。
[0049]以下实施例针对Android系统中名为huazhiling.apk的apk应用程序进行加固。[°°50] 首先对apk文件进行预处理。读取apk文件,解压得到Dex文件。然后对Dex文件进行解析。调用解析Dex的函数,遍历string_ids,得到MainActi vity类中Oncreat ()方法在string_id中的索引,获取0]1(^631:()在(3138 8_(16;1^_;^61]1中的索引,读取其code_item的数据结构,并保存。
[0051 ]其中,string_ids是Dex文件索引区的字符串的索引,保存所有包括类名、方法名等的字符串的索引;class_def_item位于Dex文件的数据区,有一个元素class_data_off,指向data区里的一个class_data_item结构,用来描述class使用到的各种数据。code_i tem结构描述方法的具体实现。insns_size是指令列表的大小,以16-bit为单位;insns存放的是Dalvik字节码。insns_size和insns都存放在code_item结构中。
[0052]然后进行添加花指令操作。本实施例选择一个简单的花指令2802ABCD,该花指令的长度为4个字节数;修改预处理步骤中得到的(30(^_;^61]1中的;[118118_8126变为;[118118_8126+4;其中+4代表增加4个字节数;在code」tem结构的insns的最后一条指令后面添加上述花指令2802ABCD。
[0053]添加完花指令后需要写回Dex文件。上述花指令直接添加在数组里,写回dex文件的时候则直接按顺序写回dex文件。4根据添加的花指令确定写回时的4偏移值为2,给dwDexCodeOff赋值,然后调用Dex文件写回的函数,进行Dex文件的写回操作。该函数的实现过程为:根据MainActivity类中Oncreat()方法在string_id中的索引,索引在其后的类和方法都需要修改;具体是:调用解析Dex的函数,获取待修改的类在type_id中的索引,获取待修改的函数在method_id中的索引,获取待修改的类在class_def_item中的索引;将所有类和函数写回Dex文件,如果是不需要修改的类和函数(一般是关键算法,如加密算法所在的函数),直接写回;如果是需要修改的函数和类,则写入增加偏移值修改后的aCCeSS_flag与code_off0
[0054]将Dex文件打包成apk应用程序,开发者重新签名后即可使用。
[°°55] 本实施例中,将加固后的apk应用程序用逆向软件baksmal i处理,显示“Erroroccured while disassembling class Lorg.dexlabs.huazhiIing.DropActivity;-skipping classjava.1ang.RuntimeExcept1n:1nvalid code offset 83for the tryblock end address。”,表明了:反汇编软件baksmali在反编译加固后的apk程序时出现了错误,无法显示源代码。
[0056]将加固后的apk应用程序用逆向软件dedexer处理,dedexer只能反编译出部分指令,在处理MainActivity类时崩溃。
[0057]将加固后的apk应用程序用逆向软件dexdump处理,结果显示,源代码在结果中不可见。将加固后的apk应用程序用逆向软件androguard处理,同样显示,源代码在结果中不可见。
[0058]综上,利用本发明提供的加固方法,可以阻止反汇编软件baksmal 1、dexdump、androguard、dedexer对加固后的apk应用程序进行反编译,达到有效保护版权的目的。
[0059]需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
【主权项】
1.一种基于Andro id系统微指令即时编译的加固方法,针对Andro i d系统的APK应用程序,通过在APK应用程序的dex文件中添加花指令代码进行加固,从而破坏反汇编软件的静态反汇编过程,使反汇编的结果出现错误;包括读取预处理阶段、添加花指令阶段和写回Dex文件阶段,具体包括如下步骤: A.进行读取预处理时,执行如下操作: Al.读取APK程序,解压得到dex文件; A2.解析dex文件结构,得到MainActivity类中OncreatO方法在string_id中的索引; A3.获取Oncreat ()在class_def_item中的索引,读取code_item,得到dex文件中的字节码指令; B.进行添加花指令时,执行如下操作: B1.构造用来添加的花指令; B2.选择用来加固的类,根据所构造的花指令的大小,修改所述用来加固的类中Code_item的insns_size; B3.在用来加固的类中code_item的insns中,添加所构造的花指令; C.进行写回Dex文件时,执行如下操作: Cl.根据用来加固的类中code」tem的insns中添加的花指令的长度(大小)和添加的位置,获取其余类相关信息写回时的偏移值; C2.写回Dex文件; C3.将Dex文件打包,得到加固后的APK应用程序。2.如权利要求1所述基于Android系统微指令即时编译的加固方法,其特征是,步骤BI所述构造花指令的方式为:针对一条指令添加相反指令的方式。3.如权利要求2所述基于Android系统微指令即时编译的加固方法,其特征是,所述:针对一条指令添加相反指令的方式具体包括:使某寄存器的值先加一再减一、向堆栈加入一个数据,然后再弹出一个数据、跳转到某个地方接着再跳转回来方式中的一种或多种。4.如权利要求1所述基于Android系统微指令即时编译的加固方法,其特征是,步骤B2所述修改用来加固的类中code_item的insns_size,具体是:将预处理步骤A3中得到的code_item中的insns_size的取值修改为原insns_size的取值加上偏移值;所述偏移值为所述花指令的字节数。5.如权利要求1所述基于Android系统微指令即时编译的加固方法,其特征是,步骤B3所述添加所构造的花指令,优选地,针对选择加固的类中的全部代码段进行添加花指令;或针对选择加固的类中的关键的代码段进行添加花指令,所述关键代码段包括加密算法和验证登陆的代码部分。6.如权利要求1所述基于Android系统微指令即时编译的加固方法,其特征是,所述反汇编软件包括 baksmal1、dexdump、androguarc^Pdedexer0
【文档编号】G06F21/14GK105912893SQ201610032724
【公开日】2016年8月31日
【申请日】2016年1月19日
【发明人】文伟平
【申请人】北京鼎源科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1