[发明专利]一种程序代码保护方法和装置在审
申请号: | 201710419286.0 | 申请日: | 2017-06-06 |
公开(公告)号: | CN107292135A | 公开(公告)日: | 2017-10-24 |
发明(设计)人: | 朱星星;尹彬彬;钟亚平;卓辉 | 申请(专利权)人: | 网易(杭州)网络有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F21/12;G06F21/60 |
代理公司: | 北京同达信恒知识产权代理有限公司11291 | 代理人: | 李欣 |
地址: | 310052 浙江省杭州*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序代码 保护 方法 装置 | ||
技术领域
本发明的实施方式涉及软件开发技术领域,更具体地,本发明的实施方式涉及一种程序代码保护方法和装置。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
APP是Application(应用)的简称,通常是指移动设备(包括平板电脑、手机和其他移动设备)上的第三方开发的应用程序。DEX文件是Android平台上(Dalvik虚拟机)的可执行文件,相当于Windows平台中的exe文件,每个Apk(AndroidPackage,Android开发包)安装包中都有DEX文件,其由Java语言编写而成,其包含了APP的全部操作指令以及运行时所需的数据。DEX文件可以通过第三方逆向分析工具查看其Java源码,即通过反编译DEX文件可以直接看到Java源码,因此,越来越多的App(包括恶意病毒App)都使用了加固技术以防止App被轻易反编译。
现有技术中,通常采用以下两种方法对DEX文件进行加固,一种是对源DEX进行加密,并把加密后的文件打包存储到APK的某个目录下(加壳),这样,在APP运行时,外壳DEX首先启动,然后将加密文件解密,待解密出源DEX后再动态加载到内存运行源DEX。另外一种是将源DEX和外壳DEX混合处理成一个新DEX,在APP运行时,外壳DEX首先启动,然后将包含在新DEX里的源DEX解密出来,最后动态加载运行源DEX。
发明内容
但是,上述第一种方案中,由于需要加载加密文件以及解密和动态加载加密后的源DEX,需要消耗系统较多的处理资源;而在上述第二种方案中,其减少了DEX文件内存加载,在一定程度上降低了系统资源开销,但是,其在加密过程中,仍然需要对整个DEX文件进行加密,同样增加了系统处理资源的开销。
为此,非常需要一种改进的函数代码指令保护方法,以提高函数代码指令保护的安全性。
在本上下文中,本发明的实施方式期望提供一种程序代码保护方法和装置。
在本发明实施方式的第一方面中,提供了一种程序代码保护方法,包括:
针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;
修改所述访问标识为预设值;并
抽取所述函数对应的函数代码指令进行加密处理。
优选地,针对DEX文件中包含的每一函数,按照以下流程判断该函数对应的函数代码指令是否需要加密:
针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;
如果存在,则确定该函数对应的函数代码指令需要加密;
如果不存在,则确定该函数对应的函数代码指令不需要加密。
优选地,所述函数的结构信息中还包括指令偏移信息;以及
抽取所述函数对应的函数代码指令进行加密处理,具体包括:
根据所述指令偏移信息确定所述函数对应的函数代码指令的起始位置和终止位置;
抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护方法,还包括:
存储加密后的函数代码指令;并
记录加密后的函数代码指令的存储位置信息。
可选地,本发明实施例提供的程序代码保护方法,还包括:
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
执行解密后的函数代码指令。
可选地,本发明实施例提供的程序代码保护方法,还包括:
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
记录系统为解密后的函数代码指令所分配的内存偏移信息;
修改所述函数的结构信息中包含的指令偏移信息为分配的内存偏移信息。
在本发明实施方式的第二方面中,提供了一种程序代码保护装置,包括:
第一获取单元,用于针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;
第一修改单元,用于修改所述访问标识为预设值;
加密单元,用于抽取所述函数对应的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护装置,还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于网易(杭州)网络有限公司,未经网易(杭州)网络有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710419286.0/2.html,转载请声明来源钻瓜专利网。