基于指令虚拟化的鸿蒙系统代码加密方法、系统及终端与流程

文档序号:29829740发布日期:2022-04-27 11:54阅读:412来源:国知局
基于指令虚拟化的鸿蒙系统代码加密方法、系统及终端与流程

1.本发明涉及代码处理技术领域,尤其涉及一种基于指令虚拟化的鸿蒙系统代码加密方法、系统、终端及存储介质。


背景技术:

2.鸿蒙os是华为公司开发的一款基于微内核,面向5g物联网、面向全场景的分布式操作系统。鸿蒙的英文名是harmonyos,意为和谐。不是安卓系统的分支或修改而来的。与安卓、ios是不一样的操作系统。性能上不弱于安卓系统,而且华为还为基于安卓生态开发的应用能够平稳迁移到鸿蒙os上做好衔接,将相关系统及应用迁移到鸿蒙os上,差不多两天就可以完成迁移及部署。这个新的操作系统将打通手机、电脑、平板、电视、工业自动化控制、无人驾驶、车机设备[、智能穿戴统一成一个操作系统,并且该系统是面向下一代技术而设计的,能兼容全部安卓应用的所有web应用。若安卓应用重新编译,在鸿蒙os上,运行性能提升超过60%。鸿蒙os架构中的内核会把之前的linux内核、鸿蒙os微内核与liteos合并为一个鸿蒙os微内核。创造一个超级虚拟终端互联的世界,将人、设备、场景有机联系在一起。同时由于鸿蒙系统微内核的代码量只有linux宏内核的千分之一,其受攻击几率也大幅降低。
[0003]
鸿蒙系统(harmony os)是一款面向万物互联时代的、全新的分布式操作系统,是新一代的智能终端操作系统,为不同设备的智能化、互联与协同提供了统一的语言,带来简捷、流畅、连续、安全可靠的全场景交互体验。
[0004]
harmony os应用发布形态为app pack(application package,简称app),它是由一个或多个hap(harmony os ability package)包以及描述app pack属性的pack.info文件组成。其中,zip格式的hap安装包中保存了应用的dex格式代码文件(dex文件就是android虚拟机运行的程序,开发人员发布android app时,首先把java代码编译为class字节码,然后通过dx工具把class字节码转为dex文件格式)、apk格式的启动入口文件以及一些资源、配置类文件。
[0005]
鸿蒙系统是新生事物,目前配套的安全产品缺失,主要是目前鸿蒙系统的安装包被反编译时缺乏安全保护。
[0006]
因此,现有技术还有待于改进和发展。


技术实现要素:

[0007]
本发明的主要目的在于提供一种基于指令虚拟化的鸿蒙系统代码加密方法、系统及终端,旨在解决现有技术中鸿蒙系统的安装包被反编译时缺乏安全保护的问题。
[0008]
为实现上述目的,本发明提供一种基于指令虚拟化的鸿蒙系统代码加密方法,所述基于指令虚拟化的鸿蒙系统代码加密方法包括如下步骤:
[0009]
获取hap包中的dex格式代码文件,提取需要加密方法的二进制指令并保存;
[0010]
清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器
调用代码,覆盖所述hap包中原始的dex格式代码文件;
[0011]
基于加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库,并保存在所述hap包的libs目录下;
[0012]
使用所述自定义指令表等价替换掉已提取需要加密方法的二进制指令,并命名为数据文件后保存在所述hap包的资源文件目录下;
[0013]
将所述hap包进行重新签名以完成加密,并将加密后的hap包安装到移动终端后运行时,执行被加密的方法;
[0014]
执行被加密方法中注入的虚拟机解析器引擎库入口调用,基于虚拟机解析器引擎库根据当前加密方法id查找执行所述数据文件保存的自定义指令数据;
[0015]
基于虚拟机解析器引擎库执行完自定义指令后返回执行结果,被加密方法返回虚拟机解析器引擎库的执行结果,完成整个加密方法的执行。
[0016]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,提取需要加密方法的二进制指令按方法id保存。
[0017]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,所述重新签名为根据用户提供的证书文件,调用鸿蒙官方提供的签名工具完成对所述hap包的签名工作。
[0018]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,所述虚拟机解析器引擎库用于根据加密方法id找到对应加密后的指令。
[0019]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,所述虚拟机指令解析器引擎库为libgamevmp_entry.so。
[0020]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,所述数据文件为entry.vdata。
[0021]
可选地,所述的基于指令虚拟化的鸿蒙系统代码加密方法,其中,所述hap包为鸿蒙系统ability的部署包。
[0022]
此外,为实现上述目的,本发明还提供一种基于指令虚拟化的鸿蒙系统代码加密系统,其中,所述基于指令虚拟化的鸿蒙系统代码加密系统包括:
[0023]
数据获取模块,用于获取hap包中的dex格式代码文件,提取需要加密方法的二进制指令并保存;
[0024]
清空插入模块,用于清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器调用代码,覆盖所述hap包中原始的dex格式代码文件;
[0025]
指令生成模块,用于基于加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库,并保存在所述hap包的libs目录下;
[0026]
等价替换模块,用于使用所述自定义指令表等价替换掉已提取需要加密方法的二进制指令,并命名为数据文件后保存在所述hap包的资源文件目录下;
[0027]
加密安装模块,用于将所述hap包进行重新签名以完成加密,并将加密后的hap包安装到移动终端后运行时,执行被加密的方法;
[0028]
注入查找模块,用于执行被加密方法中注入的虚拟机解析器引擎库入口调用,基于虚拟机解析器引擎库根据当前加密方法id查找执行所述数据文件保存的自定义指令数据;
[0029]
返回执行模块,用于基于虚拟机解析器引擎库执行完自定义指令后返回执行结
果,被加密方法返回虚拟机解析器引擎库的执行结果,完成整个加密方法的执行。
[0030]
此外,为实现上述目的,本发明还提供一种终端,其中,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于指令虚拟化的鸿蒙系统代码加密程序,所述基于指令虚拟化的鸿蒙系统代码加密程序被所述处理器执行时实现如上所述的基于指令虚拟化的鸿蒙系统代码加密方法的步骤。
[0031]
此外,为实现上述目的,本发明还提供一种存储介质,其中,所述存储介质存储有基于指令虚拟化的鸿蒙系统代码加密程序,所述基于指令虚拟化的鸿蒙系统代码加密程序被处理器执行时实现如上所述的基于指令虚拟化的鸿蒙系统代码加密方法的步骤。
[0032]
本发明通过对dex格式代码文件的二进制指令进行提取解析,并将指令替换为加密工具随机生成的自定义指令,在安装运行虚拟化加密后的hap相关代码时,通过虚拟机指令解析器引擎执行自定义指令,加密后的指令在内存中始终保持密文状态,整个过程无需对指令进行解密,相比传统的加密方案更加安全,能够有效的对抗传统的加密存在内存dump明文的风险,丰富了鸿蒙系统的安全生态。
附图说明
[0033]
图1是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例的流程图;
[0034]
图2是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例中加密前后hap文件内部结构对比图;
[0035]
图3是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例中加密前后被加密方法对比的示意图;
[0036]
图4是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例中代码加密流程的示意图;
[0037]
图5是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例中指令替换过程的示意图;
[0038]
图6是本发明基于指令虚拟化的鸿蒙系统代码加密方法的较佳实施例中加密后方法执行流程的示意图;
[0039]
图7是本发明基于指令虚拟化的鸿蒙系统代码加密系统的较佳实施例的原理示意图;
[0040]
图8为本发明终端的较佳实施例的运行环境示意图。
具体实施方式
[0041]
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0042]
如图1所示,本发明较佳实施例所述的基于指令虚拟化的鸿蒙系统代码加密方法,所述基于指令虚拟化的鸿蒙系统代码加密方法包括以下步骤:
[0043]
步骤s10、获取hap包中的dex格式代码文件,提取需要加密方法的二进制指令并保存。
[0044]
具体地,提取所述hap包(鸿蒙系统ability的部署包,鸿蒙系统的安装包格式,类
似windows系统的exe格式软件安装包)中的dex格式代码文件,提取需要加密方法的二进制指令(默认加密工具会对hap一些常用组件类的方法指令进行加密,也可以通过白名单指定关键代码),按方法id保存,例如可以理解为保存成如下结构的文件:
[0045]
id方法名指令1oncreate0x12.....2onresume0x11....
[0046]
步骤s20、清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器调用代码,覆盖所述hap包中原始的dex格式代码文件。
[0047]
具体地,如图2、图3和图4所示,清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器调用代码(工具完成指令提取加密操作,应用安装后,运行具体指令的时候肯定要有解密操作,这里插入的调用代码,可以理解为,为了解密),覆盖hap包中原始的dex格式代码文件。
[0048]
步骤s30、基于加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库,并保存在所述hap包的libs目录下。
[0049]
具体地,通过加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库(libgamevmp_entry.so,虚拟机指令解析器引擎库表示放有虚拟机指令解析算法的so共享库文件(so共享库:c/c++语言开发,编译生成的可执行文件);该库文件提供了一些列接口方法,供外部调用,比如一个方法id为1的方法,指令被加密了,这里调用虚拟机指令解析器的相关方法,传入参数1,虚拟机解析器就会,找到这个id:1的方法对应的加密指令,然后执行这些指令),放入hap包libs目录下。
[0050]
步骤s40、使用所述自定义指令表等价替换掉已提取需要加密方法的二进制指令,并命名为数据文件后保存在所述hap包的资源文件目录下。
[0051]
具体地,如图5所示,使用步骤s40生成的随机指令表,等价替换步骤s20提取的二进制指令,保存为数据文件(entry.vdata),放入hap包资源文件目录下;每条指令的指令码都有其对应的功能含义,比如原二进制指令0x0110,翻译成代码就是move v0,v1,其中01这个指令码对应的操作就是move操作,等价把这个指令码0x01修改成0x22,指令就等价替换为了0x2210,这个0x22是自己定义的指令,别人不知道什么意思,所以这条指令别人拿到也没法运行,但是本发明的虚拟机引擎库中,有这个0x22指令码的功能实现,通过虚拟机引擎库就能正确执行这条指令,例如:
[0052]
原指令码新指令码0x010x220x020x12
[0053]
步骤s50、将所述hap包进行重新签名以完成加密,并将加密后的hap包安装到移动终端后运行时,执行被加密的方法。
[0054]
具体地,对hap包进行重新签名,例如根据用户提供的证书文件(可以通过开发工具,或者鸿蒙官网申请),调用鸿蒙官方提供的签名工具,完成对hap包的签名工作,完成加密;hap包安装到移动终端(例如手机)后,运行时,执行被加密的方法,比如a这个方法被加密了,应用运行到这个a方法,就叫执行到被加密的a方法。
[0055]
步骤s60、执行被加密方法中注入的虚拟机解析器引擎库入口调用,基于虚拟机解
digital,sd)卡,闪存卡(flash card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据,例如所述安装终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有基于指令虚拟化的鸿蒙系统代码加密程序40,该基于指令虚拟化的鸿蒙系统代码加密程序40可被处理器10所执行,从而实现本技术中基于指令虚拟化的鸿蒙系统代码加密方法。
[0070]
所述处理器10在一些实施例中可以是一中央处理器(central processing unit,cpu),微处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述基于指令虚拟化的鸿蒙系统代码加密方法等。
[0071]
所述显示器30在一些实施例中可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organic light-emitting diode,有机发光二极管)触摸器等。所述显示器30用于显示在所述终端的信息以及用于显示可视化的用户界面。所述终端的部件10-30通过系统总线相互通信。
[0072]
在一实施例中,当处理器10执行所述存储器20中基于指令虚拟化的鸿蒙系统代码加密程序40时实现以下步骤:
[0073]
获取hap包中的dex格式代码文件,提取需要加密方法的二进制指令并保存;
[0074]
清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器调用代码,覆盖所述hap包中原始的dex格式代码文件;
[0075]
基于加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库,并保存在所述hap包的libs目录下;
[0076]
使用所述自定义指令表等价替换掉已提取需要加密方法的二进制指令,并命名为数据文件后保存在所述hap包的资源文件目录下;
[0077]
将所述hap包进行重新签名以完成加密,并将加密后的hap包安装到移动终端后运行时,执行被加密的方法;
[0078]
执行被加密方法中注入的虚拟机解析器引擎库入口调用,基于虚拟机解析器引擎库根据当前加密方法id查找执行所述数据文件保存的自定义指令数据;
[0079]
基于虚拟机解析器引擎库执行完自定义指令后返回执行结果,被加密方法返回虚拟机解析器引擎库的执行结果,完成整个加密方法的执行。
[0080]
其中,提取需要加密方法的二进制指令按方法id保存。
[0081]
其中,所述重新签名为根据用户提供的证书文件,调用鸿蒙官方提供的签名工具完成对所述hap包的签名工作。
[0082]
其中,所述虚拟机解析器引擎库用于根据加密方法id找到对应加密后的指令。
[0083]
其中,所述虚拟机指令解析器引擎库为libgamevmp_entry.so。
[0084]
其中,所述数据文件为entry.vdata。
[0085]
其中,所述hap包为鸿蒙系统ability的部署包。
[0086]
本发明还提供一种存储介质,其中,所述存储介质存储有基于指令虚拟化的鸿蒙系统代码加密程序,所述基于指令虚拟化的鸿蒙系统代码加密程序被处理器执行时实现如上所述的基于指令虚拟化的鸿蒙系统代码加密方法的步骤。
[0087]
综上所述,本发明提供一种基于指令虚拟化的鸿蒙系统代码加密方法、系统、终端
及存储介质,所述方法包括:获取hap包中的dex格式代码文件,提取需要加密方法的二进制指令并保存;清空所述dex格式代码文件中被加密方法的二进制指令,插入虚拟机指令解析器调用代码,覆盖所述hap包中原始的dex格式代码文件;基于加固工具生成随机的自定义指令表和配套的虚拟机指令解析器引擎库,并保存在所述hap包的libs目录下;使用所述自定义指令表等价替换掉已提取需要加密方法的二进制指令,并命名为数据文件后保存在所述hap包的资源文件目录下;将所述hap包进行重新签名以完成加密,并将加密后的hap包安装到移动终端后运行时,执行被加密的方法;执行被加密方法中注入的虚拟机解析器引擎库入口调用,基于虚拟机解析器引擎库根据当前加密方法id查找执行所述数据文件保存的自定义指令数据;基于虚拟机解析器引擎库执行完自定义指令后返回执行结果,被加密方法返回虚拟机解析器引擎库的执行结果,完成整个加密方法的执行。本发明通过对dex格式代码文件的二进制指令进行提取解析,并将指令替换为加密工具随机生成的自定义指令,在安装运行虚拟化加密后的hap相关代码时,通过虚拟机指令解析器引擎执行自定义指令,加密后的指令在内存中始终保持密文状态,整个过程无需对指令进行解密,相比传统的加密方案更加安全,能够有效的对抗传统的加密存在内存dump明文的风险,丰富了鸿蒙系统的安全生态。
[0088]
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,所述程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。
[0089]
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1