CN113419734A - 应用程序加固的方法、装置及电子设备 - Google Patents

应用程序加固的方法、装置及电子设备 Download PDF

Info

Publication number
CN113419734A
CN113419734A CN202110670379.7A CN202110670379A CN113419734A CN 113419734 A CN113419734 A CN 113419734A CN 202110670379 A CN202110670379 A CN 202110670379A CN 113419734 A CN113419734 A CN 113419734A
Authority
CN
China
Prior art keywords
file
dex
language
character string
class object
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.)
Granted
Application number
CN202110670379.7A
Other languages
English (en)
Other versions
CN113419734B (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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202110670379.7A priority Critical patent/CN113419734B/zh
Publication of CN113419734A publication Critical patent/CN113419734A/zh
Application granted granted Critical
Publication of CN113419734B publication Critical patent/CN113419734B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

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

Abstract

本申请实施例提供一种应用程序加固的方法、装置及电子设备,其中,在获取待加固的应用程序的APK文件中的初始DEX文件时,将初始DEX文件中的指定方法类对象转换成C语言代码得到C语言文件;基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;在涉及到C语言文件中有字符串与目标DEX文件中的字符串相匹配时,可以将C语言文件中匹配的字符串用目标DEX文件中该字符串对应的字符串索引进行替换,由于字符串索引要比字符串的代码数量少,有效降低了加固的APK文件的包体体积,由于对C语言文件中的字符串进行了索引替换,从而提高了分析加固的APK文件的难度,增加了应用程序的安全性。

Description

应用程序加固的方法、装置及电子设备
技术领域
本发明涉及安卓系统加固技术领域,尤其是涉及一种应用程序加固的方法、装置及电子设备。
背景技术
目前,安卓平台发展迅速,占据了当前用户终端的主流市场,由于安卓系统开放源码的特性,带来的安全问题不可避免,其中安卓应用程序基本使用Java进行开发,Java经过编译后生成Dex文件,该文件经过反编译后,很容易可以看到程序的代码,该代码和源代码差异性很小,稍做修改就可以生成新的应用程序,因此攻击者将应用程序反编译后植入恶意代码,重新编译打包生成一个新的移动应用程序,上传到各大应用市场上供用户下载,则会形成一个盗版的应用程序或者是恶意的应用程序。
为了防止应用程序被篡改,将Java转C语言文件是比较常用的一种加固手段,由于C语言文件中包括的字符串大部分在Dex文件中都包含,因此,两个文件中存在字符串冗余的现象,从而使得应用程序的APK文件体积增加,占用用户终端大量的内存空间,从而影响用户终端的运行速率。
发明内容
有鉴于此,本发明的目的在于提供一种应用程序加固的方法、装置及电子设备,有效减少C语言文件中的代码量,节省了内存占用空间,进而提高了用户终端的运行速率。
第一方面,本发明实施例提供了一种应用程序加固的方法,其中,该方法包括:获取待加固的应用程序的APK文件中的初始DEX文件;将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。
上述在对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件之后,该方法还包括:响应于针对加固的APK文件的启动指令,解压加固的APK文件;从内存中读取目标DEX文件;其中,目标DEX为对加固的APK文件解压获得;基于目标DEX文件的函数索引和字符串索引从目标DEX文件的数据区中定位方法类对象对应的字符串;其中,目标DEX文件的数据区中预先存储有字符串对应的代码属性信息,代码属性信息用于表明运行字符串的代码类别;基于代码属性信息在目标DEX文件或优化的C语言文件中运行方法类对象。
上述基于代码属性信息在目标DEX文件或优化的C语言文件中运行方法类对象的步骤,包括:判断方法类对象对应的字符串的代码属性信息是否为C语言代码类别;如果是,将方法类对象对应的字符串返回至优化的C语言文件,并运行C语言文件;如果否,运行目标DEX文件。
上述指定方法类对象为原始DEX文件中需要保护的DEX函数。
上述指定方法类对象包括以下至少一种:函数名为onCreate,或者onResume或者onPause的DEX函数;包含特定标志注解的DEX函数;包含调用指令的DEX函数;其中,调用指令为网络请求调用指令或数据调用指令。
上述在将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件之前,该方法还包括:对初始DEX文件进行解析,提取初始DEX文件中的函数池索引;基于函数池索引搜索初始DEX文件中的DEX函数池;提取DEX函数池中预先存储的各个DEX函数对应的函数指令;其中,函数指令包含应用程序的操作指令以及运行数据;将各个DEX函数对应的函数指令反编译成Java代码。
上述基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件的步骤,包括:将初始DEX文件中除指定方法类对象之外的对象对应的Java代码编写成Java文件;将Java文件编写成class文件;复制class文件至初始DEX文件的dx目录下,得到目标DEX文件。
上述对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件的步骤,包括:基于优化的C语言文件生成SO库文件;将SO库文件和目标DEX文件进行合并处理,得到加固的APK文件。
上述将SO库文件和目标DEX文件进行合并处理的步骤,包括:将目标DEX文件放在指定压缩包的根目录下;以及,将SO库文件放在指定压缩包的libs文件目录下。
上述对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件之后之后,该方法还包括:在加固的APK文件中添加用于校验应用程序完整性和签名证书的防篡改功能代码。
第二方面,本发明实施例还提供一种应用程序加固的装置,其中,该装置包括:获取模块,用于获取待加固的应用程序的APK文件中的初始DEX文件;转换模块,用于将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;生成模块,用于基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;查找模块,用于在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;替换模块,用于将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;合并处理模块,用于对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。
第三方面,本发明实施例还提供一种电子设备,其中,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现上述方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,其中,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述的方法。
本发明实施例带来了以下有益效果:
本申请实施例提供一种应用程序加固的方法、装置及电子设备,其中,获取待加固的应用程序的APK文件中的初始DEX文件;将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。本实施例在涉及到C语言文件中有字符串与目标DEX文件中的字符串相匹配时,可以将C语言文件中匹配的字符串用目标DEX文件中该字符串对应的字符串索引进行替换,由于字符串索引要比字符串的代码数量少,所需的存储空间小,从而替换后的C语言文件的体积变小,进而有效降低了加固的APK文件的包体体积,进一步,由于对C语言文件中的字符串进行了索引替换,从而提高了分析加固的APK文件的难度,增加了应用程序的安全性。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种应用程序加固的方法的流程图;
图2为本发明实施例提供的另一种应用程序加固的方法的流程图;
图3为本发明实施例提供的另一种应用程序加固的方法的流程图;
图4为本发明实施例提供的一种应用程序加固的装置的结构示意图;
图5为本发明实施例提供的另一种应用程序加固的装置的结构示意图;
图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
考虑到现有转C语言文件加固手段中,存在字符串冗余的现象导致占用内存空间,影响用户终端的运行速率;为了有效减少语言文件中的代码量,节省内存占用空间,本发明实施例提供的一种应用程序加固的方法、装置及电子设备,能够在涉及C语言文件中有字符串与目标DEX文件中的字符串相匹配时,可以将C语言文件中匹配的字符串用目标DEX文件中该字符串对应的字符串索引进行替换,由于字符串索引要比字符串的代码数量少,所需的存储空间小,致使替换后的C语言文件的体积变小,进而有效降低了加固的APK文件的包体体积,进一步,由于对C语言文件中的字符串进行了索引替换,从而提高了分析加固的APK文件的难度,增加了应用程序的安全性。
本实施例提供了一种应用程序加固的方法,参见图1所示的一种应用程序加固的方法的流程图,该方法具体包括如下步骤:
步骤S102,获取待加固的应用程序的APK文件中的初始DEX文件;
其中,APK(Android Package,安卓安装包)文件是安卓软件开发工具包编译的工程打包成用于安装应用程序的文件。
上述初始DEX(DalvikVM executes,安卓Dalvik执行程序)文件是指通过虚拟机执行且用于运行应用程序的文件,具体而言,通过对待加固的应用程序的APK文件进行解压后,可以获取初始DEX文件;其中,解压程序可以根据本实施例中APK文件的文件格式进行选择,如可使用zip压缩文件的解压缩程序(unzip)。
步骤S104,将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
上述指定方法类对象为初始DEX文件中需要保护的DEX函数,这些DEX函数对应的代码为敏感代码,因此,将指定方法类对象转换成C语言代码以进行保护。在本实施例中,指定方法类对象包括以下至少一种:
1)函数名为onCreate,或者onResume或者onPause的DEX函数;
其中,函数名为onCreate、onResume或onPause的DEX函数为安卓四大组件生命周期对应的DEX函数,属于组件的商业机密,因此需要保护。
2)包含特定标志注解的DEX函数;上述特定标志注解为j2c,特定标志注解可以根据需要进行设置在此不进行限定。
3)包含调用指令的DEX函数;其中,调用指令为网络请求调用指令或数据调用指令。
当DEX函数满足1)至3)中的至少任一条件时,可确定该DEX函数为指定方法类对象,需要将保护的指定方法类对象转换成C语言代码,该转化过程实质是抽去指定方法类对象在Java代码的原逻辑,只留下一个带native属性的函数头,例如,指定方法类对象的Java代码为public int a(int b){return b;},转C后Java层变成public native int a(intb);,只有一个函数头,当服务器判断是native函数后,就会自动索引到C语言文件中去查找该指定方法类对象对应的C语言代码。
步骤S106,基于初始DEX文件中除所述指定方法类对象之外的对象生成目标DEX文件;
除指定方法类对象之外的对象为不敏感的DEX函数,无需进行保护,因此,这类对象不需要转成C语言代码,在本实施例中,可将不需要保护的对象生成目标DEX文件,具体生成目标DEX文件的过程为:将目标DEX文件中除指定方法类对象之外的对象对应的Java代码编写成Java文件;将Java文件编写成class文件;复制class文件至初始DEX文件的dx目录下,得到目标DEX文件;该过程与现有Java代码生成DEX文件的过程相同,在此不对上述生成过程进行详细阐述。
步骤S108,在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
通常,上述目标DEX文件中存储有方法类对象对应的字符串,以及存储有字符串对应的字符串索引,C语言文件中存储有方法类对象对应的字符串。
查找的具体过程为:首先,从目标DEX文件中查找与C语言文件中的字符串相同的字符串,然后,从目标DEX文件中查找与匹配的字符串对应的字符串索引。
例如,C语言文件中的字符串为“hello world”,匹配到目标DEX文件中存在同样的字符串,获取到的该匹配的字符串,以及该匹配的字符串J对应的字符串索引为10,因此,将字符串为“hello world”替换成getDexString(env,0,10)的字符串索引。
步骤S110,将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
在本实施例中,通过上述步骤S108将从目标DEX文件中查找到与C语言文件中方法类对象对应的字符串匹配的字符串索引,可以将C语言文件中的字符串用代码量少的字符串索引进行替换,以减小C语言文件的体积,可有效避免因目标DEX文件和C语言文件中存在相同字符串而造成冗余存储,致使加固后的APK文件体积增加。
进一步,由于对C语言文件中的字符串进行了索引替换,致使加固的APK文件中不存在字符串,大大提高了代码分析难度,增加了应用程序的安全性。
步骤S112,对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。
本申请实施例提供一种应用程序加固的方法,其中,获取待加固的应用程序的APK文件中的初始DEX文件;将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。本实施例在涉及到C语言文件中有字符串与目标DEX文件中的字符串相匹配时,可以将C语言文件中匹配的字符串用目标DEX文件中该字符串对应的字符串索引进行替换,由于字符串索引要比字符串的代码数量少,所需的存储空间小,致使替换后的C语言文件的体积变小,进而有效降低了加固的APK文件的包体体积,进一步,由于对C语言文件中的字符串进行了索引替换,从而提高了分析加固的APK文件的难度,增加了应用程序的安全性。
本实施例提供了另一种应用程序加固的方法,该方法在上述实施例的基础上实现;本实施例重点描述对加固的APK文件进行应用的具体实施方式。如图2所示的另一种应用程序加固的方法的流程图,本实施例中的应用程序加固的方法包括如下步骤:
步骤S202,获取待加固的应用程序的APK文件中的初始DEX文件;
步骤S204,将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
步骤S206,基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;
步骤S208,在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
步骤S210,将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
步骤S212,对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件;
其中,合并处理的过程可通过步骤A1至步骤A2实现:
步骤A1,基于优化的C语言文件生成SO库文件;
上述SO库文件是用于解密加密索引字符串并动态还原索引字符串的库文件,在实际使用时,可利用ndkbuild系统工具将C语言字符串经索引替换成字符串索引编译成名为文件androidmainruns.so的SO库文件。
步骤A2,将SO库文件和目标DEX文件进行合并处理,得到加固的APK文件。
由于APK文件是一个压缩包,因此,需要将目标DEX文件和SO库文件放在同一个压缩包指定的目录下,具体将可目标DEX文件放在指定压缩包的根目录下,将SO库文件放在指定压缩包的libs文件目录下,以得到上述加固的APK文件。
通常,将加固的APK文件用于用户终端上的应用程序运行,该运行过程可通过步骤S214至步骤步骤S220实现:
步骤S214,响应于针对加固的APK的启动指令,解压加固的APK文件;
在用户首次安装启动该应用程序时,可获取该应用程序对应的利用上述应用程序加固的方法得到的加固的APK文件。
步骤S216,从内存中读取目标DEX文件;其中,目标DEX为对加固的APK文件解压获得;
通常,在解析加固的APK文件之前,需要判断加固的APK文件是否加载到用户终端的内存中,如果是,在内存中读取目标DEX文件;如果否,获取内存的本地文件;其中,本地文件为oat文件或vdex文件;在本地文件中读取目标DEX文件。
步骤S218,基于目标DEX文件的函数索引和字符串索引从目标DEX文件的数据区中定位方法类对象对应的字符串;其中,目标DEX文件的数据区中预先存储有字符串对应的代码属性信息,代码属性信息用于表明运行字符串的代码类别;
通常,可通过函数索引定位到数据区后从数据区中找到方法类对象,方法类对象里面包含字符串索引,然后再通过字符串索引定位到数据区找到该字符串索引对应的字符串。
相对于初始DEX文件,目标DEX文件改变了里面方法类对象的代码属性信息,其中,基于方法类对象对应的代码属性信息能够明确该方法类对象执行的代码类型,可以理解为,该代码属性信息指定了哪些方法类对象执行c代码,哪些方法类对象继续执行目标DEX文件中的java代码。
步骤S220,基于代码属性信息在目标DEX文件或优化的C语言文件中运行方法类对象。
具体地,上述步骤S220可通过步骤B1至B3实现:
步骤B1,判断方法类对象对应的字符串的代码属性信息是否为C语言代码类别;
如果是,执行步骤B2,如果否,执行步骤B3。
步骤B2,将方法类对象对应的字符串返回至优化的C语言文件,并运行C语言文件;
可以将步骤S218从数据区中定位出的该方法类对象对应的字符串返回至C语言文件中,运行C语言文件实现该方法类对象对应的字符串的运行。
步骤B3,运行目标DEX文件。
如果判断出代码属性信息不为C语言代码类别,则表明该方法类对象对应的字符串是基于目标DEX文件中的java代码运行的,因此,无需将该方法类对象对应的字符串返回至C语言文件进行运行,只需在目标DEX文件中运行该方法类对象对应的字符串即可。
本发明实施例提供的上述应用程序加固的方法,能够响应于针对加固的APK的启动指令,解压加固的APK文件;从内存中读取目标DEX文件;基于目标DEX文件的函数索引和字符串索引从目标DEX文件的数据区中定位方法类对象对应的字符串;由于该目标DEX文件的数据区中预先存储有字符串对应的代码属性信息,代码属性信息用于表明运行字符串的代码类别;因此,可基于代码属性信息在目标DEX文件或优化的C语言文件中运行方法类对象,从而实现应用程序的运行。
本实施例提供了另一种应用程序加固的方法,该方法在上述实施例的基础上实现;本实施例重点描述初始DEX文件转Java代码,及添加防篡改功能代码的具体实施方式。如图3所示的另一种应用程序加固的方法的流程图,本实施例中的应用程序加固的方法包括如下步骤:
步骤S302,获取待加固的应用程序的APK文件中的初始DEX文件;
通常,初始DEX文件中存储的是以DEX函数为单元的函数指令,在执行步骤S312之前需要将各个DEX函数对应的函数指令全部转换成Java代码,以便对需要保护的DEX函数对应的Java代码转成C语言代码进行保护;其中,将函数指令转成Java代码的过程可由步骤S304至步骤S310实现。
步骤S304,对初始DEX文件进行解析,提取初始DEX文件中的函数池索引;
初始DEX文件在内存中以DexFile形式存在,包含DexHeader头部,该头部里包含有函数池索引,通过该函数池索引就能找到存储各个DEX函数的DEX函数池。
步骤S306,基于函数池索引搜索初始DEX文件中的DEX函数池;
步骤S308,提取DEX函数池中预先存储的各个DEX函数对应的函数指令;其中,函数指令包含应用程序的操作指令以及运行数据;
步骤S310,将各个DEX函数对应的函数指令反编译成Java代码;
本实施例中将函数指令反编译成Java代码的过程与现有函数指令反编译成Java代码的过程相同,在此不进行详述说明。
步骤S312,将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
步骤S314,基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;
步骤S316,在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
步骤S318,将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
步骤S320,对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件;
步骤S322,在加固的APK文件中添加用于校验应用程序完整性和签名证书的防篡改功能代码。
在本实施例中,由于攻击者可以非法复制、非授权使用、恶意修改软件代码逻辑或功能及通过逆向工程获取核心算法和关键数据,但进行上述不法操作时,应用程序的代码和签名证书会发生改变,因此在加固的DEX文件添加用于校验应用程序完整性和签名证书的防篡改功能代码。
如上所述,通过利用完整性保护和签名证书保护技术,对应用程序的完整性以及对应用开发者签名证书在应用程序运行过程中进行二次校验,增加应用程序被篡改的难度,一旦被篡改能够即时感知并终止应用程序的运行,使盗版、插入恶意代码等行为难以为继。
通常,为了验证应用程序是否被篡改,可将用于验证应用程序完整性和签名证书的指纹信息存放在服务器中,待进行安全解固时进行接收比对,其中,指纹信息可以为MD5值,即应用程序和签名证书的MD5值具有唯一性,篡改文件其MD5值也相应变化,通过服务器预先保持的MD5值与应用程序和签名证书的MD5值比对,可验证文件是否被篡改。
本发明实施例提供的上述应用程序加固的方法,在加固的APK文件中进一步添加防篡改功能代码,可有效提升应用程序被篡改的难度,进而提高了应用程序的安全性。
对应于上述方法实施例,本实施例提供了一种应用程序加固的装置,其中,该装置应用于服务器,参见图4所示的一种应用程序加固的装置的结构示意图,该装置包括:
获取模块402,用于获取待加固的应用程序的APK文件中的初始DEX文件;
转换模块404,用于将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
生成模块406,用于基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;
查找模块408,用于在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
替换模块410,用于将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
合并处理模块412,用于对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。
本申请实施例提供一种应用程序加固的装置,其中,获取待加固的应用程序的APK文件中的初始DEX文件;将初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;基于初始DEX文件中除指定方法类对象之外的对象生成目标DEX文件;在目标DEX文件中查找与C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;将查找到的字符串索引替换C语言文件中方法类对象对应的字符串,得到优化的C语言文件;对优化的C语言文件和目标DEX文件进行合并处理,得到加固的APK文件。本实施例在涉及到C语言文件中有字符串与目标DEX文件中的字符串相匹配时,可以将C语言文件中匹配的字符串用目标DEX文件中该字符串对应的字符串索引进行替换,由于字符串索引要比字符串的代码数量少,所需的存储空间小,致使替换后的C语言文件的体积变小,进而有效降低了加固的APK文件的包体体积,进一步,由于对C语言文件中的字符串进行了索引替换,从而提高了分析加固的APK文件的难度,增加了应用程序的安全性。
基于上述应用程序加固的装置,本发明实施例还提供了另一种应用程序加固的装置,参见图5所示的应用程序加固的装置的结构示意图,该展示装置除了包括图4所示的结构,还包括与合并处理模块412连接的运行模块502,用于响应于针对加固的APK的启动指令,解压加固的APK文件;从内存中读取目标DEX文件;其中,目标DEX为对加固的APK文件解压获得;基于目标DEX文件的函数索引和字符串索引从目标DEX文件的数据区中定位方法类对象对应的字符串;其中,目标DEX文件的数据区中预先存储有字符串对应的代码属性信息,代码属性信息用于表明运行字符串的代码类别;基于代码属性信息在目标DEX文件或优化的C语言文件中运行方法类对象。
上述运行模块502,还用于判断方法类对象对应的字符串的代码属性信息是否为C语言代码类别;如果是,将方法类对象对应的字符串返回至优化的C语言文件,并运行C语言文件;如果否,运行目标DEX文件。
上述指定方法类对象为原始DEX文件中需要保护的DEX函数。
上述指定方法类对象包括以下至少一种:将函数名为onCreate,或者onResume或者onPause的DEX函数;包含特定标志注解的DEX函数;包含调用指令的DEX函数;其中,调用指令为网络请求调用指令或数据调用指令。
上述装置还包括与获取模块402和转换模块404均连接的反编译模块504,用于对初始DEX文件进行解析,提取初始DEX文件中的函数池索引;基于函数池索引搜索初始DEX文件中的DEX函数池;提取DEX函数池中预先存储的各个DEX函数对应的函数指令;其中,函数指令包含应用程序的操作指令以及运行数据;将各个DEX函数对应的函数指令反编译成Java代码。
上述生成模块406还用于,将初始DEX文件中除指定方法类对象之外的对象对应的Java代码编写成Java文件;将Java文件编写成class文件;复制class文件至初始DEX文件的dx目录下,得到目标DEX文件。
上述合并处理模块412还用于,基于优化的C语言文件生成SO库文件;将SO库文件和目标DEX文件进行合并处理,得到加固的APK文件。
上述合并处理模块412还用于,将目标DEX文件放在指定压缩包的根目录下;以及,将SO库文件放在指定压缩包的libs文件目录下。
上述装置还包括与合并处理模块412和运行模块502均连接的添加模块506,用于在加固的APK文件中添加用于校验应用程序完整性和签名证书的防篡改功能代码。
本发明实施例提供的应用程序加固的装置,与上述实施例提供的应用程序加固的方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
本申请实施例还提供了一种电子设备,如图6所示,为该电子设备的结构示意图,其中,该电子设备包括处理器121和存储器120,该存储器120存储有能够被该处理器121执行的计算机可执行指令,该处理器121执行该计算机可执行指令以实现上述应用程序加固的方法。
在图6示出的实施方式中,该电子设备还包括总线122和通信接口123,其中,处理器121、通信接口123和存储器120通过总线122连接。
其中,存储器120可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口123(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线122可以是ISA(IndustryStandard Architecture,工业标准体系结构)总线、PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线122可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器121可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器121中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器121可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器121读取存储器中的信息,结合其硬件完成前述实施例的应用程序加固的方法的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现上述应用程序加固的方法,具体实现可参见前述方法实施例,在此不再赘述。
本申请实施例所提供的应用程序加固的方法、装置及电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本申请的范围。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。此外,术语“第一”、“第二”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (13)

1.一种应用程序加固的方法,其特征在于,所述方法包括:
获取待加固的应用程序的APK文件中的初始DEX文件;
将所述初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
基于所述初始DEX文件中除所述指定方法类对象之外的对象生成目标DEX文件;
在所述目标DEX文件中查找与所述C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
将查找到的字符串索引替换所述C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
对所述优化的C语言文件和所述目标DEX文件进行合并处理,得到加固的APK文件。
2.根据权利要求1所述的方法,其特征在于,在对所述优化的C语言文件和所述目标DEX文件进行合并处理,得到加固的APK文件之后,所述方法还包括:
响应于针对所述加固的APK文件的启动指令,解压所述加固的APK文件;
从内存中读取所述目标DEX文件;其中,所述目标DEX为对所述加固的APK文件解压获得;
基于所述目标DEX文件的函数索引和字符串索引从所述目标DEX文件的数据区中定位方法类对象对应的字符串;其中,所述目标DEX文件的数据区中预先存储有所述字符串对应的代码属性信息,所述代码属性信息用于表明运行所述字符串的代码类别;
基于所述代码属性信息在所述目标DEX文件或所述优化的C语言文件中运行所述方法类对象。
3.根据权利要求2所述的方法,其特征在于,基于所述代码属性信息在所述目标DEX文件或所述优化的C语言文件中运行所述方法类对象的步骤,包括:
判断所述方法类对象对应的字符串的代码属性信息是否为C语言代码类别;
如果是,将所述方法类对象对应的字符串返回至所述优化的C语言文件,并运行所述C语言文件;
如果否,运行所述目标DEX文件。
4.根据权利要求1所述的方法,其特征在于,所述指定方法类对象为所述初始DEX文件中需要保护的DEX函数。
5.根据权利要求1所述的方法,其特征在于,所述指定方法类对象包括以下至少一种:
函数名为onCreate,或者onResume或者onPause的DEX函数;
包含特定标志注解的DEX函数;
包含调用指令的DEX函数,其中,所述调用指令为网络请求调用指令或数据调用指令。
6.根据权利要求1所述的方法,其特征在于,在将所述初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件之前,所述方法还包括:
对所述初始DEX文件进行解析,提取所述初始DEX文件中的函数池索引;
基于所述函数池索引搜索所述初始DEX文件中的DEX函数池;
提取所述DEX函数池中预先存储的各个DEX函数对应的函数指令;其中,所述函数指令包含所述应用程序的操作指令以及运行数据;
将各个所述DEX函数对应的函数指令反编译成Java代码。
7.根据权利要求6所述的方法,其特征在于,基于所述初始DEX文件中除所述指定方法类对象之外的对象生成目标DEX文件的步骤,包括:
将所述初始DEX文件中除所述指定方法类对象之外的对象对应的Java代码编写成Java文件;
将所述Java文件编写成class文件;
复制所述class文件至所述初始DEX文件的dx目录下,得到目标DEX文件。
8.根据权利要求1所述的方法,其特征在于,对所述优化的C语言文件和所述目标DEX文件进行合并处理,得到加固的APK文件的步骤,包括:
基于所述优化的C语言文件生成SO库文件;
将所述SO库文件和所述目标DEX文件进行合并处理,得到加固的APK文件。
9.根据权利要求8所述的方法,其特征在于,将所述SO库文件和所述目标DEX文件进行合并处理的步骤,包括:
将所述目标DEX文件放在指定压缩包的根目录下;以及,将所述SO库文件放在所述指定压缩包的libs文件目录下。
10.根据权利要求1所述的方法,其特征在于,在对所述优化的C语言文件和所述目标DEX文件进行合并处理,得到加固的APK文件之后,所述方法还包括:
在所述加固的APK文件中添加用于校验应用程序完整性和签名证书的防篡改功能代码。
11.一种应用程序加固的装置,其特征在于,所述装置包括:
获取模块,用于获取待加固的应用程序的APK文件中的初始DEX文件;
转换模块,用于将所述初始DEX文件中的指定方法类对象转换成C语言代码,得到C语言文件;
生成模块,用于基于所述初始DEX文件中除所述指定方法类对象之外的对象生成目标DEX文件;
查找模块,用于在所述目标DEX文件中查找与所述C语言文件中的方法类对象的字符串匹配的字符串及对应的字符串索引;
替换模块,用于将查找到的字符串索引替换所述C语言文件中方法类对象对应的字符串,得到优化的C语言文件;
合并处理模块,用于对所述优化的C语言文件和所述目标DEX文件进行合并处理,得到加固的APK文件。
12.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1至10任一项所述方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现权利要求1至10任一项所述的方法。
CN202110670379.7A 2021-06-17 2021-06-17 应用程序加固的方法、装置及电子设备 Active CN113419734B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110670379.7A CN113419734B (zh) 2021-06-17 2021-06-17 应用程序加固的方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110670379.7A CN113419734B (zh) 2021-06-17 2021-06-17 应用程序加固的方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN113419734A true CN113419734A (zh) 2021-09-21
CN113419734B CN113419734B (zh) 2022-10-04

Family

ID=77788919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110670379.7A Active CN113419734B (zh) 2021-06-17 2021-06-17 应用程序加固的方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN113419734B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115309405A (zh) * 2022-08-24 2022-11-08 北京熵核科技有限公司 一种代码链接优化方法

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090063465A1 (en) * 2007-08-29 2009-03-05 Yahoo! Inc. System and method for string processing and searching using a compressed permuterm index
KR20140030989A (ko) * 2012-09-04 2014-03-12 주식회사 인프라웨어테크놀러지 안드로이드 운영체제에서 apk 파일의 시그니처 추출 방법, 그리고 이를 위한 컴퓨터로 판독가능한 기록매체
CN105426708A (zh) * 2016-01-19 2016-03-23 北京鼎源科技有限公司 一种Android系统的应用程序的加固方法
CN105631251A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种apk加固保护方法及系统
US20160171216A1 (en) * 2014-12-12 2016-06-16 International Business Machines Corporation Normalizing and detecting inserted malicious code
CN106295255A (zh) * 2015-05-27 2017-01-04 腾讯科技(深圳)有限公司 应用程序的加固方法和装置
CN107329957A (zh) * 2017-05-18 2017-11-07 网易(杭州)网络有限公司 替换代码中文字符串的方法以及计算机可读存储介质
CN107480479A (zh) * 2017-08-15 2017-12-15 北京奇虎科技有限公司 应用程序的加固方法及装置、计算设备、计算机存储介质
CN108733379A (zh) * 2018-05-28 2018-11-02 常熟理工学院 基于dex字节码抽离映射混淆的安卓应用加固方法
CN108733988A (zh) * 2017-04-19 2018-11-02 北京洋浦伟业科技发展有限公司 安卓平台上可执行程序的保护方法
CN110232262A (zh) * 2019-06-17 2019-09-13 中金金融认证中心有限公司 一种安卓应用的加固方法和系统
US10678854B1 (en) * 2016-03-11 2020-06-09 Amazon Technologies, Inc. Approximate string matching in search queries to locate quotes
CN112765567A (zh) * 2021-01-07 2021-05-07 上海擎感智能科技有限公司 一种应用程序的数据处理方法及其装置
CN112836209A (zh) * 2021-01-12 2021-05-25 京东数字科技控股股份有限公司 应用安装包处理方法、装置、电子设备、系统和存储介质

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090063465A1 (en) * 2007-08-29 2009-03-05 Yahoo! Inc. System and method for string processing and searching using a compressed permuterm index
KR20140030989A (ko) * 2012-09-04 2014-03-12 주식회사 인프라웨어테크놀러지 안드로이드 운영체제에서 apk 파일의 시그니처 추출 방법, 그리고 이를 위한 컴퓨터로 판독가능한 기록매체
US20160171216A1 (en) * 2014-12-12 2016-06-16 International Business Machines Corporation Normalizing and detecting inserted malicious code
CN106295255A (zh) * 2015-05-27 2017-01-04 腾讯科技(深圳)有限公司 应用程序的加固方法和装置
CN105631251A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种apk加固保护方法及系统
CN105426708A (zh) * 2016-01-19 2016-03-23 北京鼎源科技有限公司 一种Android系统的应用程序的加固方法
US10678854B1 (en) * 2016-03-11 2020-06-09 Amazon Technologies, Inc. Approximate string matching in search queries to locate quotes
CN108733988A (zh) * 2017-04-19 2018-11-02 北京洋浦伟业科技发展有限公司 安卓平台上可执行程序的保护方法
CN107329957A (zh) * 2017-05-18 2017-11-07 网易(杭州)网络有限公司 替换代码中文字符串的方法以及计算机可读存储介质
CN107480479A (zh) * 2017-08-15 2017-12-15 北京奇虎科技有限公司 应用程序的加固方法及装置、计算设备、计算机存储介质
CN108733379A (zh) * 2018-05-28 2018-11-02 常熟理工学院 基于dex字节码抽离映射混淆的安卓应用加固方法
CN110232262A (zh) * 2019-06-17 2019-09-13 中金金融认证中心有限公司 一种安卓应用的加固方法和系统
CN112765567A (zh) * 2021-01-07 2021-05-07 上海擎感智能科技有限公司 一种应用程序的数据处理方法及其装置
CN112836209A (zh) * 2021-01-12 2021-05-25 京东数字科技控股股份有限公司 应用安装包处理方法、装置、电子设备、系统和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115309405A (zh) * 2022-08-24 2022-11-08 北京熵核科技有限公司 一种代码链接优化方法
CN115309405B (zh) * 2022-08-24 2023-08-04 北京熵核科技有限公司 一种代码链接优化方法

Also Published As

Publication number Publication date
CN113419734B (zh) 2022-10-04

Similar Documents

Publication Publication Date Title
CN106778103B (zh) 一种安卓应用程序防逆向破解的加固方法、系统及解密方法
JP4902129B2 (ja) セキュリティ仮想マシンを介してセキュリティポリシーを実施するための方法およびシステム
US10586026B2 (en) Simple obfuscation of text data in binary files
US7962952B2 (en) Information processing apparatus that executes program and program control method for executing program
CN111638936A (zh) 一种基于内置安全体系结构的虚拟机静态度量方法和装置
CN115062309B (zh) 一种新型电力系统下基于设备固件仿真的漏洞挖掘方法及存储介质
CN113419734B (zh) 应用程序加固的方法、装置及电子设备
CN111143787B (zh) 提高Java软件破解难度的方法及装置、验证方法及验证装置
WO2020233044A1 (zh) 一种插件校验方法、设备、服务器及计算机可读存储介质
CN106295327B (zh) 可执行文件的加固方法和装置
CN111265860A (zh) 游戏存档处理方法、装置、终端设备及可读存储介质
CN109002710B (zh) 一种检测方法、装置及计算机可读存储介质
CN108664796B (zh) 一种so文件保护方法及装置
WO2022134419A1 (zh) 应用程序的篡改检测方法、装置、设备及存储介质
CN106778270B (zh) 一种恶意应用程序的检测方法及系统
KR101600178B1 (ko) 불법 복제 애플리케이션 탐지 방법 및 장치
JP7184198B2 (ja) 検証情報作成システム、検証情報作成方法、および、検証情報作成プログラム
CN113220314A (zh) App资源加载及apk生成方法、装置、设备及介质
KR101556908B1 (ko) 프로그램 보호 장치
JP5863689B2 (ja) 不正使用防止機能付き共有ライブラリ
CN113486330A (zh) 应用程序运行方法、装置、设备和存储介质
KR101562282B1 (ko) 오덱스 무결성 검증 시스템 및 방법
CN113391873B (zh) 基于虚拟机的行为采集方法、虚拟机、装置及存储介质
CN111045657B (zh) 程序代码的运行方法和运行装置以及编译方法和编译装置
JP2010113566A (ja) 情報処理装置、アクセス制御方法、及びプログラム

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