CN112287306B - 一种应用程序安装包的保护方法、装置及计算机可读存储介质 - Google Patents

一种应用程序安装包的保护方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN112287306B
CN112287306B CN202011182400.0A CN202011182400A CN112287306B CN 112287306 B CN112287306 B CN 112287306B CN 202011182400 A CN202011182400 A CN 202011182400A CN 112287306 B CN112287306 B CN 112287306B
Authority
CN
China
Prior art keywords
protected
instruction
file
executable file
virtual machine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011182400.0A
Other languages
English (en)
Other versions
CN112287306A (zh
Inventor
陈玉成
刘旭
殷涛
蔡水捷
陈玉玲
周嘉坤
陈思远
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Unionpay Co Ltd
Original Assignee
China Unionpay Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Unionpay Co Ltd filed Critical China Unionpay Co Ltd
Priority to CN202011182400.0A priority Critical patent/CN112287306B/zh
Publication of CN112287306A publication Critical patent/CN112287306A/zh
Application granted granted Critical
Publication of CN112287306B publication Critical patent/CN112287306B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供了一种应用程序安装包的保护方法、装置、系统及计算机可读存储介质,该方法包括:获取待保护的应用程序安装包的可执行文件;在可执行文件中添加工具类,工具类用于定义至少一个中间方法的信息;从可执行文件中依次抽取待保护方法,根据依次抽取的待保护方法生成中间虚拟机指令;在可执行文件中,使用中间虚拟机指令对待保护方法的真实调用指令进行指令替换。利用上述方法,指令抽取、指令替换均在原可执行文件上实现,无需重构原可执行文件,算法实现相对简单。此外,适用于大量抽取方法的情况,启动速度不受抽取方法数量的影响。

Description

一种应用程序安装包的保护方法、装置及计算机可读存储 介质
技术领域
本发明属于计算机领域,具体涉及一种应用程序安装包的保护方法、装置及计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
众所周知,Android系统是一种基于Linux的自由及开放源代码的操作系统,当在Android系统中安装应用程序时,可以通过将Android安装包(Android Package,简称APK)文件直接传送到Android模拟器或Android手机中执行即可实现安装,每个APK文件都包括有DEX文件(Dalvik虚拟机中的可执行文件),即Android Dalvik执行程序。DEX文件很容易被逆向分析和破解得到中间文件(如smali文件)或源文件,从而导致应用被恶意打包或者代码中的关键逻辑被恶意篡改,严重影响了Android应用程序的保护。
为了对抗上述风险,Android应用程序通过不断改进的多代加固技术来增强对App的安全防护。随着逆向技术的发展,目前,大多采用虚机加固(Virtual Machine Protect,VMP)技术来保护Android上的应用程序(Application,APP。DEX-VMP加固技术是指将方法的虚拟机指令转换成等价的自定义指令,将函数原指令替换成自定义虚拟机的调用入口指令,再将函数参数通过VMP入口传入到自定义虚拟机中执行,自定义虚拟机解释执行自定义指令,其中,提取dex文件中的方法的虚拟机指令是VMP加固的重要步骤。
然而,现有DEX-VMP加固技术中,在大量抽取dex文件中的方法时,一种抽取方案是通过在native层自定义虚拟机指令解释器,解释执行虚拟机指令,从而达到代码隐藏的目的,这样每抽取一个方法,需要动态注册一个native方法,当抽取的方法数量较多时,会导致大量的native方法动态注册,导致加固后的App启动较慢,影响用户体验。此外,另外一种方案是在原Dex上完成指令抽取之后重新构造Dex,在新Dex上完成指令替换,这样需要重构dex文件,从而导致算法相对复杂。
因此,亟需提供一种算法相对简单且不影响应用启动速度的VMP加固方案。
发明内容
针对上述现有技术中存在的问题,提出了一种应用程序安装包的保护方法、装置及计算机可读存储介质,利用这种方法、装置及计算机可读存储介质,能够解决上述问题。
本发明提供了以下方案。
第一方面,提供一种应用程序安装包的保护方法,包括:获取待保护的应用程序安装包的可执行文件;在可执行文件中添加工具类,工具类用于定义至少一个中间方法的信息;从可执行文件中依次抽取待保护方法,根据依次抽取的待保护方法生成中间虚拟机指令;在可执行文件中,使用中间虚拟机指令对待保护方法的真实调用指令进行指令替换。
在一实施例中,应用程序安装包为基于安卓平台的应用程序安装包APK;可执行文件为dex文件。
在一实施例中,在可执行文件中添加工具类,包括:获取java语言的工具类,根据工具类生成第一smali文件;将可执行文件转换为第二smali文件;将第一smali文件添加至第二smali文件,并重新生成可执行文件。
在一实施例中,从可执行文件中依次抽取待保护方法,包括:解析可执行文件;基于待保护方法白名单遍历解析后的可执行文件,并依次抽取待保护方法。
在一实施例中,还包括:基于基本三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,包括:构造对应于待保护方法的中间方法名,根据中间方法名调用工具类中定义的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,基本三元组包括方法的返回类型、参数列表和方法属性,基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,还包括:基于强三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,包括:构造对应于待保护方法的中间方法名,并对中间方法名的返回类型和参数类型进行转换,调用工具类中具有相同返回类型的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,强三元组包括转换后的返回类型、参数列表和方法属性,强三元组机制用于建立具有在转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,对返回类型进行转换包括:将类类型全部转成Object类型,将基本数组类型转成Object类型,基本类型保持不变;对参数列表类型进行转换包括:将类类型全部转成Object类型,基本类型保持不变。
在一实施例中,使用中间虚拟机指令替换待保护方法的真实调用指令,还包括:解析可执行文件,从解析后的可执行文件中依次抽取待保护方法;在可执行文件中,对每次抽取的待保护方法执行指令替换和指令修正;在抽取完毕之后,更新可执行文件的签名和文件校验码。
在一实施例中,对待保护方法执行指令替换和指令修正,包括:对待保护方法进行指令索引修正和mVmpID修正;利用生成的中间虚拟机指令替换可执行文件中抽取的待保护方法的真实调用指令,并将多余指令部分置零;对进行指令替换之后的待保护方法进行代码寄存器修正。
第二方面,提供一种应用程序安装包的保护装置,包括:获取模块,用于获取待保护的应用程序安装包的可执行文件;预处理模块,用于在可执行文件中添加工具类,工具类用于定义至少一个中间方法的信息;指令生成模块,用于从可执行文件中依次抽取待保护方法,根据依次抽取的待保护方法生成中间虚拟机指令;指令替换模块,用于在可执行文件中,使用中间虚拟机指令对待保护方法的真实调用指令进行指令替换。
在一实施例中,应用程序安装包为基于安卓平台的应用程序安装包APK;可执行文件为dex文件。
在一实施例中,预处理模块,还用于:获取java语言的工具类,根据工具类生成第一smali文件;将可执行文件转换为第二smali文件;将第一smali文件添加至第二smali文件,并重新生成可执行文件。
在一实施例中,指令生成模块,还用于:解析可执行文件;基于待保护方法白名单遍历解析后的可执行文件,并依次抽取待保护方法。
在一实施例中,指令生成模块,还用于:基于基本三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,还用于执行:构造对应于待保护方法的中间方法名,根据中间方法名调用工具类中定义的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,基本三元组包括方法的返回类型、参数列表和方法属性,基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,指令生成模块,还用于:基于强三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,还用于执行:构造对应于待保护方法的中间方法名,并对中间方法名的返回类型和参数类型进行转换,调用工具类中具有相同返回类型的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,强三元组包括转换后的返回类型、参数列表和方法属性,强三元组机制用于建立具有在转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,指令生成模块,还用于:对返回类型进行转换包括:将类类型全部转成Object类型,将基本数组类型转成Object类型,基本类型保持不变;对参数列表类型进行转换包括:将类类型全部转成Object类型,基本类型保持不变。
在一实施例中,指令替换模块,还用于:解析可执行文件,从解析后的可执行文件中依次抽取待保护方法;在可执行文件中,对每次抽取的待保护方法执行指令替换和指令修正;在抽取完毕之后,更新可执行文件的签名和文件校验码。
在一实施例中,指令替换模块,还用于:对待保护方法进行指令索引修正和mVmpID修正;利用生成的中间虚拟机指令替换可执行文件中抽取的待保护方法的真实调用指令,并将多余指令部分置零;对进行指令替换之后的待保护方法进行代码寄存器修正。
第三方面,提供一种应用程序安装包的保护装置,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行:如第一方面的方法。
第四方面,提供一种计算机可读存储介质,计算机可读存储介质存储有程序,当程序被多核处理器执行时,使得多核处理器执行如第一方面的方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本实施例中,指令抽取、指令替换均在原可执行文件上实现,无需重构原可执行文件,算法实现相对简单。此外,适用于大量抽取方法的情况,启动速度不受抽取方法数量的影响。
应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举例说明本发明的具体实施方式。
附图说明
通过阅读下文的示例性实施例的详细描述,本领域普通技术人员将明白本文所述的优点和益处以及其他优点和益处。附图仅用于示出示例性实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的标号表示相同的部件。在附图中:
图1为根据本发明一实施例的应用程序安装包的保护方法的流程示意图;
图2为根据本发明一实施例的指令生成步骤的流程示意图;
图3为根据本发明又一实施例的指令替换步骤的流程示意图;
图4为根据本发明一实施例的应用程序安装包的保护装置的结构示意图;
图5为根据本发明另一实施例的应用程序安装包的保护装置的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
在本发明中,应理解,诸如“包括”或“具有”等术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不旨在排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在的可能性。
另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供一种应用程序安装包的保护方法,下面,首先对所述方法的发明构思进行介绍。
本发明实施例提供一种应用程序安装包的保护方法,其基于指令替换实现DexVMP加固。具体而言,本方案通过在应用程序的原可执行文件(例如,dex文件)中添加工具类、根据抽取的待保护方法生成中间虚拟机指令,并使用中间虚拟机指令替换待保护方法中的指令、最后进行指令修正,从而完成对应用程序安装包的Dex VMP加固实现。由于本公开中指令抽取、指令替换均在原可执行文件上实现,无需重构原可执行文件,算法实现相对简单。此外,适用于大量抽取方法的情况,启动速度不受抽取方法数量的影响。本领域技术人员可以理解,所描述的应用场景仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受任何限制。在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
图1为根据本申请一实施例的应用程序安装包的保护方法100的流程示意图,用于完成对应用程序安装包的Dex VMP加固实现,在该流程中,从设备角度而言,执行主体可以是一个或者多个电子设备;从程序角度而言,执行主体相应地可以是搭载于这些电子设备上的程序。
如图1所示,该方法可以包括:
101、获取待保护的应用程序安装包的可执行文件;
在一个实施例中,上述应用程序安装包为基于安卓平台的应用程序安装包APK;可执行文件为dex文件。
其中,本实施例可应用于Android系统,即上述应用程序安装包可以是基于安卓(Android)平台的应用程序安装包(APK,Android application package file),简称APK文件。APK文件其实是ZIP文件格式,但后缀名被修改为apk。
可执行文件包括Dex文件,Dex文件主要是APK中的classes.dex文件,即DalvikExecutable(Dalvik虚拟机可执行文件)。众所周知,Dalvik是用于Android平台的Java虚拟机。Dalvik虚拟机(Dalvik VM)是Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。可执行文件除了可以是扩展名为.dex的文件外,还可以是扩展名为.jar的文件。Android安装包中的JAR文件其实就是Dex文件,只不过其扩展名为.jar。
102、在可执行文件中添加工具类;
其中,上述工具类用于定义至少一个中间方法的信息。例如,以下给出了工具类的一种示例性代码:
在一实施例中,在可执行文件中添加工具类的流程可以具体包括:获取java语言的工具类,根据工具类生成第一smali文件;将可执行文件转换为第二smali文件;将第一smali文件添加至第二smali文件,并重新生成所述可执行文件。
其中,可以使用已知的第三方反汇编工具(例如Baksmali反汇编器)对待保护的可执行文件(DEX文件)进行反汇编处理,从而在反编译工程目录下生成一个smali文件夹,里面存放着所有反编译出的smali文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali文件。
103、从可执行文件中依次抽取待保护方法,根据依次抽取的待保护方法生成中间虚拟机指令;
在一实施例中,从所述可执行文件中依次抽取待保护方法可以包括:解析可执行文件;基于待保护方法白名单遍历解析后的所述可执行文件,并依次抽取所述待保护方法。其中,该待保护方法白名单中记载了可执行文件中所需要保护的全部方法。基于此,针对每次抽取的待保护方法,具体可以执行以下步骤:动态生成对应于被抽取的待保护方法的中间方法,并将该中间方法的java文件编译成Dex文件,进而生成中间虚拟机指令。
例如,以下给出了中间方法的java文件的示例性代码:
针对被抽取的待保护方法与中间方法的对应问题,现有方案中,被抽取的待保护方法和中间方法通常为一一对应关系,这样,当抽取数万个方法时,会导致中间方法的java文件方法数量超限,导致无法编译。换言之,这种方案仅适用于抽取少量方法的情况。
通过分析,可以发现以下规律:当方法的返回类型(returnType)、参数列表(params)、方法属性(isStatic)一致时,其中间方法实现是一样的,因此可以基于返回类型、参数列表、方法属性建立被抽取方法与中间方法的对应关系。
本公开针对如何解决被抽取的待保护方法与中间方法的对应问题,提出了以下解决方案:
(1)基本三元组方案
在一实施例中,提出基于基本三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令。具体可以包括:构造对应于所述待保护方法的中间方法名,根据所述中间方法名调用所述工具类中定义的中间方法;在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;
其中,基本三元组指方法的返回类型(returnType)、参数列表(params)、方法属性(isStatic)定义为基本三元组,记作:<returnType,istatic,paramsTypeList>;
基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系。本公开基于基本三元组机制建立被抽取的待保护方法与中间方法为多对一关系。
基本三元组基本解决了方法对应问题,但是其存在的问题是:对于App自定义的类类型,中间java文件无法引用,必须自行定义;在java语言中,方案一的多对一关系扩张的还不够,例如所有类类型均可转换成Object类型;
(2)强三元组方案
在一实施例中,提出基于强三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令。其中,具体可以包括:构造对应于所述待保护方法的中间方法名,并对所述中间方法名的返回类型和参数类型进行转换,调用所述工具类中具有相同返回类型的中间方法;在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;其中,强三元组包括转换后的返回类型、参数列表和方法属性,所述强三元组机制用于建立具有在所述转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
换言之,利用强三元组机制对方法返回类型、参数列表进行进一步转换,以增强被抽取方法和中间方法的多对一关系。参见图2所示的流程图,示出一种指令生成的示意流程图,其中采用强三元组机制。
在一实施例中,上述转换规则包括如下:(a)返回类型转换规则:1、类类型全部转成Object类型,例如ArrayList->String,File[]->String,TestC->String,TestC[]->String;2、基本数组类型转成Object:byte[],char[],boolean[],short[],int[],float[],double[],long[];3、基本类型保持不变:byte,char,boolean,short,int,float,double,long。(b)参数列表类型转换规则:1、类类型全部转成Object,如ArrayList->Object,File[]->Object,TestC->Object,2、其余类型保持不变。
104、在可执行文件中,使用中间虚拟机指令对待保护方法的真实调用指令进行指令替换。
在一实施例中,使用所述中间虚拟机指令替换所述待保护方法的真实调用指令,还可以包括:解析所述可执行文件,从解析后的所述可执行文件中依次抽取所述待保护方法;在所述可执行文件中,对每次抽取的所述待保护方法执行指令替换和指令修正;在所述抽取完毕之后,更新所述可执行文件的签名(signature)和文件校验码(checksum)。由此可实现在原可执行文件上替换被抽取的待保护方法,完成对可执行文件的VMP抽取。
在一实施例中,对所述待保护方法执行指令替换和指令修正,包括:对所述待保护方法进行指令索引修正和mVmpID修正;利用生成的所述中间虚拟机指令替换所述可执行文件中抽取的所述待保护方法的真实调用指令,并将多余指令部分置零;对进行指令替换之后的所述待保护方法进行代码寄存器修正。参见图3,示出了一种指令替换的示意性流程图。
其中,针对指令索引修正,每一个类类型、方法类型在可执行文件中是通过索引ID进行查找的,因此在指令替换的过程中需要对索引ID进行修正。
例如,以下示出了指令修正的代码示例,其中,在以下算法中,insnses指中间方法的指令,Dex指被抽取的Apk Dex。
针对mVmpID修正,其中,mVmpID指当待保护方法是第几个被抽取的方法。由于“指令生成”模块传递的mVmpID为固定值,因此需要对mVmpID进行修正。
针对代码寄存器修正,其中,在Dex文件中,一个方法通常包含一个代码(code),一个代码通常包含该方法的真实指令,因此需要将代码中的寄存器信息如registers_size、ins_size、outs_size、try_size、debug_info_off、insnsSize修正成中间方法中相对应的值。
基于相同的技术构思,本发明实施例还提供一种应用程序安装包的保护装置,用于执行上述任一实施例所提供的应用程序安装包的保护方法。图4为本发明实施例提供的一种应用程序安装包的保护装置的结构示意图。
如图4所示,装置400包括:
获取模块401,用于获取待保护的应用程序安装包的可执行文件;
预处理模块402,用于在可执行文件中添加工具类,工具类用于定义至少一个中间方法的信息;
指令生成模块403,用于从可执行文件中依次抽取待保护方法,根据依次抽取的待保护方法生成中间虚拟机指令;
指令替换模块404,用于在可执行文件中,使用中间虚拟机指令对待保护方法的真实调用指令进行指令替换。
在一实施例中,应用程序安装包为基于安卓平台的应用程序安装包APK;可执行文件为dex文件。
在一实施例中,预处理模块,还用于:获取java语言的工具类,根据工具类生成第一smali文件;将可执行文件转换为第二smali文件;将第一smali文件添加至第二smali文件,并重新生成可执行文件。
在一实施例中,指令生成模块,还用于:解析可执行文件;基于待保护方法白名单遍历解析后的可执行文件,并依次抽取待保护方法。
在一实施例中,指令生成模块,还用于:基于基本三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,还用于执行:构造对应于待保护方法的中间方法名,根据中间方法名调用工具类中定义的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,基本三元组包括方法的返回类型、参数列表和方法属性,基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,指令生成模块,还用于:基于强三元组机制并根据抽取的待保护方法生成中间虚拟机指令,其中,还用于执行:构造对应于待保护方法的中间方法名,并对中间方法名的返回类型和参数类型进行转换,调用工具类中具有相同返回类型的中间方法;在抽取完毕之后,将中间方法的java文件编译为dex文件,作为用于替换待保护方法的真实调用指令的中间虚拟机指令;其中,强三元组包括转换后的返回类型、参数列表和方法属性,强三元组机制用于建立具有在转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
在一实施例中,指令生成模块,还用于:对返回类型进行转换包括:将类类型全部转成Object类型,将基本数组类型转成Object类型,基本类型保持不变;对参数列表类型进行转换包括:将类类型全部转成Object类型,基本类型保持不变。
在一实施例中,指令替换模块,还用于:解析可执行文件,从解析后的可执行文件中依次抽取待保护方法;在可执行文件中,对每次抽取的待保护方法执行指令替换和指令修正;在抽取完毕之后,更新可执行文件的签名和文件校验码。
在一实施例中,指令替换模块,还用于:对待保护方法进行指令索引修正和mVmpID修正;利用生成的中间虚拟机指令替换可执行文件中抽取的待保护方法的真实调用指令,并将多余指令部分置零;对进行指令替换之后的待保护方法进行代码寄存器修正。
需要说明的是,本申请实施例中的装置可以实现前述方法的实施例的各个过程,并达到相同的效果和功能,这里不再赘述。
图5为根据本申请一实施例的应用程序安装包的保护装置,用于执行图1所示出的应用程序安装包的保护方法,该装置包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述实施例所述的方法。
根据本申请的一些实施例,提供了应用程序安装包的保护方法的非易失性计算机存储介质,其上存储有计算机可执行指令,该计算机可执行指令设置为在由处理器运行时执行:上述实施例所述的方法。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备和计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以其描述进行了简化,相关之处可参见方法实施例的部分说明即可。
本申请实施例提供的装置、设备和计算机可读存储介质与方法是一一对应的,因此,装置、设备和计算机可读存储介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述装置、设备和计算机可读存储介质的有益技术效果。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (16)

1.一种应用程序安装包的保护方法,其特征在于,包括:
获取待保护的应用程序安装包的可执行文件;
在所述可执行文件中添加工具类,所述工具类用于定义至少一个中间方法的信息;
从所述可执行文件中依次抽取待保护方法,根据依次抽取的所述待保护方法生成中间虚拟机指令;
在所述可执行文件中,使用所述中间虚拟机指令对所述待保护方法的真实调用指令进行指令替换;
基于基本三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令,或基于强三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令;
所述基于基本三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令,包括:
构造对应于所述待保护方法的中间方法名,根据所述中间方法名调用所述工具类中定义的中间方法;
在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;
其中,基本三元组包括方法的返回类型、参数列表和方法属性,所述基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系;
所述基于强三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令,包括:
构造对应于所述待保护方法的中间方法名,并对所述中间方法名的返回类型和参数类型进行转换,调用所述工具类中具有相同返回类型的中间方法;
在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;
其中,强三元组包括转换后的返回类型、参数列表和方法属性,所述强三元组机制用于建立具有在所述转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
2.根据权利要求1所述的方法,其特征在于,所述应用程序安装包为基于安卓平台的应用程序安装包APK;所述可执行文件为dex文件。
3.根据权利要求2所述的方法,其特征在于,在所述可执行文件中添加工具类,包括:
获取java语言的工具类,根据所述工具类生成第一smali文件;
将所述可执行文件转换为第二smali文件;
将所述第一smali文件添加至所述第二smali文件,并重新生成所述可执行文件。
4.根据权利要求1所述的方法,其特征在于,从所述可执行文件中依次抽取待保护方法,包括:
解析所述可执行文件;
基于待保护方法白名单遍历解析后的所述可执行文件,并依次抽取所述待保护方法。
5.根据权利要求1所述的方法,其特征在于,
对所述返回类型进行转换包括:将类类型全部转成Object类型,将基本数组类型转成Object类型,基本类型保持不变;
对所述参数列表类型进行转换包括:将类类型全部转成Object类型,基本类型保持不变。
6.根据权利要求1所述的方法,其特征在于,使用所述中间虚拟机指令替换所述待保护方法的真实调用指令,还包括:
解析所述可执行文件,从解析后的所述可执行文件中依次抽取所述待保护方法;
在所述可执行文件中,对每次抽取的所述待保护方法执行指令替换和指令修正;
在所述抽取完毕之后,更新所述可执行文件的签名和文件校验码。
7.根据权利要求6所述的方法,其特征在于,对所述待保护方法执行指令替换和指令修正,包括:
对所述待保护方法进行指令索引修正和mVmpID修正;
利用生成的所述中间虚拟机指令替换所述可执行文件中抽取的所述待保护方法的真实调用指令,并将多余指令部分置零;
对进行指令替换之后的所述待保护方法进行代码寄存器修正。
8.一种应用程序安装包的保护装置,其特征在于,包括:
获取模块,用于获取待保护的应用程序安装包的可执行文件;
预处理模块,用于在所述可执行文件中添加工具类,所述工具类用于定义至少一个中间方法的信息;
指令生成模块,用于从所述可执行文件中依次抽取待保护方法,根据依次抽取的所述待保护方法生成中间虚拟机指令;
指令替换模块,用于在所述可执行文件中,使用所述中间虚拟机指令对所述待保护方法的真实调用指令进行指令替换;
所述指令生成模块,还用于:基于基本三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令,或基于强三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令;
所述指令生成模块,用于基于基本三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令时,还用于执行:
构造对应于所述待保护方法的中间方法名,根据所述中间方法名调用所述工具类中定义的中间方法;
在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;
其中,基本三元组包括方法的返回类型、参数列表和方法属性,所述基本三元组机制用于建立返回类型、参数列表和方法属性相同的多个不同待保护方法与同一中间方法之间的多对一对应关系;
所述指令生成模块,用于基于强三元组机制并根据抽取的所述待保护方法生成中间虚拟机指令时,还用于执行:
构造对应于所述待保护方法的中间方法名,并对所述中间方法名的返回类型和参数类型进行转换,调用所述工具类中具有相同返回类型的中间方法;
在所述抽取完毕之后,将所述中间方法的java文件编译为dex文件,作为用于替换所述待保护方法的真实调用指令的中间虚拟机指令;
其中,强三元组包括转换后的返回类型、参数列表和方法属性,所述强三元组机制用于建立具有在所述转换后相同的返回类型、参数列表和方法属性的多个不同待保护方法与同一中间方法之间的多对一对应关系。
9.根据权利要求8所述的装置,其特征在于,所述应用程序安装包为基于安卓平台的应用程序安装包APK;所述可执行文件为dex文件。
10.根据权利要求9所述的装置,其特征在于,所述预处理模块,还用于:
获取java语言的工具类,根据所述工具类生成第一smali文件;
将所述可执行文件转换为第二smali文件;
将所述第一smali文件添加至所述第二smali文件,并重新生成所述可执行文件。
11.根据权利要求8所述的装置,其特征在于,所述指令生成模块,还用于:
解析所述可执行文件;
基于待保护方法白名单遍历解析后的所述可执行文件,并依次抽取所述待保护方法。
12.根据权利要求8所述的装置,其特征在于,所述指令生成模块,还用于:
对所述返回类型进行转换包括:将类类型全部转成Object类型,将基本数组类型转成Object类型,基本类型保持不变;
对所述参数列表类型进行转换包括:将类类型全部转成Object类型,基本类型保持不变。
13.根据权利要求8所述的装置,其特征在于,所述指令替换模块,还用于:
解析所述可执行文件,从解析后的所述可执行文件中依次抽取所述待保护方法;
在所述可执行文件中,对每次抽取的所述待保护方法执行指令替换和指令修正;
在所述抽取完毕之后,更新所述可执行文件的签名和文件校验码。
14.根据权利要求13所述的装置,其特征在于,所述指令替换模块,还用于:
对所述待保护方法进行指令索引修正和mVmpID修正;
利用生成的所述中间虚拟机指令替换所述可执行文件中抽取的所述待保护方法的真实调用指令,并将多余指令部分置零;
对进行指令替换之后的所述待保护方法进行代码寄存器修正。
15.一种应用程序安装包的保护装置,其特征在于,包括:
至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行:如权利要求1-7中任意一项所述的方法。
16.一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被多核处理器执行时,使得所述多核处理器执行如权利要求1-7中任一项所述的方法。
CN202011182400.0A 2020-10-29 2020-10-29 一种应用程序安装包的保护方法、装置及计算机可读存储介质 Active CN112287306B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011182400.0A CN112287306B (zh) 2020-10-29 2020-10-29 一种应用程序安装包的保护方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011182400.0A CN112287306B (zh) 2020-10-29 2020-10-29 一种应用程序安装包的保护方法、装置及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN112287306A CN112287306A (zh) 2021-01-29
CN112287306B true CN112287306B (zh) 2024-04-26

Family

ID=74352980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011182400.0A Active CN112287306B (zh) 2020-10-29 2020-10-29 一种应用程序安装包的保护方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN112287306B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103218549A (zh) * 2012-01-19 2013-07-24 阿里巴巴集团控股有限公司 一种Java源代码加解密的方法及装置
CN104866734A (zh) * 2014-02-25 2015-08-26 北京娜迦信息科技发展有限公司 一种dex文件的保护方法及装置
CN107577925A (zh) * 2017-08-11 2018-01-12 西北大学 基于双重ARM指令虚拟的Android应用程序保护方法
CN107729725A (zh) * 2017-10-09 2018-02-23 南京南瑞集团公司 一种基于虚拟机指令修改的Android应用加固系统及方法
CN108573142A (zh) * 2017-03-10 2018-09-25 中移(杭州)信息技术有限公司 一种实现hook的方法及装置
CN108681457A (zh) * 2018-05-11 2018-10-19 西北大学 基于代码下沉与残码解释的Android应用程序保护方法
CN108875321A (zh) * 2017-05-09 2018-11-23 中移(杭州)信息技术有限公司 一种指令集的生成方法、装置和电子设备
CN109189470A (zh) * 2018-08-21 2019-01-11 北京奇虎科技有限公司 代码加固方法及装置
CN110245467A (zh) * 2019-05-13 2019-09-17 西北大学 基于Dex2C与LLVM的Android应用程序保护方法
CN110348206A (zh) * 2019-07-11 2019-10-18 网易(杭州)网络有限公司 应用于安卓安装包apk的保护方法、介质、装置和计算设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10635420B2 (en) * 2016-07-12 2020-04-28 Oracle International Corporation Overriding a migrated method in an updated type

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103218549A (zh) * 2012-01-19 2013-07-24 阿里巴巴集团控股有限公司 一种Java源代码加解密的方法及装置
CN104866734A (zh) * 2014-02-25 2015-08-26 北京娜迦信息科技发展有限公司 一种dex文件的保护方法及装置
CN108573142A (zh) * 2017-03-10 2018-09-25 中移(杭州)信息技术有限公司 一种实现hook的方法及装置
CN108875321A (zh) * 2017-05-09 2018-11-23 中移(杭州)信息技术有限公司 一种指令集的生成方法、装置和电子设备
CN107577925A (zh) * 2017-08-11 2018-01-12 西北大学 基于双重ARM指令虚拟的Android应用程序保护方法
CN107729725A (zh) * 2017-10-09 2018-02-23 南京南瑞集团公司 一种基于虚拟机指令修改的Android应用加固系统及方法
CN108681457A (zh) * 2018-05-11 2018-10-19 西北大学 基于代码下沉与残码解释的Android应用程序保护方法
CN109189470A (zh) * 2018-08-21 2019-01-11 北京奇虎科技有限公司 代码加固方法及装置
CN110245467A (zh) * 2019-05-13 2019-09-17 西北大学 基于Dex2C与LLVM的Android应用程序保护方法
CN110348206A (zh) * 2019-07-11 2019-10-18 网易(杭州)网络有限公司 应用于安卓安装包apk的保护方法、介质、装置和计算设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Android系统应用程序DEX文件保护方法研究;袁晓筱;罗森林;杨鹏;;信息网络安全(第07期);全文 *
基于指令虚拟化的安卓本地代码加固方法;张晓寒等;《电子与信息学报》;全文 *

Also Published As

Publication number Publication date
CN112287306A (zh) 2021-01-29

Similar Documents

Publication Publication Date Title
CN109491695B (zh) 一种集成安卓应用的增量更新方法
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
CN106371940B (zh) 一种程序崩溃解决方法及装置
CN104793946B (zh) 基于云计算平台的应用部署方法和系统
CN111090433B (zh) 一种数据处理的方法、装置和存储介质
Kalysch et al. VMAttack: Deobfuscating virtualization-based packed binaries
CN109032631B (zh) 应用程序补丁包获取方法、装置、计算机设备及存储介质
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
US10248409B1 (en) Limiting the effects of source code patches on corresponding native-code patches
US10614227B2 (en) Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system
Romano et al. An empirical study of bugs in webassembly compilers
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
CN112835975A (zh) 一种在区块链中部署、更新、调用智能合约的方法
US9098355B2 (en) Method and apparatus for substituting compiler built-in helper functions with machine instructions
CN115756451A (zh) 一种多项目代码文件重用的方法、装置、设备、存储介质
CN103077011B (zh) 一种在JavaScript脚本语言中预生成机器码指令的方法和装置
Yuhala et al. Montsalvat: Intel SGX shielding for GraalVM native images
CN112287306B (zh) 一种应用程序安装包的保护方法、装置及计算机可读存储介质
CN110347416B (zh) 脚本的更新方法和装置
CN116841906A (zh) 智能合约的检测方法、装置及电子设备
JP5427802B2 (ja) プログラミング言語間でのライブラリ変換方法及びプログラム
CN112883374A (zh) 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统
Zhuykov et al. Augmenting JavaScript JIT with ahead-of-time compilation
Bao et al. DroidPro: An AOTC-based bytecode-hiding scheme for packing the android applications
CN114579135B (zh) 一种安装包生成方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant