基于安卓的双系统终端防止apk二次打包运行方法与流程

文档序号:18755879发布日期:2019-09-24 22:21阅读:463来源:国知局
基于安卓的双系统终端防止apk二次打包运行方法与流程

本发明涉及基于安卓的双系统终端防止apk二次打包运行方法。



背景技术:

在现有的带安卓的双系统终端上,通常是以android做为一个交互系统,会集成很多的apk软件,这些apk软件往往会被人从终端上导出后,进行分析,然后二次打包,然后就成了竞争对后的产品。



技术实现要素:

本发明的目的在于提供基于安卓的双系统终端防止apk二次打包运行方法。

本发明采用的技术方案是:

基于安卓的双系统终端防止apk二次打包运行方法,双系统终端中安卓作为交互系统且另一系统作为底层系统,方法包括以下步骤:

步骤1,利用安卓的jni技术生成一具有通信功能的动态库,并将该动态库编译进apk程序中,

步骤2,在双系统终端上将允许安装的apk程序的基准md5值事先写入到底层系统的指定位置,同时在底层系统上预装校验程序,校验程序与动态库之间无线通信连接;

步骤3,apk程序启动时动态库获取安卓交互系统中程序目录下该apk的md5值,

步骤4,动态库将读取的apk的md5值传输至底层系统的校验程序;

步骤5,校验程序获取其指定位置存储的该apk程序的基准md5值,

步骤6,校验程序比较基准md5值与动态库传输的md5值是否一致;并反馈比较结果至动态库;

步骤7,动态库基于比较结果进行相应的处理;当md5值比较一致时,动态库允许该apk程序继续运行;否则,动态库结束该apk程序的运行。

进一步地,所述双系统终端的交互系统为安卓系统,底层系统为linux系统或windows系统。

进一步地,步骤1中动态库采用蓝牙或socket与底层系统建立无线通信。

进一步地,步骤1中的动态库为采用c或c++编写的可执行程序改名为.so的动态库。

进一步地,步骤2中的校验程序为采用c或c++编写的可执行程序。

进一步地,步骤3中apk程序启动时自动将动态库先加载至内存。

本发明采用以上技术方案,利用二次打包后相关apk程序md5值会发生改变的特性,在apk程序嵌入动态库并在底层系统部署校验程序和基准md5值;进而,交互系统上的apk启动时由动态库获取apk程序的md5值并传输值底层系统的校验程序上,校验程序将接收的md5值与预存在底层系统指定位置的对应apk程序的基准md5值作比较,一旦比较不一致,则通知结束该apk程序的运行。本发明的校验程序运行在单独的进程中,不行影响交互系统上apk程序的运行。现有技术中采用加固来防止二次打包,其需要加载dex插件进行运行,影响一定的性能;相对于现有技术而言,本发明无需要加载插件,性能更优。若该apk程序在非授权的终端上反编译并二次打包后,即使安装了也无法运行,由于底层系统没有对应的校验程序和基准md5,动态库将结束apk程序的运行,进而无法对其进行动态调试。现在的混淆工具和加固工具都是使得apk无法二次打包,本发明是让apk反编译后,无法运行。本发明使得apk程序不容易被干扰和破解。

附图说明

以下结合附图和具体实施方式对本发明做进一步详细说明;

图1为本发明基于安卓的双系统终端防止apk二次打包运行方法的流程示意图。

具体实施方式

如图1所示,本发明公开了基于安卓的双系统终端防止apk二次打包运行方法,双系统终端中安卓作为交互系统且另一系统作为底层系统,方法包括以下步骤:

步骤1,利用安卓的jni技术生成一具有通信功能的动态库,并将该动态库编译进apk程序中,

步骤2,在双系统终端上将允许安装的apk程序的基准md5值事先写入到底层系统的指定位置,同时在底层系统上预装校验程序,校验程序与动态库之间无线通信连接;

步骤3,apk程序启动时动态库获取安卓交互系统中程序目录下该apk的md5值,

步骤4,动态库将读取的apk的md5值传输至底层系统的校验程序;

步骤5,校验程序获取其指定位置存储的该apk程序的基准md5值,

步骤6,校验程序比较基准md5值与动态库传输的md5值是否一致,并反馈比较结果至动态库;

步骤7,动态库基于比较结果进行相应的处理;当md5值比较一致时,动态库允许该apk程序继续运行;否则,动态库结束该apk程序的运行。

进一步地,所述双系统终端的交互系统为安卓系统,底层系统为linux系统或windows系统。

进一步地,步骤1中动态库采用蓝牙或socket与底层系统建立无线通信。

进一步地,步骤1中的动态库为采用c或c++编写的可执行程序改名为.so的动态库。

进一步地,步骤2中的校验程序为采用c或c++编写的可执行程序。

进一步地,步骤3中apk程序启动时自动将动态库先加载至内存。

下面就本发明的工作原理做详细的说明:

以交互系统时安卓系统,底层系统时linux系统的双系统终端为例。

(1)在授权的双系统终端上的将授权要安装apk程序的基准md5写入到linux系统的某个位置上。

(2)事先用编程语言生成一个用于校验的可执行程序,如用c/c++生成一个可执行的程序,该校验程序的作用是先从liunx读取预存的基准md5值,判断后续apk的动态库传输的对应apk的md5值是否有被修改过,该校验程序可记为exe_a。

(3)同时利用android的jni技术,用c/c++生成一个可执行的程序的作用是与exe_a进行通信,通信方程有蓝牙、socket等,记为an_exe_a,an_exe_a这个程序的作用是将apk的md5值传递增给exe_a,并由exe_a比较判断完后再将结果传递回来。

(4)将an_exe_a的后缀名改为.so使其变为一个动态库,记为a.so;然后将该动态库放入android的apk程序中,一起编译进apk程序中;当apk程序启动时会自动将动态库加载到内存中。由于一般需授权的apk程序均为系统apk,所以apk程序有权限给a.so赋于可执行的权限,使得动态库能读写系统文件的权限。apk程序的其他部分变成一个可以执行的程序再将其运行起来。当a.so运行起来后,先从交互系统程序目录,即/system/app/目录下读取相应apk的md5值,如/system/app/tcm/tcm.apk,然后a.so将该md5值传递给exe_a,exe_a判断和存放在linux上的md5值是否一致,如果不一致,则让动态库结束相应apk的进程。

本发明采用以上技术方案,利用二次打包后相关apk程序md5值会发生改变的特性,在apk程序嵌入动态库并在底层系统部署校验程序和基准md5值;进而,交互系统上的apk启动时由动态库获取apk程序的md5值并传输值底层系统的校验程序上,校验程序将接收的md5值与预存在底层系统指定位置的对应apk程序的基准md5值作比较,一旦比较不一致,则通知结束该apk程序的运行。本发明的校验程序运行在单独的进程中,不行影响交互系统上apk程序的运行。现有技术中采用加固来防止二次打包,其需要加载dex插件进行运行,影响一定的性能;相对于现有技术而言,本发明无需要加载插件,性能更优。若该apk程序在非授权的终端上反编译并二次打包后,即使安装了也无法运行,由于底层系统没有对应的校验程序和基准md5,动态库将结束apk程序的运行,进而无法对其进行动态调试。现在的混淆工具和加固工具都是使得apk无法二次打包,本发明是让apk反编译后,无法运行。本发明使得apk程序不容易被干扰和破解。

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