一种安卓应用的加固方法和系统技术方案

技术编号:22102104 阅读:42 留言:0更新日期:2019-09-14 03:24
本发明专利技术公开了一种安卓应用加固的方法和系统,其包括步骤110,对原dex文件进行解析,获得含函数指令信息的结构体;步骤120,提取原dex文件中的函数指令加密后另存为新文件;步骤130,将原dex中被提取的函数指令位置值修改为无效指令;步骤140,使用系统底层函数的hook功能对函数指令进行修复;步骤150,在壳代码中调用hook函数;步骤160,动态启动原安卓应用程序实例并退出壳代码实例。由于通过对安卓应用中的java核心代码进行分析和加密,并在需要使用的时候进行解密,即使逆向人员通过动态调试和DUMP的方式,也只能得到包含无效指令的dex文件,获取不到完整的数据,并且无法修复。由于无法获取到完整的源码文件,提高了安卓应用程序核心代码的安全性。

A Reinforcement Method and System for Android Applications

【技术实现步骤摘要】
一种安卓应用的加固方法和系统
本专利技术涉及安卓移动安全保护领域,尤其涉及安卓应用的加固方法和系统。
技术介绍
安卓(Android)应用(例如微信)的安装包都是以APK文件的格式进行存储,.apk文件实际上也是一种压缩格式,可以通过解压缩工具(比如winrar软件)直接解压查看,并可以将压缩包中的所有文件解压出来。通过一些逆向工具(比如:ApkTool)也可以直接反编译apk文件来得到Android中的源码,通过分析源码可以知道软件中的一些关键算法和逻辑,甚至可以通过插入一些其它代码来破坏软件的安全性,能轻易的给用户带来安全隐患和损失。面对这样的问题,已经有一些加固方法可以防止APK文件被反编译,如:通过对APK文件中的dex(dex中存放了Android中的原生Java代码)进行整体加密,并加入壳代码,然后在程序运行时先运行壳代码,在壳代码中进行dex的解密和动态加载。由于加了壳代码,很好的避免了APK包直接被逆向工具进行反编译,即使反编译了,得到的也是没有价值的壳代码,并不能获取到应用的核心java代码。虽然这种方式可以有效的防止逆向工具的反编译,却无法阻止逆向人员通过动态调试和内存DUMP的方式来获取到源代码。面对这样的动态攻击方式,急需一种方法来阻止攻击者通过内存DUMP方式来获取到源码。
技术实现思路
鉴于上述问题,本专利技术的目的在于提供一种Android应用的加固方法和系统,用以解决现有的加固方法和系统中,通过动态调试和内存DUMP的方式动态攻击获取源代码的问题。为了实现上述目的,本专利技术提供了一种Android应用的加固方法,该方法包括:第一步骤110,对Android应用程序中的原dex文件进行解析获得含函数指令信息的结构体;第二步骤120,提取原dex文件中的函数指令加密后另存为新文件;第三步骤130,将原dex中被提取的函数指令位置值修改为无效指令;第四步骤140,使用系统底层函数的hook功能并对指令进行修复;第五步骤150,在壳代码中调用hook函数;第六步骤160,动态启动原Android应用程序实例并退出壳代码实例。进一步地,在所述第一步骤110中,根据dex文件的结构的class_defs和method_ids表找到dex中的类的位置偏移,获得含函数指令信息的结构体。进一步地,在所述第二步骤120中,提取原dex文件中的函数指令加密后的新文件为.bin或.dat格式。进一步地,在所述第二步骤120中,将原dex中被提取的函数指令位置值修改为无效指令后,重新计算所述原dex文件的checksum和signature信息并回写到原dex的头部信息中,再进行加密。进一步地,在所述第四步骤140中,构建一个函数指令结构体,hook系统底层解析函数,获取原dex文件中的函数指令加密后的新文件的内存地址,并通过加解密模块进行解密,直接进行指令还原,这样就完成了函数指令的修复工作。进一步地,在所述第五步骤150中,将所述壳代码的名称更新至AndroidManifest.xml文件中启动程序的位置,运行时首先执行壳代码的Application。相应地,本专利技术实提供了一种Android应用的加固系统,该系统包括:函数指令抽取模块210,函数指令加解密模块220,系统底层函数hook模块230,壳代码模块240。所述函数指令抽取模块210,用于对安卓应用程序中的原dex文件进行解析,并提取原dex文件中的函数指令加密后另存为新文件,以及将原dex中被提取的函数指令位置值修改为无效指令;所述函数指令加解密模块220,用于对提取出的函数指令进行加密及解密。所述系统底层函数hook模块230,用于截获并监控系统解析函数,使用系统底层函数的hook功能并对指令进行修复;所述壳代码模块240,用于APK的启动模块,并在启动后调用hook模块。相比于相有技术,本专利技术的优点和有益效果:上述方法和系统通过对Android应用中的Java核心代码进行分析和加密,并在需要使用的时候进行解密,而不是在dex文件进行加载的时候就进行全面解密,这样即使dex文件被整体DUMP,获取到的也是不完整的数据,里面的函数指令都被替换为无效指令,并且攻击者无法进行修复,从而阻止了攻击者通过动态攻击的方式获取到完整的源码文件,大大提高了安卓应用程序核心代码的安全性。附图说明图1Android应用加固流程示意图;图2Android应用加固系统以及处理说明图;图3dex文件结构图;图4Android应用运行时的说明图;图5待加密的函数指令的具体例;图6加密后的指令文件的具体例。具体实施方式以下结合附图对本专利技术的实施例进行详细阐述,实施例是对本专利技术技术方案的具体化,实施例中仅对与本专利技术相关部分进行说明,其余为现有技术,在此省略其详细说明。图1为Android应用加固流程示意图,图2为Android应用加固系统结构示意图。如图2所示,函数指令抽取模块210,用于对dex文件中的函数指令进行指令抽取。函数指令加解密模块220,用于对提取出的函数指令进行加密及解密。系统底层函数hook模块230,用于截获并监控系统解析函数,并在执行时对需要进行的指令进行修复。壳代码模块240,用于APK的启动模块,并在启动后调用hook模块。如图1所示,Android应用的加固方法,包括以下步骤:第一步骤110,对Android应用中的dex文件进行解析获得含函数指令信息的结构体。dex文件(DalvikVMexecutes)是Dalvik虚拟机执行的字节码文件,Android应用中的原生Java代码、核心的算法和逻辑都保存在dex中,下述的要加密的函数指令也存放在dex文件中。如图2所示,所述dex文件及后面提到的AndroidManifest.xml文件和SO文件均由待加固的APK(Androidpackage,Android应用程序)文件通过解压模块200解压得到。图3为dex文件结构图。在图3所示的dex文件结构中,从class_defs和method_ids表可以找到dex中的类的位置偏移,进而找到DexClassDef结构体,里面ClassDefsOff定义了指向DexClassData结构的偏移,在DexClassData里可以找到Dexmethod结构,里面存放了指令部分字节码的insns数组。运行Android应用时,整个dex文件被加载到内存中,然后动态地解析执行insns中的内容,只要修改了里面的数据(函数指令),就相当于修改了程序执行流程和方法。第二步骤120,提取dex文件中的函数指令加密后另存为新文件。如图2所示,解析原dex文件格式后,通过函数指令抽取模块210,将第一步骤110解析获取到的所有方法的的代码结构体信息中的函数指令提取出来,通过加解密模块220进行加密,在指定的地址另存为新文件,在本实施例中,保存在assets目录下,并保存为.bin文件。图5示出了一个待加密的函数指令的例子。图6示出了加密后的指令文件的例子。第三步骤130,将原dex中被提取的函数指令值修改为无效指令。无效指令:如图2所示,解析原dex文件格式、保存所有类的所有方法的代码结构体信息后,获取其指令个数和指令偏移地址,构造出同数量的空指令集,将本文档来自技高网...

【技术保护点】
1.一种安卓应用的加固方法,其特征在于,该方法包括:第一步骤(110),对安卓应用程序中的原dex文件进行解析,获得含函数指令信息的结构体;第二步骤(120),提取原dex文件中的函数指令加密后另存为新文件;第三步骤(130),将原dex中被提取的函数指令位置值修改为无效指令;第四步骤(140),使用系统底层函数的hook功能对函数指令进行修复;第五步骤(150),在壳代码中调用hook函数;第六步骤(160),动态启动原安卓应用程序实例并退出壳代码实例。

【技术特征摘要】
1.一种安卓应用的加固方法,其特征在于,该方法包括:第一步骤(110),对安卓应用程序中的原dex文件进行解析,获得含函数指令信息的结构体;第二步骤(120),提取原dex文件中的函数指令加密后另存为新文件;第三步骤(130),将原dex中被提取的函数指令位置值修改为无效指令;第四步骤(140),使用系统底层函数的hook功能对函数指令进行修复;第五步骤(150),在壳代码中调用hook函数;第六步骤(160),动态启动原安卓应用程序实例并退出壳代码实例。2.根据权利要求1所述的方法,其特征在于:在所述第一步骤(110)中,根据dex文件的结构的class_defs和method_ids表找到dex中的类的位置偏移,获得含函数指令信息的结构体。3.根据权利要求1所述的方法,其特征在于:在所述第二步骤(120)中,提取原dex文件中的函数指令加密后的新文件为.bin或.dat格式。4.根据权利要求1所述的方法,其特征在于:在所述第三步骤(130)中,将原dex中被提取的函数指令位置值修改为无效指令后,重新计算所述原dex文件的checksum和signature信息并回写到原dex的头部信息中,再进行加密。5.根据权利要求1所...

【专利技术属性】
技术研发人员:张大健张行夏立宁
申请(专利权)人:中金金融认证中心有限公司
类型:发明
国别省市:北京,11

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

1