CN111859316A - 应用程序的加固方法、装置、设备及存储介质 - Google Patents

应用程序的加固方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111859316A
CN111859316A CN202010502285.4A CN202010502285A CN111859316A CN 111859316 A CN111859316 A CN 111859316A CN 202010502285 A CN202010502285 A CN 202010502285A CN 111859316 A CN111859316 A CN 111859316A
Authority
CN
China
Prior art keywords
apk
reinforced
apk packet
packet
script command
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.)
Pending
Application number
CN202010502285.4A
Other languages
English (en)
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.)
Beijing Didi Infinity Technology and Development Co Ltd
Original Assignee
Beijing Didi Infinity Technology and Development 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 Beijing Didi Infinity Technology and Development Co Ltd filed Critical Beijing Didi Infinity Technology and Development Co Ltd
Priority to CN202010502285.4A priority Critical patent/CN111859316A/zh
Publication of CN111859316A publication Critical patent/CN111859316A/zh
Pending legal-status Critical Current

Links

Images

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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本申请提供了一种应用程序的加固方法、装置、设备及存储介质,涉及软件技术领域。其中,该方法通过获取待加固的APK包,根据待加固的APK包和预设脚本命令,输出加固后的APK包,预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作,如此,使得对于某待加固的APK包,通过该预设脚本命令的运行即可实现对待加固的APK包的加固处理,简化加固流程,实现加固过程自动化。

Description

应用程序的加固方法、装置、设备及存储介质
技术领域
本申请涉及软件技术领域,具体而言,涉及一种应用程序的加固方法、装置、设备及存储介质。
背景技术
随着移动应用的普及,对Android应用程序包(Android application package,APK)的业务逻辑保护也越来越受到重视。
现有的,对于APK的业务逻辑的保护主要通过混淆技术来实现对APK的加固,其中,混淆技术作为一种常用的加密方式,通过混淆技术可以把APK中具有具体含义的类名、变量名、方法名等转换成一到两个字符的字符串以此来增加APK被反编译的难度。
但现有的加固方法由于存在转换的过程,因此存在加固流程比较复杂的技术问题。
发明内容
有鉴于此,本申请的目的在于提供一种应用程序的加固方法、装置、设备及存储介质,能够解决现有技术中加固流程比较复杂的技术问题。
根据本申请的一个方面,提供一种电子设备,可以包括存储介质和与存储介质通信的处理器。存储介质存储有处理器可执行的机器可读指令。当电子设备运行时,处理器与存储介质之间通过总线通信,处理器执行所述机器可读指令,以执行以下操作:
一种应用程序的加固方法,包括:
获取待加固的APK包;
根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,所述预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
在一些实施例中,上述根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,包括:
响应于输出路径设置操作,根据所述待加固的APK包和预设脚本命令,在所述输出路径设置操作对应的输出路径下输出加固后的APK包。
在一些实施例中,预设脚本命令用于指示执行解压操作和加密操作,上述根据待加固的APK包和预设脚本命令,输出加固后的APK包,包括:
采用解压操作对应的第一脚本命令将待加固的APK包解压至预设路径下,生成解压后的APK包;
获取解压后的APK包中的dex文件;
采用加密操作对应的第二脚本命令对dex文件进行加密操作,获取加密后的APK包;
根据加密后的APK包,输出加固后的APK包。
在一些实施例中,预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作,上述根据加密后的APK包,输出加固后的APK包,包括:
采用压缩操作对应的第三脚本命令,对加密后的APK包进行压缩操作,获取压缩后的APK包;
采用对齐操作和签名操作对应的第四脚本命令,对压缩后的APK包进行对齐和签名操作,输出加固后的APK包。
可选地,上述方法还包括:
接收脚本选择指令;
根据所述脚本选择指令在多个预设备选脚本命令中选择预设脚本命令,所述预设备选脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
在一些实施例中,上述方法还包括:
向服务器发送所述加固后的APK包,所述加固后的APK包携带有APK包标识。
在一些实施例中,上述方法还包括:
获取所述加密操作对应的解密密钥;
根据所述解密密钥和所述加固后的APK包,获取解密后的dex文件;
根据所述解密后的dex文件,运行所述APK包对应的应用程序。
在一些实施例中,上述根据所述解密密钥和所述加固后的APK包,获取解密后的dex文件之后,还包括:
将所述解密后的dex文件存储至内存中预设指定目录下。
在一些实施例中,上述根据所述解密后的dex文件,运行所述APK包对应的应用程序,包括:
加载所述解密后的dex文件,生成对应的数组,所述数组包括至少一个类;
根据所述数组和反射机制,运行所述APK包对应的应用程序。
在一些实施例中,上述获取加密操作对应的解密密钥,包括:
向服务器发送携带有APK包标识的密钥获取请求,所述密钥获取请求用于请求获取所述加密操作对应的解密密钥;
接收服务器发送的所述加密操作对应的解密密钥。
在一些实施例中,上述方法还包括:
接收用户输入的预设脚本命令。
本申请的另一方面,提供一种应用程序的加固装置,包括:获取模块和输出模块;
所述获取模块,用于获取待加固的APK包;
所述输出模块,用于根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,所述预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
在一些实施例中,上述输出模块,具体用于响应于输出路径设置操作,根据所述待加固的APK包和预设脚本命令,在所述输出路径设置操作对应的输出路径下输出加固后的APK包。
在一些实施例中,预设脚本命令用于指示执行解压操作和加密操作,上述输出模块,具体用于采用所述解压操作对应的第一脚本命令将所述待加固的APK包解压至预设路径下,生成解压后的APK包;
获取所述解压后的APK包中的dex文件;
采用所述加密操作对应的第二脚本命令对所述dex文件进行加密操作,获取加密后的APK包;
根据所述加密后的APK包,输出加固后的APK包。
在一些实施例中,预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作,上述输出模块,具体用于采用所述压缩操作对应的第三脚本命令,对所述加密后的APK包进行压缩操作,获取压缩后的APK包;
采用所述对齐操作和签名操作对应的第四脚本命令,对所述压缩后的APK包进行对齐和签名操作,输出加固后的APK包。
在一些实施例中,上述装置还包括:选择模块,用于接收脚本选择指令;
根据所述脚本选择指令在多个预设备选脚本命令中选择所述预设脚本命令,所述预设备选脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
在一些实施例中,上述装置还包括:发送模块,用于向服务器发送所述加固后的APK包,所述加固后的APK包携带有APK包标识。
在一些实施例中,上述装置还包括:运行模块,用于获取所述加密操作对应的解密密钥;
根据所述解密密钥和所述加固后的APK包,获取解密后的dex文件;
根据所述解密后的dex文件,运行所述APK包对应的应用程序。
在一些实施例中,上述装置还包括:存储模块,用于将所述解密后的dex文件存储至内存中预设指定目录下。
在一些实施例中,上述运行模块,具体用于加载所述解密后的dex文件,生成对应的数组,所述数组包括至少一个类;
根据所述数组和反射机制,运行所述APK包对应的应用程序。
在一些实施例中,上述运行模块,具体用于向服务器发送携带有APK包标识的密钥获取请求,所述密钥获取请求用于请求获取所述加密操作对应的解密密钥;
接收服务器发送的所述加密操作对应的解密密钥。
在一些实施例中,上述装置还包括:输入模块,用于接收用户输入的预设脚本命令。
本申请的另一方面,提供计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如上述方法的步骤。
基于上述任一方面,本申请实施例所提供的应用程序的加固方法中,通过获取待加固的APK包,根据待加固的APK包和预设脚本命令,输出加固后的APK包,预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作,如此,使得对于某待加固的APK包,通过该预设脚本命令的运行即可实现对待加固的APK包的加固处理,简化加固流程,实现加固过程自动化。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例提供的一种加固系统的架构示意图;
图2示出了本申请实施例提供的一种电子设备的结构示意图;
图3示出了本申请实施例提供的一种应用程序的加固方法的流程示意图;
图4示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图;
图5示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图;
图6示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图;
图7示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图;
图8示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图;
图9示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图;
图10示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图;
图11示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图;
图12示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图;
图13示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图;
图14示出了本申请实施例提供的一种应用程序的加固装置的功能模块示意图;
图15示出了本申请实施例提供的另一种应用程序的加固装置的功能模块示意图;
图16示出了本申请实施例提供的又一种应用程序的加固装置的功能模块示意图;
图17示出了本申请实施例提供的另一种应用程序的加固装置的功能模块示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。对于本领域技术人员来说,在不脱离本申请的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例。
在介绍本申请实施例之前,以下,先对本申请实施例中的部分术语进行解释说明,以便本领域技术人员理解。
APK包:Android application package的缩写,即Android安装包,是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件,其对应的扩展名可以为.APK。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。一个APK文件内包含被编译的代码文件(.dex文件),文件资源(resources),原生资源文件(assets),证书(certificates),和清单文件(manifest file),对于一个APK包,可以将APK包直接传到Android设备(比如,手机,平板电脑等)中执行即可安装。
应用程序的加固:用于对应用程序进行保护,通过对应用程序所对应的APK包进行加固可以有效防止APP被逆向分析、反编译、二次打包、防止嵌入恶意代码等操作,提高应用程序的安全性。
dex文件:是DalvikVM executes的简称,即Android Dalvik执行程序,dex文件的作用是记录整个工程(通常是一个Android工程)的所有类文件的信息。比如,一个APK文件通常包含classes.dex:classes文件,classes.dex:classes文件为通过DEX编译后的文件格式,用于在Dalvik虚拟机上运行的主要代码部分。其中,dex文件里面包含了所有App代码,dex文件如果未做好保护,容易通过反编译可让源码完全暴露(比如,利用反编译工具可以获取java源码),可利用阅读源码来找到App的设计流程,通过对程序流程的了解将很容易对程序进行盗版、恶意篡改、恶意代码注入等危险行为。
反射机制:Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法,这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射机制的使用可以极大提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力;让程序创建和控制任何类的对象,无需提前硬编码目标类;能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法;使用反射可以避免将代码写死在框架中。
第三方应用:使用应用程序的加固方法的第三方使用者。
本申请的一个方面涉及一种应用程序的加固系统,该系统可以通过预设脚本命令即可实现对待加固的APK包的自动化加固处理,简化加固流程。
图1示出了本申请实施例提供的一种加固系统的架构示意图。如图1所示,该加固系统100可以包括服务器110、网络120、终端130和数据库140中的一种或多种。
在一些实施例中,服务器110可以是单个服务器,也可以是服务器组。服务器组可以是集中式的,也可以是分布式的(例如,服务器110可以是分布式系统)。在一些实施例中,服务器110相对于终端,可以是本地的、也可以是远程的。例如,服务器110可以经由网络120访问存储在终端130、或数据库140、或其任意组合中的信息和/或数据。作为另一示例,服务器110可以直接连接到终端130和数据库140中至少一个,以访问存储的信息和/或数据。在一些实施例中,服务器110可以在云平台上实现;仅作为示例,云平台可以包括私有云、公有云、混合云、社区云(community cloud)、分布式云、跨云(inter-cloud)、多云(multi-cloud)等,或者它们的任意组合。
在一些实施例中,服务器110可以包括处理器。处理器可以处理与服务请求有关的信息和/或数据,以执行本申请中描述的一个或多个功能。在一些实施例中,处理器可以包括一个或多个处理核(例如,单核处理器(S)或多核处理器(S))。仅作为举例,处理器可以包括中央处理单元(Central Processing Unit,CPU)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、专用指令集处理器(Application Specific Instruction-set Processor,ASIP)、图形处理单元(Graphics Processing Unit,GPU)、物理处理单元(Physics Processing Unit,PPU)、数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、可编程逻辑器件(Programmable Logic Device,PLD)、控制器、微控制器单元、简化指令集计算机(ReducedInstruction Set Computing,RISC)、或微处理器等,或其任意组合。
网络120可以用于信息和/或数据的交换。在一些实施例中,加固系统100中的一个或多个组件(例如,服务器110,终端130数据库140)可以向其他组件发送信息和/或数据。例如,服务器110可以经由网络120从终端130获取服务请求。在一些实施例中,网络120可以是任何类型的有线或者无线网络,或者是他们的结合。仅作为示例,网络120可以包括有线网络、无线网络、光纤网络、远程通信网络、内联网、因特网、局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、无线局域网(Wireless Local Area Networks,WLAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、公共电话交换网(Public Switched Telephone Network,PSTN)、蓝牙网络、ZigBee网络、或近场通信(Near Field Communication,NFC)网络等,或其任意组合。在一些实施例中,网络120可以包括一个或多个网络接入点。例如,网络120可以包括有线或无线网络接入点,例如基站和/或网络交换节点,加固系统100的一个或多个组件可以通过该接入点连接到网络120以交换数据和/或信息。
在一些实施例中,终端130可以包括移动设备、平板计算机、膝上型计算机、或机动车辆中的内置设备等,或其任意组合。在一些实施例中,机动车辆中的内置设备可以包括车载计算机、车载电视等。在一些实施例中,终端130可以是具有定位技术的设备,用于定位终端的位置。在一些实施例中,终端130可以将定位信息发送给服务器110。
数据库140可以存储数据和/或指令。在一些实施例中,数据库140可以存储从终端130获得的数据。在一些实施例中,数据库140可以存储在本申请中描述的示例性方法的数据和/或指令。在一些实施例中,数据库140可以包括大容量存储器、可移动存储器、易失性读写存储器、或只读存储器(Read-Only Memory,ROM)等,或其任意组合。作为举例,大容量存储器可以包括磁盘、光盘、固态驱动器等;可移动存储器可包括闪存驱动器、软盘、光盘、存储卡、zip磁盘、磁带等;易失性读写存储器可以包括随机存取存储器(Random AccessMemory,RAM);RAM可以包括动态RAM(Dynamic Random Access Memory,DRAM),双倍数据速率同步动态RAM(Double Date-Rate Synchronous RAM,DDR SDRAM);静态RAM(StaticRandom-Access Memory,SRAM),晶闸管RAM(Thyristor-Based Random Access Memory,T-RAM)和零电容器RAM(Zero-RAM)等。作为举例,ROM可以包括掩模ROM(Mask Read-OnlyMemory,MROM)、可编程ROM(Programmable Read-Only Memory,PROM)、可擦除可编程ROM(Programmable Erasable Read-only Memory,PEROM)、电可擦除可编程ROM(ElectricallyErasable Programmable read only memory,EEPROM)、光盘ROM(CD-ROM)、以及数字通用磁盘ROM等。在一些实施例中,数据库140可以在云平台上实现。仅作为示例,云平台可以包括私有云、公有云、混合云、社区云、分布式云、跨云、多云或者其它类似的等,或其任意组合。
在一些实施例中,数据库140可以连接到网络120以与加固系统100(例如,服务器110,终端130等)中的一个或多个组件通信。加固系统100中的一个或多个组件可以经由网络120访问存储在数据库140中的数据或指令。在一些实施例中,数据库140可以直接连接到加固系统100中的一个或多个组件(例如,服务器110,终端130等);或者,在一些实施例中,数据库140也可以是服务器110的一部分。
在一些实施例中,加固系统100中的一个或多个组件(例如,服务器110,终端130等)可以具有访问数据库140的权限。在一些实施例中,当满足一定条件时,加固系统100中的一个或多个组件可以读取和/或修改与终端130有关的信息。例如,服务器110可以在接收服务请求之后读取和/或修改一个或多个用户的信息。
图2示出了本申请实施例提供的一种电子设备的结构示意图,该电子设备可以是实现本申请思想的服务器、终端等。如图2所示,处理器220可以用于电子设备200上,并且用于执行本申请中的功能。
电子设备200可以是通用计算机或特殊用途的计算机,两者都可以用于实现本申请的应用程序的加固方法。本申请尽管仅示出了一个计算机,但是为了方便起见,可以在多个类似平台上以分布式方式实现本申请描述的功能,以均衡处理负载。
例如,电子设备200可以包括连接到网络的网络端口210、用于执行程序指令的一个或多个处理器220、通信总线230、和不同形式的存储介质240,例如,磁盘、ROM、或RAM,或其任意组合。示例性地,计算机平台还可以包括存储在ROM、RAM、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本申请的方法。电子设备200还包括计算机与其他输入输出设备(例如键盘、显示屏)之间的输入/输出(Input/Output,I/O)接口250。
为了便于说明,在电子设备200中仅描述了一个处理器。然而,应当注意,本申请中的电子设备200还可以包括多个处理器,因此本申请中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若电子设备200的处理器执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一处理器和第二处理器共同执行步骤A和B。
图3示出了本申请实施例提供的一种应用程序的加固方法的流程示意图,该方法的执行主体可以是前述终端,比如,计算机、处理器、移动终端等终端,其中涉及的应用程序也可以是任意终端上安装的应用程序。如图3所示,包括:
S101、获取待加固的APK包。
其中,待加固的APK包可以是任一需要进行加固的APK包,该APK包可以包括多个文件,该多个文件的文件类型可以相同,也可以是不同。可选地,待加固的APK包可以为进行压缩操作后的APK包,其对应的文件扩展名可以为.APK,但不以此为限。
S102、根据待加固的APK包和预设脚本命令,输出加固后的APK包,预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
其中,预设脚本命令可以用于指示对待加固的APK包进行解压操作、加密操作、压缩操作、对齐操作、签名操作中的一种或多种,本申请在此不作限定。预设脚本命令可以对应相应的脚本文件,该脚本文件可以包括解压操作、加密操作、压缩操作、对齐操作、签名操作中的一种或多种操作所对应的脚本程序,该脚本程序中可以预置好需要执行的操作以及执行的预设顺序。举例说明,对于一待加固的APK包进行加固时,可以通过运行该预设脚本命令对该待加固的APK包按照预设顺序进行解压、加密、压缩、签名等加固处理,如此,可以实现加固过程的自动化,简化加固流程。
当然,根据实际的应用过程,该预设脚本命令可以包括一个或多个,每个预设脚本命令可以用于执行解压、加密、压缩、签名中的多种组合,如此,可以使得在实际的加固过程,加固人员可以根据实际的场景需要选择相应的预设脚本命令进行执行,从而可以生成对应的加固后的APK包,提高用户体验。比如,预设脚本命令可以包括第一预设脚本命令和第二预设脚本命令,其中,第一预设脚本命令用于指示执行加密、压缩及签名操作,第二预设脚本命令用于指示执行解压、加密、压缩及签名操作,进而加固人员进行加固时,可以选择第一预设脚本命令或第二预设脚本命令对待加固的APK包进行加固,如此,可以提高加固方法的适用性,满足不同场景下的加固需求。
此外,需要说明的是,根据实际的应用场景,预设脚本命令也可以用于指示其他一些操作,比如,APK校验,属性检测等,并不限于上述的几种操作方式,本申请在此不作限定。
其中,为使可以理解本申请实施例,本申请在此对前述的有关术语进一步说明,上述脚本命令,可以理解为由一条条的文字命令组成,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。当然,本申请在此并不限定该预设脚本命令具体采用哪种脚本语言来实现,根据实际的应用场景,可以选择JavaScript、VBScript、ActionScript、MAX Script、PHP、SQL、Perl、Shell、python、Ruby、JavaFX、Lua、AutoIt等任意一种或多种脚本语言实现,本申请在此不作限定。
解压操作,即解压缩操作,通过解压操作可以将待加固的APK包恢复到压缩之前的状态,根据其之前的压缩方式,可以采用与该压缩方式对应的解压方式进行解压,本申请在此不作限定。比如,对于采用zip方式进行压缩的文件,对应地,可以采用相应的解压方式进行解压操作,当然,需要说明的是,对于待加固的APK包进行解压操作后,解压后的文件可以包至少一个,包括多个时,多个文件可以是相同类型的,也可以是不同类型的,本申请在此不作限定。
可选地,对于某待加固的APK包进行解压后,可以包括如下多个不同类型的文件:AndroidManifest.xml文件,该文件是每个APK应用程序都必须包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等信息;classes.dex文件,该文件是java源码编译后生成的java字节码文件,利用解析工具可以将其转换成java来加以阅读和理解;resources.arsc文件,编译后的二进制资源文件;META-INF目录文件,该文件下存放的是签名信息,可以包括有多个签名文件,用来保证APK包的完整性和系统的安全,在eclipse编译生成一个APK包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下,这就保证了APK包里的文件不能被随意替换。res目录文件,该文件用于存放资源文件,可以包括图片,字符串等;assets目录文件,可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。当然,需要说明的是,根据不同的待加固的APK包,每个待加固的APK包中包括的文件类型和文件个数可以不同,本申请在此不作限定。
加密操作,通过加密操作可以对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的“密文”,而在输入相应的解密密钥之后才能显示出原内容,当然,本申请实施例在此并不限定加密操作对应的具体加密算法,该加密算法可以基于对称式加密技术,当然,也可以是基于非对称式加密技术实现,本申请在此不作限定,根据实际的应用场景可以包括一种或多种加密算法。
压缩操作,为与前述解压操作对应的逆操作,可选地,实际加固过程中进行压缩操作时,该压缩操作所对应的压缩方式可以与前述解压操作对应的解压方式相对应,当然,也可以不同,本申请在此不作限定,根据实际的应用场景可以灵活选择,比如,可以选择对齐压缩的压缩方式进行。
对齐操作,即字节对齐操作,就是各种类型的数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,通过执行对齐操作可以减少CPU访问内存的次数。
签名操作,可以确保APK来源的真实性,以及防止APK被第三方篡改,通过对APK进行签名:在APK中写入一个“指纹”。指纹写入以后,APK中有任何修改,都会导致这个指纹无效,运行APK包的终端在安装APK进行签名校验时就会不通过,从而保证了安全性。其中,签名过程可以对应生成相关的签名信息,签名信息包括但不限于签名后生成的APK路径、待签名APK包的路径、别名、APK包所有者、应用程序的发布者、应用程序的有效期开始日期、应用程序的有效截止日期、证书指纹等。
综上所述,本申请实施例所提供的应用程序的加固方法,通过获取待加固的APK包,根据待加固的APK包和预设脚本命令,输出加固后的APK包,预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作,如此,使得对于某待加固的APK包,通过该预设脚本命令的运行即可实现对待加固的APK包的加固处理,简化加固流程,实现加固过程自动化。
此外,需要说明的是,本申请实施例所提供的应用程序的加固方法还大大降低了对第三方应用的侵入性,具有弱耦合的特点。
图4示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图。在一些实施例中,如图4所示,上述根据待加固的APK包和预设脚本命令,输出加固后的APK包,包括:
S201、响应于输出路径设置操作,根据待加固的APK包和预设脚本命令,在输出路径设置操作对应的输出路径下输出加固后的APK包。
输出路径设置操作可以用于设置加固后的APK包的输出路径,可选地,可以在预设脚本命令所对应的脚本文件中设置默认的输出路径,比如,D盘,又或者,可以在运行预设脚本命令时,指定某一输出路径,比如,D盘下的某文件夹内。当然,实际过程中,预设脚本命令所对应的脚本文件中也可以设置有默认的输出路径,实际在运行预设脚本命令时,可以重新指定某一输出路径,此时,可以以当前重新设置的输出路径为准,在该输出路径下输出加固后的APK包。当然,实际输出路径的设置方式并不以此为限,根据实际的应用场景可以包括多种设置方式,本申请在此不作限定,通过输出路径的设置,可以将加固后的APK包输出到特定的路径下,满足不同应用场景下用户的需要。
图5示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图。在一些实施例中,预设脚本命令用于指示执行解压操作和加密操作,如图5所示,上述根据待加固的APK包和预设脚本命令,输出加固后的APK包,可以包括:
S301、采用解压操作对应的第一脚本命令将待加固的APK包解压至预设路径下,生成解压后的APK包。
S302、获取解压后的APK包中的dex文件。
S303、采用加密操作对应的第二脚本命令对dex文件进行加密操作,获取加密后的APK包。
S304、根据加密后的APK包,输出加固后的APK包。
其中,预设脚本命令用于指示执行解压操作和加密操作时,该解压操作和加密操作可分别对应第一脚本命令和第二脚本命令,实际在进行加固时,可以先采用解压操作对应的第一脚本命令将待加固的APK包解压至预设路径下,生成解压后的APK包,然后获取该解压后的APK包中的dex文件,并采用加密操作对应的第二脚本命令对dex文件进行加密操作,获取加密后的APK包,后续则根据该加密后的APK包,输出加固后的APK包。
需要说明的是,上述预设路径可以是预设默认路径,或是解压过程中用户自行配置的路径等,本申请在此不作限定,根据实际的应用场景可以有所不同。另外,对于解压操作、加密操作的相关内容可参见前述的有关说明,本申请在此不再赘述。
图6示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图。在一些实施例中,预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作,如图6所示,上述根据加密后的APK包,输出加固后的APK包,可以包括:
S401、采用压缩操作对应的第三脚本命令,对加密后的APK包进行压缩操作,获取压缩后的APK包。
S402、采用对齐操作和签名操作对应的第四脚本命令,对压缩后的APK包进行对齐和签名操作,输出加固后的APK包。
其中,预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作时,压缩操作可对应第三脚本命令,而对齐操作和签名操作可以对应第四脚本命令,则基于上述所获取到的加密后的APK包,可以先采用第三脚本命令对加密后的APK包进行压缩操作,获取压缩后的APK包,然后再采用第四脚本命令,对压缩后的APK包进行对齐和签名操作,进而可以输出加固后的APK包,实现对待加固的APK包的加固操作。另外,对于压缩操作、对齐操作和签名操作的相关内容可参见前述的有关说明,本申请在此不再赘述。
图7示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图。可选地,为了使得在加固过程中,用户可以进行预设脚本命令的选择,从而可以执行特定的操作,如图7所示,上述方法还包括:
S501、接收脚本选择指令。
S502、根据脚本选择指令在多个预设备选脚本命令中选择预设脚本命令,预设备选脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
其中,多个预设备选脚本命令可以为事先配置好的脚本命令,该预设备选脚本命令可以用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作,则实际在加固过程中,用户可以输入脚本选择指令,从而可以根据该脚本选择指令从多个预设备选脚本命令中选择某一预设备选脚本作为预设脚本命令进行操作,使得可以根据用户的加固需求执行特定的加固操作,提高加固方法的适用性。
图8示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图。在一些实施例中,如图8所示,上述方法还包括:
S601、向服务器发送加固后的APK包,加固后的APK包携带有APK包标识。
需要说明的是,上述在生成加固后的APK包后,那么终端也可以将该加固后的APK包发送给服务器,服务器则接收该加固后的APK包并进行存储,后续,若有其他终端需要获取该加固后的APK包时,那么可以通过向服务器请求获取,如此,可以实现对待加固的APK包一次加固,而在实际应用过程中,可以多次获取,使得获取方式多样性。可选地,每一加固后的APK包可以对应一APK包标识,便于其他终端可以有针对性的请求获取某加固后的APK包。
当然,需要说明的是,服务器可以接收多个加固后的APK包,也即该多个加固后的APK包可以存储于同一服务器,如此,可以充分利用服务器资源。
可选地,获取加固后的APK包的过程可参见下述的获取过程,可以包括:
向服务器发送携带有APK包标识的APK包获取请求,所述获取请求用于请求获取APK包标识对应的加固后的APK包;接收服务器发送的APK包标识对应的加固后的APK包。
举例说明,某终端需要获取某APK包标识对应的加固后的APK包时,该终端可以向与其交互的服务器发送携带有APK包标识的APK包获取请求,以请求获取相应的APK包,而服务器在接收到该获取请求后,可以根据该APK包标识查找对应的加固后的APK包,并将其发送给与其交互的终端,如此,可以使得终端可以随时随地获取到加固后的APK包,使得获取方式多样性,提高用户获取加固后的APK包的体验。
图9示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图。在一些实施例中,如图9所示,上述方法还包括:
S701、获取加密操作对应的解密密钥。
当然,需要说明的是,若对待加固的APK包进行加固处理时还执行了加密操作,那么实际在运行APK包对应的应用程序时,还应对该加固后的APK包进行解密操作,解密密钥则为前述加密操作所对应的密钥。
当然,需要说明的是,解密密钥的获取可以通过前述加固过程所对应的终端请求获取,比如,运行APK包的终端可以向前述进行加固处理的终端或服务器发送解密密钥获取请求,以请求获取加密操作对应的解密密钥,而进行加固处理的终端或服务器在接收到该解密密钥获取请求后,可以先对该运行APK包的终端进行身份验证,若验证成功,则将该解密密钥发送该运行APK包的终端,若验证失败,则可以不发送。
当然,需要说明的是,实际在发送解密密钥时,也可以对该解密密钥的权限进行限定,比如,禁止转发等,如此,可以避免该解密密钥被其他非法用户获取,进一步提高加固后的APK包的安全性。当然,实际应用场景中并不以此为限,也可以通过其他方式获取,比如,加固过程可以采用预设加密算法对待加固的APK包进行加密运算,该预设加密算法可以对应一预设解密密钥,那么,运行APK包的终端可以直接获取到该预设解密密钥。
当然,需要说明的是,前述对待加固的APK包进行加固处理的终端设备与后续运行APK包对应的应用程序的终端设备可以为同一终端设备,也可以为不同终端设备。可选地,若为同一终端设备时,那么可以在本地获取解密密钥,如此,可以减少解密密钥的获取时间,提高运行效率;若为不同的终端设备,比如,进行加固处理的终端设备可以为第一终端,而运行APK包对应的应用程序的终端设备可以为第二终端,可选地,第一终端可以将加密操作对应的解密密钥发送给服务器进行存储,第二终端则通过服务器获取,如此,可以提高解密密钥存储的安全性,但实际获取方式并不以此为限,根据实际的应用场景可以灵活调节。
S702、根据解密密钥和加固后的APK包,获取解密后的dex文件。
在获取到该解密密钥后,那么可以针对加固后的APK包进行解密,通过解密操作以获取到解密后的dex文件,如此,使得非法用户在没有解密密钥的情况下将无法获取到加固后的APK包中的dex文件,可以防止非法用户通过反编译使得App源码暴露,避免对App程序进行盗版、恶意篡改、恶意代码注入等危险行为,实现对待加固的APK包的加固处理。
S703、根据解密后的dex文件,运行APK包对应的应用程序。
如上,在获取到解密后的dex文件后,那么可以运行APK包对应的应用程序,无缝切换到第三方应用,提高用户体验。
图10示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图。在一些实施例中,如图10所示,上述根据解密密钥和加固后的APK包,获取解密后的dex文件之后,还包括:
S801、将解密后的dex文件存储至内存中预设指定目录下。
可选地,实际在进行解密时,也可以指定解密后的dex文件的存储路径,可选地,可以将解密后的dex文件存储至内存中预设指定目录下,那么实际根据解密后的dex文件,运行APK包对应的应用程序,可以从内存中预设指定目录下直接加载该解密后的dex文件,提高运行效率。当然,对于解密后的dex文件,也可以执行多次,也即无需每次执行时进行解密,提高应用程序的运行效率。
比如,可以将解密后的dex文件存储在本地私有目录,那么每次运行时可以从该私有目录中直接加载,不必每次解密,也即实现一次解密多次运行,提高应用程序的运行效率。
图11示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图。在一些实施例中,如图11所示,上述根据解密后的dex文件,运行APK包对应的应用程序,包括:
S901、加载解密后的dex文件,生成对应的数组,数组包括至少一个类。
S902、根据数组和反射机制,运行APK包对应的应用程序。
其中,具体根据解密后的dex文件,运行APK包对应的应用程序时,可以参见下述的过程,可选地,可以加载解密后的dex文件,那么会生成对应的数组,该数组可以包括至少一个类,进而加载类的时候可以从该数组中查找相应的类,进而基于反射机制和该数组时,可以运行APK包对应的应用程序,无缝切换第三方应用。
图12示出了本申请实施例提供的另一种应用程序的加固方法的流程示意图。在一些实施例中,如图12所示,上述获取加密操作对应的解密密钥,包括:
S1001、向服务器发送携带有APK包标识的密钥获取请求,该密钥获取请求用于请求获取加密操作对应的解密密钥。
S1002、接收服务器发送的加密操作对应的解密密钥。
可选地,需要说明的是,前述终端向服务器发送加固后的APK包,所述加固后的APK包携带有APK包标识,在此过程中,可选地,加固后的APK包也可以携带有加密操作对应的解密密钥,那么运行APK包对应的应用程序的前述终端可以向服务器发送携带有APK包标识的密钥获取请求,以请求获取该APK包标识对应的解密密钥,服务器在接收到该密钥获取请求后,那么可以根据其携带的APK包标识确定对应的解密密钥,将该解密密钥发送给对应的终端,该终端则接收服务器发送的加密操作对应的解密密钥,便于后续根据该加密密钥可以获取解密后的dex文件。在此过程中,由于将解密密钥存储在服务器,如此,可以保证解密密钥存储的安全性,当然,需要说明的是,本申请在此不作限定,根据实际的应用需求,可以对解密密钥的存储方式进行灵活设置。
图13示出了本申请实施例提供的又一种应用程序的加固方法的流程示意图。在一些实施例中,如图13所示,上述方法还包括:
S1101、接收用户输入的预设脚本命令。
可选地,预设脚本命令可以通过用户输入的方式使其运行,可选地,输入预设脚本命令时,也可以输入待加固的APK包的名称,使得对于不同的待加固的APK包,可以通过同一预设脚本命令进行加固处理,如此,使得预设脚本命令可以具有灵活性。比如,待加固的APK包中包括:第一待加固的APK包和第二待加固的APK包,那么对两个待加固的APK包分别进行加固时,可以选择同一预设脚本命令进行加固,而在输入预设脚本命令时,可以输入待加固的APK包的名称以作以区分,可选地,其输入方式可以是:预设脚本命令-待加固的APK包名称,但并不以此为限,根据实际的应用场景可以选择其他输入方式,本申请在此不作限定。
下面,本申请结合一具体的实施例对前述应用程序的加固方法进行说明,本申请将该加固方法称为FastenApk,用于表示Android Apk加固方案,其中,可以在FastenPlugin插件中针对构建流程进行处理,在根工程控制台中执行:预设脚本命令sh fastenApk.sh,该预设脚本命令会自动触发执行解压、加密、对齐、压缩、签名等一系列任务,最终会在配置fastenInfo配置属性指定路径下输出加固后的APK包,实现加固过程自动化。而在运行APK包对应的应用程序时,可以通过FastenApplication读取App中AndroidManifest.xml中的meta配置属性,获取App中真正的Application,获取解密密钥从而解密APK包中的dex文件,然后,使用PathClassLoader加载解密后的dex文件,最终会存储在dexElements数组中,加载类的时候会从数组中查找相应的类,最终根据该dexElements数组和反射机制,可以无缝切换第三方应用。
如上所述,在该加固过程中,FastenApk作为一个解决Android APK加固技术的应用层解决方案,可以在Gradle项目构建APK的时候仅需执行一条shell命令即可对APK中的代码逻辑执行插件处理进行解压、AES加密、压缩对齐和签名等加固处理,不需要人工干预,实现加固流程的自动化,方便了开发人员的使用,同时大大降低了对第三方应用的侵入性;而在运行APK的时候则进行解密操作,实现加固后的APK的运行,如此,可以无缝切换第三方应用。
基于同一发明构思,本申请实施例中还提供了与应用程序的加固方法对应的应用程序的加固装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述应用程序的加固方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图14示出了本申请实施例提供的一种应用程序的加固装置的功能模块示意图,该加固装置可以是前述的终端,如图14所示,该应用程序的加固装置500可以包括:获取模块510和输出模块520。
获取模块510,用于获取待加固的APK包;输出模块520,用于根据待加固的APK包和预设脚本命令,输出加固后的APK包,预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
一种可能的实施方式中,上述输出模块520,具体用于响应于输出路径设置操作,根据待加固的APK包和预设脚本命令,在输出路径设置操作对应的输出路径下输出加固后的APK包。
一种可能的实施方式中,预设脚本命令用于指示执行解压操作和加密操作,上述输出模块520,具体用于采用所述解压操作对应的第一脚本命令将所述待加固的APK包解压至预设路径下,生成解压后的APK包;获取所述解压后的APK包中的dex文件;采用所述加密操作对应的第二脚本命令对所述dex文件进行加密操作,获取加密后的APK包;根据所述加密后的APK包,输出加固后的APK包。
一种可能的实施方式中,预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作,上述输出模块520,具体用于采用所述压缩操作对应的第三脚本命令,对所述加密后的APK包进行压缩操作,获取压缩后的APK包;采用所述对齐操作和签名操作对应的第四脚本命令,对所述压缩后的APK包进行对齐和签名操作,输出加固后的APK包。
图15示出了本申请实施例提供的另一种应用程序的加固装置的功能模块示意图。一种可能的实施方式中,上述装置还包括:选择模块530,用于接收脚本选择指令;根据所述脚本选择指令在多个预设备选脚本命令中选择所述预设脚本命令,所述预设备选脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
图16示出了本申请实施例提供的又一种应用程序的加固装置的功能模块示意图。一种可能的实施方式中,如图16所示,上述装置还包括:发送模块540,用于向服务器发送加固后的APK包,加固后的APK包携带有APK包标识。
一种可能的实施方式中,如图16所示,上述装置还包括:运行模块550,用于获取加密操作对应的解密密钥;根据解密密钥和加固后的APK包,获取解密后的dex文件;根据解密后的dex文件,运行APK包对应的应用程序。
图17示出了本申请实施例提供的另一种应用程序的加固装置的功能模块示意图。一种可能的实施方式中,如图17所示,上述装置还包括:存储模块560,用于将解密后的dex文件存储至内存中预设指定目录下。
一种可能的实施方式中,上述运行模块550,具体用于加载解密后的dex文件,生成对应的数组,数组包括至少一个类;根据数组和反射机制,运行APK包对应的应用程序。
一种可能的实施方式中,上述运行模块550,具体用于向服务器发送携带有APK包标识的密钥获取请求,密钥获取请求用于请求获取加密操作对应的解密密钥;接收服务器发送的加密操作对应的解密密钥。
一种可能的实施方式中,如图17所示,上述装置还包括:输入模块570,用于接收用户输入的预设脚本命令。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述应用程序的加固方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述应用程序的加固方法,从而解决现有加固流程比较复杂的技术问题,进而达到简化加固流程的效果。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (14)

1.一种应用程序的加固方法,其特征在于,包括:
获取待加固的APK包;
根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,所述预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
2.根据权利要求1所述的方法,其特征在于,所述根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,包括:
响应于输出路径设置操作,根据所述待加固的APK包和预设脚本命令,在所述输出路径设置操作对应的输出路径下输出加固后的APK包。
3.根据权利要求1所述的方法,其特征在于,所述预设脚本命令用于指示执行解压操作和加密操作,所述根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,包括:
采用所述解压操作对应的第一脚本命令将所述待加固的APK包解压至预设路径下,生成解压后的APK包;
获取所述解压后的APK包中的dex文件;
采用所述加密操作对应的第二脚本命令对所述dex文件进行加密操作,获取加密后的APK包;
根据所述加密后的APK包,输出加固后的APK包。
4.根据权利要求3所述的方法,其特征在于,所述预设脚本命令还用于指示执行压缩操作、对齐操作及签名操作,所述根据所述加密后的APK包,输出加固后的APK包,包括:
采用所述压缩操作对应的第三脚本命令,对所述加密后的APK包进行压缩操作,获取压缩后的APK包;
采用所述对齐操作和签名操作对应的第四脚本命令,对所述压缩后的APK包进行对齐和签名操作,输出加固后的APK包。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收脚本选择指令;
根据所述脚本选择指令在多个预设备选脚本命令中选择所述预设脚本命令,所述预设备选脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
向服务器发送所述加固后的APK包,所述加固后的APK包携带有APK包标识。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述加密操作对应的解密密钥;
根据所述解密密钥和所述加固后的APK包,获取解密后的dex文件;
根据所述解密后的dex文件,运行所述APK包对应的应用程序。
8.根据权利要求7所述的方法,其特征在于,所述根据所述解密密钥和所述加固后的APK包,获取解密后的dex文件之后,还包括:
将所述解密后的dex文件存储至内存中预设指定目录下。
9.根据权利要求7或8所述的方法,其特征在于,所述根据所述解密后的dex文件,运行所述APK包对应的应用程序,包括:
加载所述解密后的dex文件,生成对应的数组,所述数组包括至少一个类;
根据所述数组和反射机制,运行所述APK包对应的应用程序。
10.根据权利要求7所述的方法,其特征在于,所述获取所述加密操作对应的解密密钥,包括:
向服务器发送携带有APK包标识的密钥获取请求,所述密钥获取请求用于请求获取所述加密操作对应的解密密钥;
接收服务器发送的所述加密操作对应的解密密钥。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收用户输入的预设脚本命令。
12.一种应用程序的加固装置,其特征在于,包括:获取模块和输出模块;
所述获取模块,用于获取待加固的APK包;
所述输出模块,用于根据所述待加固的APK包和预设脚本命令,输出加固后的APK包,所述预设脚本命令用于指示执行下述至少一项操作:解压操作、加密操作、压缩操作、对齐操作、签名操作。
13.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1至11任一项所述方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至11任一项所述方法的步骤。
CN202010502285.4A 2020-06-04 2020-06-04 应用程序的加固方法、装置、设备及存储介质 Pending CN111859316A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010502285.4A CN111859316A (zh) 2020-06-04 2020-06-04 应用程序的加固方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010502285.4A CN111859316A (zh) 2020-06-04 2020-06-04 应用程序的加固方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN111859316A true CN111859316A (zh) 2020-10-30

Family

ID=72985765

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010502285.4A Pending CN111859316A (zh) 2020-06-04 2020-06-04 应用程序的加固方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111859316A (zh)

Similar Documents

Publication Publication Date Title
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN111143869B (zh) 应用程序包处理方法、装置、电子设备及存储介质
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN111475824B (zh) 数据访问方法、装置、设备和存储介质
CN106295255B (zh) 应用程序的加固方法和装置
CN107908392B (zh) 数据采集工具包定制方法、装置、终端和存储介质
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
US20150095653A1 (en) Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
CN109787768B (zh) 一种身份验证配置方法、装置及计算机可读存储介质
CN107292135A (zh) 一种程序代码保护方法和装置
KR101832594B1 (ko) 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템
CN111045722A (zh) 智能合约打包方法、装置、系统、计算机设备及存储介质
CN112115430A (zh) 一种apk的加固方法、电子设备及存储介质
CN106295327B (zh) 可执行文件的加固方法和装置
CN115391750B (zh) 一种算法授权方法、装置、电子设备和存储介质
KR101667774B1 (ko) 스크립트 프로그램을 위한 보안 제공 장치 및 방법
CN111400771A (zh) 目标分区的校验方法及装置、存储介质、计算机设备
CN111859316A (zh) 应用程序的加固方法、装置、设备及存储介质
US9372985B2 (en) Information processing device, information processing method, and computer program
EP3952202B1 (en) A device and a method for performing a cryptographic algorithm
KR101863325B1 (ko) 역공학 방지 방법 및 장치
KR20150047001A (ko) 애플리케이션 프로그램 보호 방법 및 장치
CN106648770A (zh) 一种应用程序安装包的生成方法、加载方法及装置
CN112363771B (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