基于动态恢复so文件的Android应用加固方法与流程

文档序号:11156075阅读:来源:国知局

技术特征:

1.一种Android应用加固方法,基于动态恢复Android系统应用程序动态链接库so文件,通过二进制流加密方法对so文件中的关键代码进行加固,使得Android应用程序代码得到保护;所述加固方法包括加密过程和解密过程,具体包括如下步骤:

A.加密过程:对需要保护的Android应用程序进行加密,具体设定需要加密的特定节的关键代码,对关键代码所在的节进行加密并重新生成新的Android应用程序;所述重新生成的新的Android应用程序中包含原有的dex文件、解密后关键代码的so文件和加密后关键代码的so文件;所述加密包括如下步骤:

A1.对需要保护的Android应用程序解压,获得Android应用程序中的so文件,对所述so文件进行解析;

A2.读取elf文件头,定位到节区头部表;

A3.根据elf文件头,读取得到节区数量;

A4.读取得到节区头部表中的所有项;

A5.读取得到节表字符串表在节表中的索引,再找到节表字符串表的偏移;

A6.读取节表字符串表中的字符串,将每一个节的名字保存起来;

A7.比较每一个节的名字和自定义节的名字,如果匹配,则得到目标节的内容并保存;

A8.设定密钥key1,使用密钥key1对步骤A7所述目标节的内容进行第一次加密,得到第一次加密后的中间数据;

A9.设定密钥key2,使用密钥key2对步骤A8所述中间数据进行第二次加密;

A10.将二次加密后得到数据更新到so文件中,得到新的so文件;

A11.压缩重新生成apk,即完成加密过程;所述重新生成的apk中包含原有的dex文件以及包含解密和加密后关键代码的so文件;

B.解密过程:在开始执行Android应用程序时,对加密后关键代码的so文件进行动态恢复,得到关键代码,再调用所述关键代码的方法;所述动态恢复具体执行如下操作:

B1.在Android应用程序被载入内存后,执行Android应用程序中so文件中的程序;

B2.在内存中找到so文件在进程中的地址;

B3.在so文件中查找待解密的节的地址;

B4.得到待解密的节占用的页的大小,修改占用页的读写权限;

B5.执行关键代码时,从so文件中取得密钥key2,对待解密的节进行解密,得到中间代码;

B6.针对步骤B5得到的中间代码,从so文件中取得密钥key1,进行第二次解密,得到最终的关键代码;

B7.进行关键代码的方法调用。

2.如权利要求1所述Android应用加固方法,其特征是,所述设定需要加密的特定节的关键代码,具体通过重要算法方法、验证登陆方法、系统关键流程方法中的一个或多个来设定得到。

3.如权利要求1所述Android应用加固方法,其特征是,所述A2具体根据e_shoff定位到节区头部表;所述A3具体根据elf文件头中的e_shnum得到节区数量;所述A4具体根据e_shoff和e_shnum读取得到节区头部表中的所有项;所述A5具体通过elf文件头中的e_shstrndx项得到节表字符串表在节表中的索引。

4.如权利要求1所述Android应用加固方法,其特征是,步骤A7具体通过shdr->sh_offest和shdr->sh_zie得到所述目标节的内容。

5.如权利要求1所述Android应用加固方法,其特征是,步骤A8所述第一次加密或步骤A9所述第二次加密均采用AES加密方法。

6.如权利要求1所述Android应用加固方法,其特征是,步骤B1具体通过JNI调用机制调用来执行Android应用程序so文件中的.init_array段中的方法程序。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1