CN104965712A - 应用程序加固保护方法、装置及移动终端 - Google Patents

应用程序加固保护方法、装置及移动终端 Download PDF

Info

Publication number
CN104965712A
CN104965712A CN201510424887.1A CN201510424887A CN104965712A CN 104965712 A CN104965712 A CN 104965712A CN 201510424887 A CN201510424887 A CN 201510424887A CN 104965712 A CN104965712 A CN 104965712A
Authority
CN
China
Prior art keywords
application program
reinforcing
interface function
installation kit
file
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
CN201510424887.1A
Other languages
English (en)
Other versions
CN104965712B (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.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201510424887.1A priority Critical patent/CN104965712B/zh
Publication of CN104965712A publication Critical patent/CN104965712A/zh
Application granted granted Critical
Publication of CN104965712B publication Critical patent/CN104965712B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种应用程序加固保护方法,包括以下步骤:判断应用程序对应的系统版本中是否存在预设的兼容接口函数;如果存在,则由加固程序调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;如果不存在,则由加固程序调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。同时,本发明还提供一种应用程序加固装置以及移动终端。本发明所述方法及装置可以对不同系统版本的应用程序进行加固,使得加固后的应用程序兼容其相应的系统版本,解决加固后应用程序和系统之间的兼容性问题。

Description

应用程序加固保护方法、装置及移动终端
技术领域
本发明涉及应用程序安全领域,具体而言,本发明涉及一种应用程序加固保护方法、装置及移动终端。
背景技术
目前国内第三方应用市场山寨应用、恶意应用等问题严重。对于一些优秀的应用程序,除了盗版和山寨的问题以外,还存在被破解、二次打包、数据篡改、注入等问题,由此给应用程序的开发者带来很大损失,亟待需要有效的解决方案以防止上述问题的发生。现有技术为了保护应用程序,提供加固程序对原有的应用程序进行加固,从而为移动应用提供安全保护,防止应用被逆向分析、反编译、二次打包,防止嵌入各类病毒、广告等恶意代码,从源头保护数据安全和开发者利益。
然而,目前大多数的移动设备的系统都是安卓系统,但由于不同移动设备的厂商为了定制自己的操作系统,对安卓系统做修改,使得不同移动设备的操作系统存在差异,造成安卓系统的碎片化,从而使现有的加固程序生成的加固后应用程序不能同时兼容多种版本的系统,造成加固后程序应用运行崩溃。而开发多种版本的加固程序以兼容多种版本的系统不仅浪费很多资源,且后期的维护更新很复杂。故而,需要提供一种通用的加固程序,使得加固后应用程序可以兼容不同版本的系统,正常运行于不同版本的操作系统的移动设备。
发明内容
本发明的目的旨在解决上述至少一个问题,提供一种应用程序加固保护方法、装置及移动终端。
为了实现上述目的,本发明一种应用程序加固保护方法,包括以下步骤:
判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
如果存在,则由加固程序调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
如果不存在,则由加固程序调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
具体的,所述预设的兼容接口包括用于获取DEX文件在内存中的加载地址的接口函数。
具体的,所述预设的兼容接口包括用于从内存中加载DEX文件的接口函数。
具体的,所述预设的兼容接口包括用于从内存中加载OAT文件的接口函数。
具体的,所述预设的兼容接口包括用于将内存中的DEX文件转换为OAT文件的接口函数。
具体的,具体通过判断是否存在属性property而确定是否存在预设的兼容接口以及兼容接口的版本号。
具体的,所述property的名称为ro.magic.api.version。
具体的,所述非兼容接口函数具体指与所述系统版本相匹配的用于实现加固处理的系统接口函数。
进一步的,所述执行的加固处理步骤如下:
获取应用程序的安装包;
反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
可选的,所述指定的加解密策略包括如下中的一种或多种:
反调试策略、反Dump策略、反重打包策略、字符串加解密策略。
进一步的,在生成加固安装包之后,对所述加固安装包进行签名。
一种应用程序加固保护装置,包括:
判断单元:用于判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
第一加固单元:用于调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
第二加固单元:用于调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
具体的,所述预设的兼容接口包括用于获取DEX文件在内存中的加载地址的接口函数。
具体的,所述预设的兼容接口包括用于从内存中加载DEX文件的接口函数。
具体的,所述预设的兼容接口包括用于从内存中加载OAT文件的接口函数。
具体的,所述预设的兼容接口包括用于将内存中的DEX文件转换为OAT文件的接口函数。
具体的,所述判断单元具体通过判断是否存在属性property而确定是否存在预设的兼容接口以及兼容接口的版本号。
具体的,所述property的名称为ro.magic.api.version。
具体的,所述非兼容接口函数具体指与所述系统版本相匹配的用于实现加固处理的系统接口函数。
进一步的,所述第一加固单元或第二加固单元执行的加固处理步骤如下:
获取应用程序的安装包;
反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
可选的,所述指定的加解密策略包括如下中的一种或多种:
反调试策略、反Dump策略、反重打包策略、字符串加解密策略。
进一步的,还包括签名单元,在生成加固安装包之后,用于对所述加固安装包进行签名。
一种移动终端,包括权利要求12-22中任意一项所述的应用程序加固保护装置。
相比现有技术,本发明的方案具有以下优点:
本发明在Android系统底层增加用于执行加固处理的函数接口,绕过Android系统上层的虚拟机的一系列监管机制,从而使得加固程序对不同系统版本的应用程序进行加固处理后,加固后应用程序仍然可以在当前系统中正常运行,与当前系统版本完美兼容。由此使加固程序不受系统版本的限制,能够对任意系统版本的应用程序采用兼容接口加固,解决加固后应用程序和系统的兼容性问题,并进一步在现有的加固处理基础上提高了加固效率,给应用程序开发商带来更优质的应用程序加固体验。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明所述应用程序的加固处理流程图;
图2为本发明所述应用程序加固保护方法的原理示意图;
图3为本发明一个实施例的应用程序加固方法流程图;
图4为本发明所述应用程序加固保护装置的结构框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(PersonalDigital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global PositioningSystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本技术领域技术人员可以理解,这里所使用的远端网络设备,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云。在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。本发明的实施例中,远端网络设备、终端设备与WNS服务器之间可通过任何通信方式实现通信,包括但不限于,基于3GPP、LTE、WIMAX的移动通信、基于TCP/IP、UDP协议的计算机网络通信以及基于蓝牙、红外传输标准的近距无线传输方式。
本发明实施例所述方法可以实现反篡改、反窃取、反逆向、反调试等操作,从而实现对移动设备应用程序的加固保护,防止应用被逆向分析、篡改、反编译、二次打包,防止嵌入各类病毒、广告等恶意代码。其中,所述反篡改具体通过签名校验实现,有效避免应用被二次打包,杜绝盗版应用的产生;所述反窃取通过对内存数据进行变换处理和动态跟踪实现,有效防止数据被获取和修改;所述反逆向通过对代码进行加密压缩实现,防止破解者还原真实代码逻辑,避免被复制;所述反调试通过多重手段防止代码注入,以避免外挂、木马、窃取账号密码等行为。
参考图1所示,本发明提供以下实施例对应用程序的加固处理流程进行说明,所述加固处理流程具体包括:
步骤1:获取应用程序的安装包;
所述应用程序的安装包具体指基于Android系统的应用程序的APK,具体可由开发者上传应用程序的安装包,接收开发者通过加固应用的客户端上传的应用程序的安装包。
步骤2:反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
在开发者开发应用程序时,会对需要保护的安装包中的相应代码进行标注,不保护的不标注,生成原始的应用程序安装包。由此在进行加固处理的过程中,通过应用程序安装包中代码被标注的部分识别需要保护的代码,提取该部分代码,并将提取位置用NOP填充。
其中,所述NOP填充具体指NOP指令填充,使指令按字节对齐,从而用于减少取指令时的内存访问次数。通常用于控制时序,强制内存对齐,以防止流水线灾难。
步骤3:依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
采用指定加密策略对上述提取的需要保护的应用程序的代码进行加密,生成加固配置文件。其中,所述加解密策略包括反调试策略、反Dump策略、反重打包策略、字符串加解密策略中的一种或多种。所述加固配置文件主要包括应用程序中需要保护的代码。所述需要保护的代码可以包括对应用程序的可执行文件进行加壳和解壳的代码,还可以包括功能代码,在具体实施例中可以针对应用程序安装包中的每一类代码分别植入相应的功能代码,从而使得在程序执行过程中,无需一次性全部还原DEX文件,而仅在某一类代码被加载时,还原该类的执行代码,进而可以实现内存分割,防止内存dump等情况的产生。
步骤4:将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
将上述指定的加解密策略、加固配置文件以及加固程序添加到反编译后的安装包以进行编译生成加固安装包。所述加固程序在所述加固安装包运行在系统中时,对应用程序调用到的加固安装包中的保护代码,即加固配置文件,依据所述解密策略对其进行解密得到未加密之前的需要保护的代码,当该保护代码调用结束后,则由加固程序再依据所述加密策略对需要保护的代码进行加密,重新生成加固配置文件。
采用以上所述的加固处理方法,参考图2所示,基于Android系统的应用程序,提供一种应用程序加固保护方法,包括如下步骤:
S11、判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
为了在对应用程序进行加固的时候确定其对应的系统版本是否存在本发明所述的预设兼容接口函数,以选择相应的接口函数执行加固处理。由移动设备生产厂商预先增加property属性来表示目前实现的API版本号,从而通过读取该属性property判断当前的移动设备是否实现了兼容性API以及该兼容性API的版本号,所述property的名称为ro.magic.api.version。所述预设的兼容接口函数的具体实现由移动设备生产厂商完成,以便进行加固时调用相应的兼容接口函数。其中,所述预设的兼容接口函数包括:
1、用于获取DEX文件在内存中的加载地址的接口函数
Android4.4及以上版本的虚拟机采用ART机制代替了原来的Dalvik机制,而ART的核心是OAT文件,OAT文件作为一种Android的私有ELF文件格式,不仅包含了从DEX文件翻译过来的本地机器指令,还包含原来的DEX文件内容。在ART模式下,OAT文件会被加载到内存,但如果系统进行了更新或修改,则会导致OAT文件丢失,此时需要把DEX文件直接加载到内存,为了方便获取DEX文件,需要返回被加载的OAT文件中包含的DEX文件在内存中的地址。在具体实施例中,采用如下接口函数获取DEX文件在内存中的加载地址:
void*GetDexLoadedAddress(void);
其中,返回值为DEX文件在内存中的加载地址。
2、用于从内存中加载DEX文件的接口函数
获取到DEX文件在内存中的地址后,在具体实施例中,采用以下函数从内存中加载DEX文件,
DexFile*DexFileOpenMemory(const byte*base,size_t size,std::string*error_msg);
其中,参数base表示DEX文件在内存中的基地址,size表示DEX文件的大小,error_msg表示在加载错误的情况下,存放错误信息的指针。
当加载成功时,返回加载的DEX文件的对象指针;当加载失败时,返回空指针。
3、用于从内存中加载OAT文件的接口函数
在具体实施例中,采用如下接口函数从内存中加载OAT文件,具体如下:
OatFile*OatFileOpenMemory(const byte*base,size_t size,std::string*error_msg);
其中,参数base表示OAT文件在内存中的基地址,size表示OAT文件的大小,error_msg表示在加载错误的情况下,存放错误信息的指针。
当加载成功时,返回加载的OAT文件的对象指针;当加载失败时,返回空指针。
4、用于将内存中的DEX文件转换为OAT文件的接口函数
由于DEX文件是运行于Android4.4版本以前的系统,基于Dalvik虚拟机的可执行文件,故为了兼容Android4.4版本以后的系统,需要将DEX文件转换为适用于ART虚拟机的可执行文件OAT,在具体实施例中,采用以下函数实现:
void*Dex2Oat(byte*inBuf,size_t inSize,byte*outBuf,size_t*outsize,std::string*error_msg);
其中,参数inBuf表示DEX文件在内存中的地址,inSize表示DEX文件的大小,outBuf表示转换后OAT文件的大小,error_msg表示在转换错误的情况下,存放错误信息的指针。
当转换成功时,返回转换后的OAT文件在内存中的地址;当转换失败时,返回空指针。
通过检测是否存在property以确定应用程序对应的系统中是否存在上述兼容接口函数,以采用相应的兼容接口函数执行后续的加固处理。
S12、如果存在,则由加固程序调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
经检测如果存在所述预设的兼容接口函数,则调用设备生产厂商在系统中实现的上述兼容接口函数,对该系统版本对应的应用程序执行加固处理,从而生成该应用程序的第一类型的加固安装包。
其中,基于该预设兼容接口函数对应用程序执行的加固处理如图1所示,具体步骤为:
1、获取应用程序的安装包;
2、反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
3、依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
4、将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
执行上述加固处理过程中,为了使加固后应用程序和其对应的系统版本兼容,在加固程序中采用预设的兼容接口函数执行如加载DEX文件、加载OAT文件等处理。其中,当适用于Android系统4.4之前版本的系统时,调用用于获取DEX在内存中的加载地址接口函数和用于从内存中加载DEX文件的接口函数。当适用于Android系统4.4之后版本的系统时,调用用于从内存中加载OAT文件的接口函数或用于将内存中DEX文件转换为OAT文件的接口函数。当加固后应用程序运行于其对应版本的Android系统时,加固程序在对应用程序中受保护的代码进行动态加解密处理时,通过调用上述兼容接口获取相应的执行代码,从而绕过Android系统的虚拟机监管机制,屏蔽底层的处理,为开发者提供上层的兼容性接口,实现兼容不同系统版本的应用程序的加固程序。
S13、如果不存在,则由加固程序调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
经检测如果不存在所述预设的兼容接口函数,则适应性地选择调用与应用程序相对应的系统版本相匹配的用于实现加固处理的系统接口函数,对该系统版本对应的应用程序执行加固处理,从而生成该应用程序的第二类型的加固安装包。其中,基于该非兼容接口函数对应用程序执行的加固处理如图1所示,具体步骤为:
1、获取应用程序的安装包;
2、反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
3、依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
4、将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
所述非兼容接口函数随系统版本的不同而不同,需根据应用程序的系统运行环境、系统的版本进行综合判断可用的接口函数,加固程序适配不同的接口函数以完成对该系统版本的应用程序的加固处理。
在其他实施例中,还可以对获取的应用程序安装包进行安全扫描,以确定其是否存在恶意程序,对存在不安全因素的应用程序进行提示,显示不能加固的提示信息。由此,保证加固的应用程序为安全、合法的应用。
在执行完对应用程序的加固处理后,为了保证加固后应用程序可以通过身份验证,还对加固安装包进行签名,该签名与加固前的应用程序的原始安装包的签名一致。
本发明实施例所述方法,可以对应用程序安装包中的代码文件执行加固操作,从而提高应用程序的安全性,有效防止应用程序被反编译、被恶意篡改,保护应用程序的数据信息不被窃取,降低被植入病毒、加入广告、篡改支付渠道、被钓鱼信息劫持等风险。
图3是以本发明所述方法为基础而实现的一个具体应用实施例的流程示意图,用于进一步具体揭示本发明所述方法原理。以下结合其中所揭示的流程说明整个程序的设计逻辑,以供参照实现本发明方法:
1、判断应用程序对应的系统版本中是否存在预设的兼容接口函数,如果存在则执行步骤2;如果不存在则执行步骤3;
2、由加固程序调用预设的兼容接口函数对该系统版本的应用程序执行加固处理;
3、由加固程序调用非兼容接口函数对该系统版本的应用程序执行加固处理;
4、获取应用程序的安装包;
5、反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
6、依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
7、将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包;
8、对所述加固安装包进行签名。
参阅图4所示,为了以模块化的方式对本发明所述方法做进一步说明,本发明提供一种应用程序加固保护装置,包括判断单元11、第一加固单元12、第二加固单元13,以及签名单元14,其中,
判断单元11用于判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
为了在对应用程序进行加固的时候确定其对应的系统版本是否存在本发明所述的预设兼容接口函数,以选择相应的接口函数执行加固处理。由移动设备生产厂商预先增加property属性来表示目前实现的API版本号,从而由判断单元11通过读取该属性property判断当前的移动设备是否实现了兼容性API以及该兼容性API的版本号,所述property的名称为ro.magic.api.version。所述预设的兼容接口函数的具体实现由移动设备生产厂商完成,以便进行加固时调用相应的兼容接口函数。其中,所述预设的兼容接口函数包括:
1、用于获取DEX文件在内存中的加载地址的接口函数
Android4.4及以上版本的虚拟机采用ART机制代替了原来的Dalvik机制,而ART的核心是OAT文件,OAT文件作为一种Android的私有ELF文件格式,不仅包含了从DEX文件翻译过来的本地机器指令,还包含原来的DEX文件内容。在ART模式下,OAT文件会被加载到内存,但如果系统进行了更新或修改,则会导致OAT文件丢失,此时需要把DEX文件直接加载到内存,为了方便获取DEX文件,需要返回被加载的OAT文件中包含的DEX文件在内存中的地址。在具体实施例中,采用如下接口函数获取DEX文件在内存中的加载地址:
void*GetDexLoadedAddress(void);
其中,返回值为DEX文件在内存中的加载地址。
2、用于从内存中加载DEX文件的接口函数
获取到DEX文件在内存中的地址后,在具体实施例中,采用以下函数从内存中加载DEX文件,
DexFile*DexFileOpenMemory(const byte*base,size_t size,std::string*error_msg);
其中,参数base表示DEX文件在内存中的基地址,size表示DEX文件的大小,error_msg表示在加载错误的情况下,存放错误信息的指针。
当加载成功时,返回加载的DEX文件的对象指针;当加载失败时,返回空指针。
3、用于从内存中加载OAT文件的接口函数
在具体实施例中,采用如下接口函数从内存中加载OAT文件,具体如下:
OatFile*OatFileOpenMemory(const byte*base,size_t size,std::string*error_msg);
其中,参数base表示OAT文件在内存中的基地址,size表示OAT文件的大小,error_msg表示在加载错误的情况下,存放错误信息的指针。
当加载成功时,返回加载的OAT文件的对象指针;当加载失败时,返回空指针。
4、用于将内存中的DEX文件转换为OAT文件的接口函数
由于DEX文件是运行于Android4.4版本以前的系统,基于Dalvik虚拟机的可执行文件,故为了兼容Android4.4版本以后的系统,需要将DEX文件转换为适用于ART虚拟机的可执行文件OAT,在具体实施例中,采用以下函数实现:
void*Dex2Oat(byte*inBuf,size_t inSize,byte*outBuf,size_t*outsize,std::string*error_msg);
其中,参数inBuf表示DEX文件在内存中的地址,inSize表示DEX文件的大小,outBuf表示转换后OAT文件的大小,error_msg表示在转换错误的情况下,存放错误信息的指针。
当转换成功时,返回转换后的OAT文件在内存中的地址;当转换失败时,返回空指针。
通过判断单元11检测是否存在property以确定应用程序对应的系统中是否存在上述兼容接口函数,以采用相应的兼容接口函数执行后续的加固处理。
第一加固单元12用于调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
经检测如果存在所述预设的兼容接口函数,则由第一加固单元12调用设备生产厂商在系统中实现的上述兼容接口函数,对该系统版本对应的应用程序执行加固处理,从而生成该应用程序的第一类型的加固安装包。
其中,所述第一加固单元12基于该预设兼容接口函数对应用程序执行的加固处理如图1所示,具体步骤为:
1、获取应用程序的安装包;
2、反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
3、依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
4、将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
执行上述加固处理过程中,为了使加固后应用程序和其对应的系统版本兼容,第一加固单元12采用预设的兼容接口函数执行如加载DEX文件、加载OAT文件等处理。其中,当适用于Android系统4.4之前版本的系统时,调用用于获取DEX在内存中的加载地址接口函数和用于从内存中加载DEX文件的接口函数。当适用于Android系统4.4之后版本的系统时,调用用于从内存中加载OAT文件的接口函数或用于将内存中DEX文件转换为OAT文件的接口函数。当加固后应用程序运行于其对应版本的Android系统时,加固程序在对应用程序中受保护的代码进行动态加解密处理时,通过调用上述兼容接口获取相应的执行代码,从而绕过Android系统的虚拟机监管机制,屏蔽底层的处理,为开发者提供上层的兼容性接口,实现兼容不同系统版本的应用程序的加固程序。
第二加固单元13用于调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
经检测如果不存在所述预设的兼容接口函数,则由第二加固单元13适应性地选择调用与应用程序相对应的系统版本相匹配的用于实现加固处理的系统接口函数,对该系统版本对应的应用程序执行加固处理,从而生成该应用程序的第二类型的加固安装包。其中,第二加固单元13基于该非兼容接口函数对应用程序执行的加固处理如图1所示,具体步骤为:
1、获取应用程序的安装包;
2、反编译所述安装包,提取需要保护的代码,并将提取位置用NOP填充;
3、依据指定的加解密策略对提取的需要保护的代码进行加密处理,生成加固配置文件;
4、将所述加解密策略、加固配置文件和加固程序添加到反编译后的安装包中,编译生成加固安装包。
所述非兼容接口函数随系统版本的不同而不同,需根据应用程序的系统运行环境、系统的版本进行综合判断可用的接口函数,加固程序适配不同的接口函数以完成对该系统版本的应用程序的加固处理。
在其他实施例中,还可以对获取的应用程序安装包进行安全扫描,以确定其是否存在恶意程序,对存在不安全因素的应用程序进行提示,显示不能加固的提示信息。由此,保证加固的应用程序为安全、合法的应用。
在执行完对应用程序的加固处理后,为了保证加固后应用程序可以通过身份验证,还由签名单元14对加固安装包进行签名,该签名与加固前的应用程序的原始安装包的签名一致。
本发明还提供一种移动终端,其包括实现本发明所述应用程序加固保护方法的应用软件或相应的装置。具体地,以手机终端作为优选实施例,在手机终端上增加一个下载应用程序安装包的模块,当用户浏览应用市场并下载应用程序安装包时,由用户选择将应用程序发送至云端服务器,由云端服务器对相应的应用程序安装包进行加固处理,并将加固处理后的加固安装包反馈给手机客户端。
其中,云端服务器存储有加固的特征库,所述特征库中预先保存有多项特征信息,每项特征信息标识了应用程序安装包执行一类安全加固方法后的至少一种特征。该些特征信息由对现有加固方法进行测试分析得出,包括安全加固过程中加入的函数信息和/或动态链接库信息。一般而言,由于不同的加固方法的特征不同,故可以利用采用不同加固方法在加固过程中产生的改变作为特征信息,并将这些特征信息记录成所述加固特征库。
此外,由所述加固后应用程序的不同加固方法加入的函数、动态链接库以及其他文件信息构成该应用程序的加固特征,将该加固特征与云端服务器中的加固特征库进行匹配,由此可以判断出该应用程序是否经过加固以及采用的加固方法,从而可以确定该应用程序安装包的防破解能力。
为了进一步说明本发明所述技术方案,从使用产品的角度对本发明所述方法或装置的应用场景部署进行阐述:
在具体实施例中,基于本发明所述加固方法产生的加固系统可与应用市场结合使用,即与运营商或第三方应用市场合作。应用程序安装包被开发者上传到应用市场后,采用本发明所述实施例中提供的方法或装置对应用程序安装包做加固处理,然后将加固后的应用程序上架,用户即可通过应用市场获取应用程序安装包时,可根据需要下载经加固保护的应用程序安装包。
综上所述,本发明所述方法通过提供兼容接口函数执行加固处理,实现对不同系统版本的应用程序进行加固,使得加固后的应用程序兼容其相应的系统版本,解决加固后应用程序与系统之间的兼容性问题,能够适用于各种不同版本的应用程序的加固处理。同时,可以有效防止应用程序被反编译、被恶意篡改,保护应用程序的数据信息不被窃取,降低被植入病毒、加入广告、篡改支付渠道、被钓鱼信息劫持等风险。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种应用程序加固保护方法,其特征在于,包括以下步骤:
判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
如果存在,则由加固程序调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
如果不存在,则由加固程序调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
2.根据权利要求1所述的方法,其特征在于,所述预设的兼容接口包括用于获取DEX文件在内存中的加载地址的接口函数。
3.根据权利要求1所述的方法,其特征在于,所述预设的兼容接口包括用于从内存中加载DEX文件的接口函数。
4.根据权利要求1所述的方法,其特征在于,所述预设的兼容接口包括用于从内存中加载OAT文件的接口函数。
5.根据权利要求1所述的方法,其特征在于,所述预设的兼容接口包括用于将内存中的DEX文件转换为OAT文件的接口函数。
6.一种应用程序加固保护装置,其特征在于,包括:
判断单元:用于判断应用程序对应的系统版本中是否存在预设的兼容接口函数;
第一加固单元:用于调用预设的兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第一类型的加固安装包;
第二加固单元:用于调用非兼容接口函数对该系统版本的应用程序执行加固处理,以生成应用程序的第二类型的加固安装包。
7.根据权利要求6所述的装置,其特征在于,所述预设的兼容接口包括用于获取DEX文件在内存中的加载地址的接口函数。
8.根据权利要求6所述的装置,其特征在于,所述预设的兼容接口包括用于从内存中加载DEX文件的接口函数。
9.根据权利要求6所述的装置,其特征在于,所述预设的兼容接口包括用于从内存中加载OAT文件的接口函数。
10.一种移动终端,其特征在于,包括权利要求6-9中任意一项所述的应用程序加固保护装置。
CN201510424887.1A 2015-07-17 2015-07-17 应用程序加固保护方法、装置及移动终端 Active CN104965712B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510424887.1A CN104965712B (zh) 2015-07-17 2015-07-17 应用程序加固保护方法、装置及移动终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510424887.1A CN104965712B (zh) 2015-07-17 2015-07-17 应用程序加固保护方法、装置及移动终端

Publications (2)

Publication Number Publication Date
CN104965712A true CN104965712A (zh) 2015-10-07
CN104965712B CN104965712B (zh) 2018-04-20

Family

ID=54219746

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510424887.1A Active CN104965712B (zh) 2015-07-17 2015-07-17 应用程序加固保护方法、装置及移动终端

Country Status (1)

Country Link
CN (1) CN104965712B (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760721A (zh) * 2016-01-29 2016-07-13 北京奇虎科技有限公司 一种软件加固方法和系统
CN106228041A (zh) * 2016-07-21 2016-12-14 北京理工大学 一种针对Android预编译的代码保护方法
CN106295370A (zh) * 2016-08-19 2017-01-04 北京奇虎科技有限公司 一种加固安装包的动态链接库dll文件的方法和装置
CN107301126A (zh) * 2017-06-21 2017-10-27 努比亚技术有限公司 应用接口检测方法、设备和计算机可读存储介质
WO2017206899A1 (zh) * 2016-05-31 2017-12-07 广东欧珀移动通信有限公司 信息处理方法及相关设备
CN108897570A (zh) * 2018-06-20 2018-11-27 大国创新智能科技(东莞)有限公司 基于云计算与人工智能的版本兼容方法和机器人系统
CN109086063A (zh) * 2018-07-27 2018-12-25 中国联合网络通信集团有限公司 软件更新方法、文件加密方法、装置及存储介质
CN109753412A (zh) * 2019-01-25 2019-05-14 Oppo广东移动通信有限公司 异常处理方法、装置、移动终端以及存储介质
CN109766101A (zh) * 2018-12-12 2019-05-17 武汉掌游科技有限公司 一种Android自动打包方法及系统
CN109977671A (zh) * 2019-03-14 2019-07-05 西安电子科技大学 一种基于编译器修改的Android锁屏型勒索软件检测方法
CN110119600A (zh) * 2019-03-28 2019-08-13 江苏通付盾信息安全技术有限公司 基于应用程序安装包的程序加固方法及装置
CN110244976A (zh) * 2019-05-21 2019-09-17 深圳壹账通智能科技有限公司 应用程序版本切换方法及装置
CN110750282A (zh) * 2019-10-14 2020-02-04 支付宝(杭州)信息技术有限公司 用于运行应用程序的方法、装置及gpu节点
CN110765424A (zh) * 2019-10-22 2020-02-07 福州汇思博信息技术有限公司 一种android应用加固方法及计算机设备
CN111026439A (zh) * 2019-11-22 2020-04-17 广州华多网络科技有限公司 应用程序的兼容方法、装置、设备及计算机存储介质
CN111597570A (zh) * 2020-05-19 2020-08-28 展讯半导体(南京)有限公司 应用程序加固方法、装置、设备和存储介质
US11151987B2 (en) * 2018-06-29 2021-10-19 Baidu Online Network Technology (Beijing) Co., Ltd. Method and system for interacting with third-party application

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544046A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动应用的软件加固方法
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN104462959A (zh) * 2014-12-04 2015-03-25 北京奇虎科技有限公司 一种安卓应用的加固保护方法、服务器和系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544046A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动应用的软件加固方法
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN104462959A (zh) * 2014-12-04 2015-03-25 北京奇虎科技有限公司 一种安卓应用的加固保护方法、服务器和系统

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760721A (zh) * 2016-01-29 2016-07-13 北京奇虎科技有限公司 一种软件加固方法和系统
CN105760721B (zh) * 2016-01-29 2019-02-12 北京奇虎科技有限公司 一种软件加固方法和系统
WO2017206899A1 (zh) * 2016-05-31 2017-12-07 广东欧珀移动通信有限公司 信息处理方法及相关设备
US11016860B2 (en) 2016-05-31 2021-05-25 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method for information processing and related device
US10628271B2 (en) 2016-05-31 2020-04-21 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method for information processing and related device
CN106228041A (zh) * 2016-07-21 2016-12-14 北京理工大学 一种针对Android预编译的代码保护方法
CN106228041B (zh) * 2016-07-21 2018-11-20 北京理工大学 一种针对Android预编译的代码保护方法
CN106295370B (zh) * 2016-08-19 2020-02-28 北京奇虎科技有限公司 一种加固安装包的动态链接库dll文件的方法和装置
CN106295370A (zh) * 2016-08-19 2017-01-04 北京奇虎科技有限公司 一种加固安装包的动态链接库dll文件的方法和装置
CN107301126A (zh) * 2017-06-21 2017-10-27 努比亚技术有限公司 应用接口检测方法、设备和计算机可读存储介质
CN108897570A (zh) * 2018-06-20 2018-11-27 大国创新智能科技(东莞)有限公司 基于云计算与人工智能的版本兼容方法和机器人系统
US11151987B2 (en) * 2018-06-29 2021-10-19 Baidu Online Network Technology (Beijing) Co., Ltd. Method and system for interacting with third-party application
CN109086063A (zh) * 2018-07-27 2018-12-25 中国联合网络通信集团有限公司 软件更新方法、文件加密方法、装置及存储介质
CN109766101A (zh) * 2018-12-12 2019-05-17 武汉掌游科技有限公司 一种Android自动打包方法及系统
CN109753412A (zh) * 2019-01-25 2019-05-14 Oppo广东移动通信有限公司 异常处理方法、装置、移动终端以及存储介质
CN109977671B (zh) * 2019-03-14 2020-10-30 西安电子科技大学 一种基于编译器修改的Android锁屏型勒索软件检测方法
CN109977671A (zh) * 2019-03-14 2019-07-05 西安电子科技大学 一种基于编译器修改的Android锁屏型勒索软件检测方法
CN110119600A (zh) * 2019-03-28 2019-08-13 江苏通付盾信息安全技术有限公司 基于应用程序安装包的程序加固方法及装置
CN110244976A (zh) * 2019-05-21 2019-09-17 深圳壹账通智能科技有限公司 应用程序版本切换方法及装置
CN110750282A (zh) * 2019-10-14 2020-02-04 支付宝(杭州)信息技术有限公司 用于运行应用程序的方法、装置及gpu节点
CN110750282B (zh) * 2019-10-14 2021-04-02 支付宝(杭州)信息技术有限公司 用于运行应用程序的方法、装置及gpu节点
CN110765424B (zh) * 2019-10-22 2021-07-09 福州汇思博信息技术有限公司 一种android应用加固方法及计算机设备
CN110765424A (zh) * 2019-10-22 2020-02-07 福州汇思博信息技术有限公司 一种android应用加固方法及计算机设备
CN111026439A (zh) * 2019-11-22 2020-04-17 广州华多网络科技有限公司 应用程序的兼容方法、装置、设备及计算机存储介质
CN111026439B (zh) * 2019-11-22 2023-03-24 广州方硅信息技术有限公司 应用程序的兼容方法、装置、设备及计算机存储介质
CN111597570A (zh) * 2020-05-19 2020-08-28 展讯半导体(南京)有限公司 应用程序加固方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN104965712B (zh) 2018-04-20

Similar Documents

Publication Publication Date Title
CN104965712A (zh) 应用程序加固保护方法、装置及移动终端
US10740443B2 (en) System and method for code obfuscation of application
CN104462959B (zh) 一种安卓应用的加固保护方法、服务器和系统
CN104217140B (zh) 一种应用程序的加固方法和装置
US10176327B2 (en) Method and device for preventing application in an operating system from being uninstalled
CN106295255B (zh) 应用程序的加固方法和装置
CN104246788A (zh) 检测并防止恶意移动应用程序的安装
EP2715589A1 (en) System and method for preserving references in sandboxes
AU2012262867A1 (en) System and method for preserving references in sandboxes
JP6815386B2 (ja) アプリケーションのコードを保護するためのシステム、方法およびプログラム
CN104239757A (zh) 应用程序防止逆向的方法及装置、运行方法及终端
US20180129794A1 (en) Method for Protecting Dex File from Decompilation in Android System
CN104517054A (zh) 一种检测恶意apk的方法、装置、客户端和服务器
JP2013545172A (ja) ユーザによってダウンロードされるコンピュータシステムに適合したソフトウェアプログラムを提供するためのデバイスおよび方法
US10379886B2 (en) Method and system for enhancing loading speed of intermediate language file
US20140351947A1 (en) Method of generating execution file for mobile device, method of executing application of mobile device, device to generate application execution file, and mobile device
CN111045722A (zh) 智能合约打包方法、装置、系统、计算机设备及存储介质
CN107066888B (zh) 可扩展的可信用户接口、方法和电子设备
KR101823226B1 (ko) 코드 보호 방법 및 시스템
CN109902500B (zh) 一种通过链接库实现业务调用数据安全的方法及系统
CN107911335A (zh) 校验统一资源标识符uri的方法、装置和系统
US11496304B2 (en) Information processing device, information processing method, and storage medium
KR20150047001A (ko) 애플리케이션 프로그램 보호 방법 및 장치
CN111610982B (zh) 一种应用程序开发的方法、装置和相关系统
CN106648770A (zh) 一种应用程序安装包的生成方法、加载方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220715

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

TR01 Transfer of patent right