智能终端android系统中防止应用程序反编译的方法

文档序号:6521531阅读:163来源:国知局
智能终端android系统中防止应用程序反编译的方法
【专利摘要】一种智能终端android系统中防止应用程序反编译的方法,在android系统中引入加密算法,防止软件程序被反编译,能极大的提高android程序的安全性。
【专利说明】智能终端android系统中防止应用程序反编译的方法
【技术领域】
[0001]本发明涉及一种智能终端android (安卓)系统中防止应用程序反编译的方法。
【背景技术】
[0002]目前android程序如火如荼,在世界各地非常繁荣,andorid开发的程序采用java语言开发,由于其开源性,开发商免交了高的专利费用,可以更好的融合世界上先进芯片厂商,软件厂商参与其中。由于android的应用程序上层是使用java语言编写的,为了绕过甲骨文公司的oracle (java)虚拟机授权,Google公司设计了用于Android平台的dalvik虚拟机,利用dalvik虚拟机,Java代码经过dx (dx是将java的classes文件编译为字节码dex文件的工具)工具转化编译后,变成Dex文件,Dex文件的指令码就是Dalvik虚拟机专有的一套指令集,专门为嵌入式系统优化过,相比标准java的.class文件,它体积小,运行效率高。
[0003]现有的Java是一种跨平台的、解释型语言。Java编译工具将Java源代码被编译成为Java字节码文件,由Java虚拟机负责对Java字节码文件进行解释执行。与本地目标代码不同,Java字节码文件中仍然保留了方法名称、变量名称,并且通过这些名称来访问变量和方法,这些符号往往带有许多语义信息。因此,对Java字节码文件进行反编译就显得比较容易。有许多Java的反编译工具都能够从Java字节码文件生成高质量的源代码。有很多针对java语言编写的程序采用反编译等一些方法,就能获得相应应用程序的代码,这样就导致软件的发明专利情况,以及软件的知识产权情况得不到保护。
[0004]为阻止对Java字节码文件进行反编译,目前市场上相近的方案有:
1、对要发布的Java字节码文件进行加密;
2、用Java虚拟机工具接口监听其它初始化事件;
3、为Java虚拟机初始化事件指定Hook函数;
4、Java虚拟机初始化完成时自动调用Hook函数,并在的Hook函数中使用Java本地接口将Java虚拟机在生成类对象时调用的函数注册为自定义的代理函数;
5、Java虚拟机在生成某个类对象时调用自定义的代理函数,在自定义的代理函数中对加密过的Java字节码文件进行解密处理;
6、将解密后的Java字节码文件生成相应的类对象后返回给Java虚拟机。
[0005]上述技术主要是针对java平台针对java标准虚拟机(JVM)实现的技术,但是在智能终端android移动研究领域,有着明显的不足,毕竟android开发的应用程序,虽然使用java语目书写的,但是其运行环境不是传统意义的java虚拟机(JVM),而是dalvik虚拟机设备,有着自己的堆栈与编译环境。
[0006]目前市场上,已有的java技术主要从如下方式进行防止java程序进行反编译:
1、隔离程序:将关键的代码放服务器,通过远程访问方式获得服务,这样就无法破译程序代码,但这种方法必须依赖于网络,并且网络方式获取也具有一定不安全性,并且成本较其他方式比较高。[0007]2、代码混淆:主要是通过将定义的类、变量、方法和包的名字改为无意义的字符串、使用非法的字符代替变量符号和在软件中添加一些无关的指令或永远执行不到的指令等手段来增加反编译和对反编译后源代码阅读的难度。但这种方法并不能真正阻止反编译,而且混淆都有一定规律可寻。
[0008]3、转换本地代码:即将Java程序像C/C++程序一样编译成本机可执行的二进制代码。但是这样做使得Java程序失去其跨平台的特性,而且这种技术目前并不十分成熟,因此不适用于大型应用程序。
[0009]4、自定义类加载器:是指首先将Java字节码文件进行加密处理,然后自已编写一个Java类装载器在Java字节码文件装载时再进行解密处理。这种方法的缺点在于虽然经过加密的Java字节码文件无法被反编译,但自定义的类加载器本身却不能防止被反编译。因此,加密过的Java字节码文件仍然是不安全的。

【发明内容】

[0010]本发明提供一种智能终端android系统中防止应用程序反编译的方法,在android系统中引入加密算法,防止软件程序被反编译,能极大的提高android程序的安全性。
[0011]为了达到上述目的,本发明提供一种智能终端android系统中防止应用程序反编译的方法,该方法包含以下步骤:
步骤1、对android程序进行加密;
步骤2、将经过加密后的android程序加载到dalvik虚拟机;
步骤3、对加载后的android程序进行解密。
[0012]所述的步骤1包含以下步骤:
步骤1.1、应用程序用java开发完成后,经过打包成*.jar文件;
步骤1.2、打包文件经过jdk编译工具后,生成对应的*.class文件;
步骤1.3、在android平台上,调用加密算法对文件相应的字节码进行加密;
步骤1.4、利用android上的dx工具,将对应的*.class文件转化成*.dex文件,形成含有加密文件的apk应用程序。
[0013]所述的步骤3包含以下步骤:
步骤3.1、当android系统运行的时候,启动zygote虚拟机孵化器;
步骤3.2、由zygote虚拟机孵化器孵化出具体的应用程序实例;
步骤3.3、注册解密监听事件,让系统碰到加密的应用程序代码,就自动启动侦听程序进行解密;
步骤3.4、对运行的应用程序实例dex,odex字节码进行解密。
[0014]步骤3.5、取出运行的应用程序实例dex, odex中的信息,进行相应的指令操作;步骤3.6、完成相应的应用程序实例对象生命周期的管理,堆栈管理,线程管理,安全异
常管理,垃圾回收操作。
[0015]本发明在android系统中引入加密算法,防止软件程序被反编译,能极大的提高android程序的安全性。【专利附图】

【附图说明】
[0016]图1是本发明加密过程的流程图。
[0017]图2是本发明解密过程的流程图。
【具体实施方式】
[0018]以下根据图1和图2,具体说明本发明的较佳实施例。
[0019]本发明提供一种智能终端android系统中防止应用程序反编译的方法,该方法包含以下步骤:
步骤1、对android程序进行加密;
步骤1.1、应用程序用java开发完成后,经过打包成*.jar文件;
步骤1.2、打包文件经过jdk编译工具后,生成对应的*.class文件;
步骤1.3、在android平台上,调用加密算法对文件相应的字节码进行加密;
本实施例中,为了降低成本,采用RSA加密算法,RSA加密算法目前在软件领域非常方便,也容易部署,可以米用C++方式,也可以米用java方式,本实施例中米用C++方式实现;步骤1.4、利用android上的dx工具,将对应的*.class文件转化成*.dex文件,形成含有加密文件的apk (AndroidPackage, Android安装包)应用程序;
加密的好处就是和市场上的应用程序比较起来更安全,因为经过了 Class字节码加密处理,安全性得到了进一步保证,与传统的字节码混淆技术,以及转化本地代码,自定义装载器等等方法比较起来,实现了加密技术,使得代码的安全性得到到了进一步提高;
步骤2、将经过加密后的android程序加载到dalvik虚拟机;
步骤3、对加载后的android程序进行解密;
步骤3.1、当android系统运行的时候,启动zygote虚拟机孵化器;
Zygote是android程序一个特殊应用程序,和驱动,内核模块一样,Zygote的启动由linux操作系统的init (初始化)启动开始,大部分的应用进程都是由它创建出来的;
步骤3.2、由zygote虚拟机孵化器孵化出具体的应用程序实例;
步骤3.3、注册解密监听事件,让系统碰到加密的应用程序代码,就自动启动侦听程序进行解密;
Android系统中可以采用设计模式的注册监听方式,对相应的事件进行响应,目前android中注册监听器有两种方式,一种是在android的Manifest (Manifest, xml是android应用程序必须有的系统配置文件)中进行注册,另一种是在代码中进行注册;
步骤3.4、对运行的应用程序实例dex(android dalvik执行程序),odex(是由android软件中的classes, dex生成,是android上的应用程序apk中提取出来的可运行文件)字节码进行解密;
本实施例中的解密算法采用与加密算法对应的RSA解密算法;
步骤3.5、取出运行的应用程序实例dex,odex中的信息,进行相应的指令操作;
Dex, ODex中的信息是字节码信息,就是相应的二进制信息,为程序运行中涉及的各种调用,执行的各种操作,比如全局变量,局部变量信息,以及对象引用等;
相应的指令操作就是dalvik虚拟机中相应的操作系统,压栈,程序计算器,堆操作等操作;步骤3.6、完成相应的应用程序实例对象生命周期的管理,堆栈管理,线程管理,安全异常管理,垃圾回收操作。
[0020]android应用程序经过本方法加密后,即使经过反编译方法后也较难破解掉相应的程序,所以拿到其他机器上是运行不了,因为有个注册解密事件的侦听事件,只有在特定的虚拟机上才可以运行本应用程序。
[0021]尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
【权利要求】
1.一种智能终端android系统中防止应用程序反编译的方法,其特征在于,该方法包含以下步骤:步骤1、对android程序进行加密;步骤2、将经过加密后的android程序加载到dalvik虚拟机;步骤3、对加载后的android程序进行解密。
2.如权利要求1所述的智能终端android系统中防止应用程序反编译的方法,其特征在于,所述的步骤1包含以下步骤:步骤1.1、应用程序用java开发完成后,经过打包成*.jar文件;步骤1.2、打包文件经过jdk编译工具后,生成对应的*.class文件;步骤1.3、在android平台上,调用加密算法对文件相应的字节码进行加密;步骤1.4、利用android上的dx工具,将对应的*.class文件转化成*.dex文件,形成含有加密文件的apk应用程序。
3.如权利要求1所述的智能终端android系统中防止应用程序反编译的方法,其特征在于,所述的步骤3包含以下步骤:步骤3.1、当android系统运行的时候,启动zygote虚拟机孵化器;步骤3.2、由zygote虚拟机孵化器孵化出具体的应用程序实例;步骤3.3、注册解密监听事件,让系统碰到加密的应用程序代码,就自动启动侦听程序进行解密;步骤3.4、对运行的应用程序实例dex,odex字节码进行解密;步骤3.5、取出运行的应用程序实例dex,odex中的信息,进行相应的指令操作;步骤3.6、完成相应的应用程序实例对象生命周期的管理,堆栈管理,线程管理,安全异常管理,垃圾回收操作。
【文档编号】G06F21/14GK103745141SQ201310630537
【公开日】2014年4月23日 申请日期:2013年12月2日 优先权日:2013年12月2日
【发明者】金果 申请人:上海斐讯数据通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1