[发明专利]一种ART下使用自修改技术进行软件保护的方法在审
申请号: | 201811114145.9 | 申请日: | 2018-09-25 |
公开(公告)号: | CN109344577A | 公开(公告)日: | 2019-02-15 |
发明(设计)人: | 牛伟纳;张小松;王恺 | 申请(专利权)人: | 四川大学 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 成都弘毅天承知识产权代理有限公司 51230 | 代理人: | 邹敏菲 |
地址: | 610065 四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 关键代码 软件保护 状态机 打包 编译 修复 保护应用 代码集成 动态加载 算法生成 信息生成 抽离 算法 抽取 取出 转化 | ||
1.一种ART下使用自修改技术进行软件保护的方法,其特征在于,包括如下步骤:
步骤1:选取被保护应用的待保护关键代码;
步骤2:将步骤1所选待保护关键代码进行抽取;
步骤3:将步骤2抽取出的关键代码进行破坏,并转化为动态加载的dex文件;
步骤4:根据步骤3处理所得的代码和最初的关键代码,生成用于自修改修复的native代码;
步骤5:使用自修改状态机算法对步骤4中的native代码进行保护;
步骤6:对步骤5生成的代码集成编译并打包,生成最终被保护的APK。
2.根据权利要求1所述的ART下使用自修改技术进行软件保护的方法,其特征在于:所述步骤2对关键代码的抽取通过关键代码抽取模块完成,抽取后将相应的调用更改为动态加载与自修改保护后的调用方式,所述关键代码抽取模块的步骤为:
步骤2.1:将被保护的关键代码从其实现的类中剥离出来,新建一个被保护的类,将关键代码放在此被保护的类中;
步骤2.2:而此被保护的类打成jar,使用dx工具转化为dex格式,作为动态加载的目标,抽取模块只是将关键代码提取出来;
步骤2.3:将原先调用关键方法的位置,更改为动态加载此dex,并调用dex中的关键方法,而此种调用的同时,将自修改回填正确代码的native实现,放在动态加载dex之后,调用关键方法之前。
3.根据权利要求1所述的ART下使用自修改技术进行软件保护的方法,其特征在于:所述步骤3通过构造被保护的dex模块对被抽离出的关键代码进行处理,破坏其中逻辑并记录破坏信息,并通过dx转化,生成相应待加载的dex文件。
4.根据权利要求1所述的ART下使用自修改技术进行软件保护的方法,其特征在于:所述步骤4中的native通过自修改代码生成模块生成,该模块根据步骤3的破坏修改信息生成相应的自修改修复代码,具体工作步骤为:
步骤4.1:查看应用内存信息并找到加载的dex的起始与结束位置;
步骤4.2:获得类的StringId,获得方法的StringId,获得类的TypeId,获得方法的TypeId,获得ClassDefItem的地址,获得ClassDataOff代码地址;
步骤4.3:计算要替换的指令地址,使此部分内存可读写并替换内存数据。
5.根据权利要求1所述的ART下使用自修改技术进行软件保护的方法,其特征在于:所述步骤5中对native代码的保护通过自修改保护模块完成,该模块运用自修改自动机算法native代码分割为4块,并加入2段无关代码,运用算法对该native代码进行保护,具体工作步骤是:
步骤5.1:定义构造的两段无关代码块分别为useless_1(),useless_2();
步骤5.2:将构造的无关代码与自修改的native代码相结合,并拆分为六个片段,各片段如下:
A:查看应用内存信息并找到加载的dex的起始与结束位置部分代码,findaddress();
B:获得类的StringId,获得方法的StringId,获得类的TypeId部分代码,findid();
C:获得方法的TypeId,获得ClassDefItem的地址,获得ClassDataOff代码地址部分代码,findcode();
D:无关代码块1,useless_1();
E:计算要替换的指令地址并替换内存数据,modify();
F:无关代码块2,useless_2()。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川大学,未经四川大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811114145.9/1.html,转载请声明来源钻瓜专利网。