[发明专利]安卓平台上可执行程序的保护方法有效
申请号: | 201710257478.6 | 申请日: | 2017-04-19 |
公开(公告)号: | CN108733988B | 公开(公告)日: | 2023-01-24 |
发明(设计)人: | 阚志刚;陈彪;王卫民;朱丹;程显龙;卢佐华 | 申请(专利权)人: | 北京梆梆安全科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 北京国昊天诚知识产权代理有限公司 11315 | 代理人: | 李潇 |
地址: | 100083 北京市海淀区学*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 平台 可执行 程序 保护 方法 | ||
1.一种安卓平台上可执行程序的保护方法,包括:
步骤1,确定并修改APK文件包中classes.dex文件中要保护的函数;采用字节码转换引擎将所述要保护的函数的字节码转换为新的自定义的新的字节码;建立所有保护的函数的原字节码与新的自定义的映射;将对所要保护的函数修改后的classes.dex文件,形成新的classes.dex文件;
步骤2,生成自定义的字节码与所要保护的函数相对应的原生函数;编写所述原生函数的C/C++语言实现;将所述原生函数native的C/C++语言实现编译为动态库;所述的动态库至少包括由所述自定义的字节码的原生函数 构成的解释器;和
步骤3,在所述APK文件包中,用所述新的classes.dex文件替换原classes.dex文件,将所述动态库加入所述APK文件包。
2.根据权利要求1所述的方法,其中,所述步骤1包括:
步骤11,反编译所述classes.dex文件,得到第一文件;
步骤12,确定所述第一文件中要保护的函数;
步骤13,在所述第一文件中将所述要保护的函数变为native函数,并清空函数内容;和
步骤14,编译所述第一文件,形成新的classes.dex文件。
3.根据权利要求1所述的方法,其中,步骤2中所述的原生函数为native函数。
4.根据权利要求1所述的方法,其中,步骤2中所述的原生函数,由不涉及Java语义的基本算术操作函数、或者基本寄存器赋值操作函数、或者条件跳转操作函数构成。
5.根据权利要求1所述的方法,其中,步骤2中所述的原生函数,由涉及Java语义的对象生成操作函数、或者对象域读取操作函数、或者数组操作函数、或者函数调用操作函数、或锁的操作函数构成。
6.根据权利要求1所述的方法,其中,所述步骤2包括如下步骤:
步骤21,保存在原classes.dex中所述要保护的函数对应的字节码;
步骤22,建立C/C++语言文件,所述C/C++语言文件的内容包括:
数组,所述数组用于保存所述新的字节码;
原生函数,所述原生函数用于使用C/C++实现所述新的字节码;
解释器执行函数,所述解释器执行函数由所述原生函数调用,以用于根据所述新的字节码的语义进行解释执行;和
注册部分,所述注册部分用于将原生函数与所述要保护的函数建立注册关系;和
步骤23,采用Android 平台的NDK将所述C/C++语言文件编译生成动态库。
7.根据权利要求6所述的方法,其中,所述解释器执行函数的实现步骤包括:
步骤41,分配内存:
步骤42,将PC指针指向所述数组的首地址,进入无限循环;
步骤43,在所述无限循环中,取出数组中的指令后,解析指令的操作数,执行所述操作数代表的语义;和
步骤44,读取下一条指令,如果没有指令则退出所述无限循环。
8.根据权利要求7所述的方法,其中,所述操作数是不涉及Java语义的操作,则在寄存器上进行操作。
9.根据权利要求7所述的方法,其中,所述操作数是涉及Java语义的操作,则通过JNI接口对Java对象进行操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京梆梆安全科技有限公司,未经北京梆梆安全科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710257478.6/1.html,转载请声明来源钻瓜专利网。