CN105740703A - 一种应用程序的加固方法及装置 - Google Patents

一种应用程序的加固方法及装置 Download PDF

Info

Publication number
CN105740703A
CN105740703A CN201610065152.9A CN201610065152A CN105740703A CN 105740703 A CN105740703 A CN 105740703A CN 201610065152 A CN201610065152 A CN 201610065152A CN 105740703 A CN105740703 A CN 105740703A
Authority
CN
China
Prior art keywords
code
file
application program
installation
installation 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.)
Pending
Application number
CN201610065152.9A
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 Qihoo Technology Co Ltd
Qizhi Software Beijing 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 CN201610065152.9A priority Critical patent/CN105740703A/zh
Publication of CN105740703A publication Critical patent/CN105740703A/zh
Pending legal-status Critical Current

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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • 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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (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)
  • Storage Device Security (AREA)

Abstract

本发明公开一种应用程序的加固方法及装置,所述方法包括:获取应用程序的安装文件;在所述安装文件中插入广告代码;对插入广告代码后的安装文件进行加固,生成加固安装文件。本发明实施例提供的应用程序的加固方法及装置,向应用程序中插入广告代码,能够增加开发者的收入,同时,还能够有效地阻止恶意软件获取应用程序的关键信息,从而恶意软件也就无法实现针对该应用程序的破解、反编译、二次打包和木马植入等恶意行为,提高了应用程序的安全性。

Description

一种应用程序的加固方法及装置
技术领域
本发明涉及电子技术领域,尤其涉及一种应用程序的加固方法及装置。
背景技术
安卓(Android)平台发展迅速,已经逐渐成为了移动终端的最普及的操作系统,同时基于安卓系统的应用程序的数目也十分巨大。
与其他移动终端操作系统相比,安卓系统为应用开发者提供了更多的功能接口,其中很多系统底层接口,提高了系统的可扩展性,但同时也为恶意软件提供了便利,针对安卓系统的木马等恶意软件也更容易被实现,例如应用开发者以外的第三方能够将应用程序加入木马后提供给用户,从而实现窃取用户隐私或骗取用户资费等行为,需要应用开发者花费较多的时间和精力在对应用程序的保护上,并且,应用开发者在开发安卓应用程序时一般会添加广告来增加收入,所以应用开发者还会花费较多的时间和精力寻找到广告的优质来源,而应用开发者如果将花费在对应用程序的保护和广告上的时间和精力应用在开发应用程序的功能上则能够获得更多或更好的产出。
因此,现有技术中亟需向应用开发者提供一种能够在对应用程序加固时插入广告的方法或装置,以避免应用开发者花费较多的时间和精力去处理对应用程序的保护和广告的相关事务。
发明内容
本发明实施例通过提供一种应用程序的加固方法及装置,满足了现有技术中对能够在对应用程序加固时插入广告的方法或装置的需求。
本发明实施例第一方面提供了一种应用程序的加固方法,所述方法包括:
获取应用程序的安装文件;
在所述安装文件中插入广告代码;
对插入广告代码后的安装文件进行加固,生成加固安装文件。
可选地,在所述安装文件中插入广告代码,包括:
解析所述安装文件中的可执行文件,获得第一代码;
将所述广告代码插入到所述第一代码中,获得第二代码。
可选地,所述将所述广告代码插入到所述第一代码中,包括:
在所述应用程序的显示流程的最前方插入所述广告代码。
可选地,所述在所述应用程序的显示流程的最前方插入所述广告代码,包括:
获取所述安装文件的入口节点标签;
将所述广告代码插入到所述入口节点标签之前,使得所述应用程序在显示所述入口节点标签之前先执行所述广告代码。
可选地,所述将所述广告代码插入到所述入口节点标签之前,包括:
将广告框架代码和广告内容代码插入所述入口节点标签之前。
可选地,所述对插入广告代码后的安装文件进行加固,包括:
将保护代码插入所述第二代码中获得第三代码,并对所述第三代码进行加密处理获得第一可执行文件;
按照所述保护代码的入口点修改所述安装文件中的全局配置文件获得第一全局配置文件;
将所述第一可执行文件和所述第一全局配置文件重新打包生成加固安装包。
可选地,所述保护代码包括对所述可执行文件进行加壳和解壳的代码。
可选地,所述保护代码还包括解壳触发代码和和反编译工具的崩溃代码;
所述将保护代码插入所述第二代码中获得第三代码,包括:在所述第二代码中的每一类的代码中置入解壳触发代码和反编译工具的崩溃代码,所述解壳触发代码被执行时,调用所述解壳代码对该类进行解密。
可选地,所述对所述第三代码进行加密处理获得第一可执行文件,包括:
抽取所述第三代码的至少一部分进行重构,获得重构的代码;
植入用于解密所述重构的代码的链接库,所述链接库在解密过程中由java本地接口加载。
可选地,所述安装文件为安卓软件安装文件,所述全局配置文件为manifest文件,所述可执行文件为dex文件。
可选地,在所述生成加固安装文件之后,所述方法还包括:
对所述加固安装文件进行签名。
本发明实施例第二方面还提供了一种应用程序的加固装置,所述装置包括:
获取单元,用于获取应用程序的安装文件;
插入单元,用于在所述安装文件中插入广告代码;
加固单元,用于对插入广告代码后的安装文件进行加固,生成加固安装文件。
可选地,所述插入单元具体用于解析所述安装文件中的可执行文件,获得第一代码,并将所述广告代码插入到所述第一代码中,获得第二代码。
可选地,所述插入单元具体用于在所述应用程序的显示流程的最前方插入所述广告代码。
可选地,所述插入单元具体用于获取所述安装文件的入口节点标签,并将所述广告代码插入到所述入口节点标签之前,使得所述应用程序在显示所述入口节点标签之前先执行所述广告代码。
可选地,所述插入单元具体用于将广告框架代码和广告内容代码插入所述入口节点标签之前。
可选地,所述加固单元具体用于将保护代码插入所述第二代码中获得第三代码,并对所述第三代码进行加密处理获得第一可执行文件,并按照所述保护代码的入口点修改所述安装文件中的全局配置文件获得第一全局配置文件,并将所述第一可执行文件和所述第一全局配置文件重新打包生成加固安装包。
可选地,所述加固单元具体用于抽取所述第三代码的至少一部分进行重构,获得重构的代码,并植入用于解密所述重构的代码的链接库,所述链接库在解密过程中由java本地接口加载。
可选地,所述装置被配置为对安卓软件安装文件进行加固,所述全局配置文件为manifest文件,所述可执行文件为dex文件。
可选地,所述装置还包括签名单元,所述签名单元用于在所述加固单元生成所述加固安装文件之后,对所述加固安装文件进行签名。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
1、由于本发明实施例提供的应用程序的加固方法及装置,采用了获取应用程序的安装文件,并在安装文件中插入广告代码,并对插入广告代码后的安装文件进行加固,生成加固安装文件的技术方案,向应用程序中插入广告代码,能够增加开发者的收入,同时,还能够有效地阻止恶意软件获取应用程序的关键信息,从而恶意软件也就无法实现针对该应用程序的破解、反编译、二次打包和木马植入等恶意行为,提高了应用程序的安全性。
2、由于将保护代码直接插入可执行文件的代码内,相应修改全局配置文件的程序入口,实现了可执行文件的重构,从而在程序运行时,首先执行保护代码,以进行相应解密处理,直接对可执行文件进行处理,增加了可执行文件防护的灵活度,进一步提高了软件安装包的安全性。
3、每一类的代码中置入解壳触发代码和和反编译工具的崩溃代码,在每一类运行时,单独对运行的类进行解密,可以有效防止破解工具进行内存截取。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的应用程序的加固方法的流程图;
图2为本发明实施例提供的应用程序的加固装置的模块图。
具体实施方式
本发明实施例通过提供一种应用程序的加固方法及装置,满足了现有技术中对能够在对应用程序加固时插入广告的方法或装置的需求。
本发明实施例的技术方案为解决上述技术问题,总体思路如下:
获取应用程序的安装文件;例如,以安卓系统为例,该应用程序可以是应用开发者提供的任意的应用程序,安装文件可以是该应用程序的APK文件,APK是Androidapplicationpackagefile的缩写,简称APK文件,即Android安装包,也可以理解为Android终端上安装的应用软件;
在安装文件中插入广告代码;例如,可以是在安装文件中插入符合应用开发者的要求的广告代码,应用开发者的要求可以包括收入如整体价格等,广告类型如图片广告还是视频广告等,广告领域如食品领域广告、游戏领域广告等等,广告针对人群等;
对插入广告代码后的安装文件进行加固,生成加固安装文件;例如通过应用程序的加固技术对插入广告代码后的安装文件进行加固,以对该应用程序的安装文件进行保护。
可以看出,由于本发明实施例提供的应用程序的加固方法及装置,采用了获取应用程序的安装文件,并在安装文件中插入广告代码,并对插入广告代码后的安装文件进行加固,生成加固安装文件的技术方案,向应用程序中插入广告代码,能够增加开发者的收入,同时,还能够有效地阻止恶意软件获取应用程序的关键信息,从而恶意软件也就无法实现针对该应用程序的破解、反编译、二次打包和木马植入等恶意行为,提高了应用程序的安全性。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
请参考图1,图1为本发明实施例提供的应用程序的加固方法的流程图,如图1所示,该方法包括:
101:获取应用程序的安装文件;
102:在安装文件中插入广告代码;
103:对插入广告代码后的安装文件进行加固,生成加固安装文件。
在接下来的部分中,将以应用程序具体为安卓系统中的应用程序,安装文件具体为APK文件为例,来介绍本发明实施例中的技术方案。
在介绍本实施例中的方案之前,先分析一下安卓系统中应用程序的安装文件。
对于安卓系统的安装文件而言,全局配置文件为Manifest.xml,可执行文件为dex文件。
在全局配置文件AndroidManifest.xml中列出的各模块的入口信息:
AndroidManifest.xml是每个APK文件所必需的全局描述文件,里面列出了Android安装包中应用的每个模块的入口信息。在Android系统中,只有在AndroidManifest.xml中列出了的模块,才能够被系统调用。Android平台下的木马,往往会伪装成正常的应用或游戏来诱骗用户安装,其中有很多木马就是寄生在一个正常的应用或游戏中,用户运行它的时候,看上去是原来的软件或游戏,但寄生在其中的木马模块在合适的时机就被激活,从而感染用户的手机。而因为Android系统要求所有的模块都要在AndroidManifest.xml中列出,这就为寻找寄生的木马提高了重要线索。因此,AndroidManifest.xml中列出的各模块的信息,也是识别恶意软件的重要特征。
全局配置文件AndroidManifest.xml,它存储在项目层次中的最底层,全局配置文件AndroidManifest.xml可以定义应用程序及其组件的结构和元数据。AndroidManifest.xml包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用目的过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。它还提供了各种属性来详细地说明应用程序的元数据(图标或者主题)以及额外的可用来进行安全设置和单元测试顶级节点。
manifest标签包含了一些节点(node),它们定义了应用程序组件、安全设置和组成应用程序的测试类。下面列出了一些常用的manifest节点标签:
应用节点标签(application),清单内一般只包含一个application节点。application节点使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。application节点还可以作为一个包含了活动、服务、内容提供器和广播接收器标签的容器,用来指定应用程序组件。
活动节点标签(activity),应用程序显示的每一个活动(Activity)都要求有一个activity标签。
服务节点标签(service),service标签和activity标签一样,应用程序中使用的每一个服务类(Service)都要创建一个新的service标签。
Android应用通常是用Java语言开发的,它用Android开发工具编译之后变成了二进制的字节码(bytecode),这些字节码被打包成classes.dex文件,由Android平台的Dalvik虚拟机来解释执行。为了能够调用Android系统功能,Android系统提供了一套运行环境(AndroidFramework),Android应用调用系统各功能都是通过调用AndroidFramework的库来实现的。
另一方面,Android系统也支持应用程序通过JNI或者nativeexecutable直接运行。此时应用执行的是直接在CPU上运行的二进制机器码,不需要经过虚拟机解释,可以直接调用Android库如libc、WebKit、SQLite、OpenGL/ES等来调用系统各功能。如果Android应用要通过JNI或者nativeexecutable运行,就需要将要执行的代码编译成ELF文件格式。ELF是ExecutableandLinkableFormat的缩写,是Android/Linux操作系统中可执行程序、共享库的文件格式。
在本发明的一种优选实施例应用于Android系统中时,可执行文件包括Dex文件,Dex文件主要是APK中的classes.dex文件,即DalvikExecutable(Dalvik虚拟机可执行文件)。公知的是,Dalvik是用于Android平台的Java虚拟机。Dalvik虚拟机(DalvikVM)是Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即DalvikExecutable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。虚拟机的线程机制,内存分配和管理,等等都是依赖底层操作系统而实现的,一般包含在apk文件里的dex文件会在运行时被优化,优化后的文件将被保存在缓存中。
可执行文件还可以包括扩展名为.jar的文件。Android安装包中的JAR文件其实就是Dex文件,只不过其扩展名为.jar。
根据以上对安卓程序安装包的分析,AndroidManifest.xml描述了应用的名字、版本、权限、引用的库文件等信息,因此,安卓系统在运行程序时首先需要解压apk文件,然后获取编译后的androidmanifest.xml文件中配置信息,执行dex程序。Apk文件在打包过程中,把所有的字节码文件转成dex文件(classes.dex)然后使用安卓打包工具将dex文件,资源文件以及AndroidManifest.xml文件组合成一个应用程序包(APK)。
结合上述对安卓程序安装包的分析,在步骤101中,获取应用程序的安装文件,具体可以是通过相应的数据接口来获得应用开发者发送的应用程序的安装文件,例如,可以通过网页、客户端等方式提供一数据接口,应用开发者即通过该数据接口传输待处理的应用程序的安装文件,在此就不再赘述了。
在步骤102中,在安装文件中插入广告代码可以包括:解析安装文件中的可执行文件,获得第一代码;将广告代码插入到第一代码中,获得第二代码。
具体地,可以是将原应用程序的安装包中dex文件解析为第一代码,从而将广告代码插入到第一代码中,获得插入了广告代码的第二代码。
当然了,在安卓系统中,应用程序的首页为一个较为重要的广告位置,在加载广告的时候,应用程序还能够同时加载应用程序所需要的其他组件,这样能够避免给用户以该应用程序启动缓慢的体验,所以在本实施例中,将广告代码插入到第一代码中,是在应用程序的显示流程的最前方插入广告代码。
为了在应用程序的显示流程的最前方插入广告代码,在本实施例中,可以先获取安装文件的入口节点标签,在安卓系统中,安装文件的入口节点标签可以是通过在AndroidManifest.xml中查找节点标签的名称,查找到具有“android.intent.action.MAIN”这一名称的节点标签即为该安装文件的入口节点标签;然后再将广告代码插入到入口节点标签之前,使得应用程序在显示入口节点标签之前,先执行广告代码,从而能够在应用程序的首页显示该广告代码。当然,此时还可以根据需要更改该应用程序的配置文件,在此就不再赘述了。
当然,在另一实施例中,还可以通过定义相关的函数并进行在应用程序中进行合适的调用,从而能够在应用程序的显示流程的最前方插入广告代码,在此就不再赘述了。
在本实施例中,广告代码具体可以包括广告框架代码和广告内容代码,广告框架代码是指能够在安卓系统中构建一个框架的代码,广告内容代码是指在广告框架代码构建的框架中显示广告的代码,在实际应用中,该广告内容代码可以是一个具体的广告的代码,也可以是根据服务器下发的数据进行显示的代码,在此不做限制。
在步骤103中,对插入广告代码后的安装文件进行加固,可以包括:将保护代码插入第二代码中获得第三代码,并对第三代码进行加密处理获得第一可执行文件;按照保护代码的入口点修改安装文件中的全局配置文件获得第一全局配置文件;将第一可执行文件和第一全局配置文件重新打包生成加固安装包。
具体来讲,保护代码包括对可执行文件进行加壳和解壳的代码,从而实现对应用程序的加固。加壳和解壳的代码可以根据实际情况的需要进行设置,在此就不再赘述了。
在本实施例中,将保护代码插入到第二代码中,可以是将对安卓安装包实现加密保护的保护代码保存到安卓安装包的lib目录下的SO文件中,具体可以通过如下步骤来实现:
首先,根据SO文件的相关信息,修改壳程序文件中的相关配置信息。在本实施例中,修改壳程序文件中的相关配置信息可以是:修改壳程序文件中的校验码、SHA1签名和文件长度的信息中的一种或多种;
然后,根据包含SO文件的壳程序文件的文件信息,修改安卓安装包中的全局配置文件。该全局配置文件即上文中介绍的AndroidManifest.xml文件,记录了应用的包名、版本号、权限、引用的库文件、模块入口、类等信息,当安卓安装包中放入包含SO文件的壳程序文件时,全局配置文件随之改变,修改后的全局配置文件覆盖原全局配置文件。
在具体实施过程中,保护代码还包括解壳触发代码和和反编译工具的崩溃代码。这样,在将保护代码插入到第二代码中获得第三代码的过程中,可以在第二代码中的每一类代码中置入解壳触发代码和反编译工具的崩溃代码,解壳触发代码被执行时,调用解壳代码对该类进行解密,保证应用程序的功能的正常执行。这样,在安卓系统运行该应用程序时,根据全局配置文件的应用节点标签,会首先执行保护代码,以对该类的程序进行解密。由于对每类的代码分别可以植入保护代码,因此,不需要一次性全部还原全部dex,仅在该类被加载时,才需要还原该类的执行代码,实现了内存分割,同时在其他应用程序或者系统对加固的应用程序进行反编译时,反编译的崩溃代码能够使得这类其他应用程序或者系统的反编译发生崩溃,避免了应用程序被反编译,从而提高了应用程序的安全性。
在将第三代码进行加密处理获得第一可执行文件时,具体可以包括抽取第三代码的至少一部分进行重构,例如可以抽取第三代码的全部内容或者部分内容进行重构,从而获得重构的代码;植入用于解密重构的代码的链接库,链接库在解密过程中由java本地接口加载。
可以看出,本发明实施例提供的加固方法通过对第三代码的至少一部分进行重构,将dex文件中各个节数据修改重组后重定位并生成新dex,由于直接对dex进行处理,可以增加dex防护的灵活度,如对dex进行内存分割重组,可有效防止内存截取操作(也即内存dump操作)等。
在将第三代码进行加密处理获得第一可执行文件之后,即能够按照保护代码的入口点配置新建的应用节点标签,获得第一配置文件,从而保证应用程序在安卓系统中运行的时候保护代码能够被执行。
最后,即能够将第一可执行文件和第一全局配置文件重新打包生成加固安装包。
当然,由于加固后的软件安装包可以可能无法被静态和动态扫描,有可能会被一些恶意代码利用,因此需要首先对软件安装包进行安全扫描,保证不对恶意程序进行加固处理,此时需要获取相关开发信息和加固参数,用于对软件安装包进行安全扫描,对恶意文件及时处理。
对软件安装包进行安全扫描的一种可选流程为:
从Android安装包中提取出指定的特征信息;指定的特征信息即指上述列举的各项重要特征,如包名、版本号、数字签名、AndroidManifest.xml中列出的各模块的入口信息、Dex文件和ELF文件、Android安装包目录下各文件的MD5值等。
在预置的安全识别库中查找与指定的单个特征信息或其组合相匹配的特征记录;其中,安全识别库中包含特征记录及特征记录对应的安全级别,每条特征记录中包含单个特征信息或特征信息的组合;
将查找到的特征记录对应的安全级别进行输出。
当查找出的安全级别低于预设的安全级别,则安装包的上传者提示安全检测结果,并提示无法进行加固。
在具体实施过程中,生成加固安装包之后还需要对加固安装包进行签名。签名的方式可以下发加固安装包,由用户使用其身份标识对加固安装包进行签名,或者可以利用用户上传的身份标识对加固安装包进行签名,在此不做限制。
可以看出,由于本发明实施例提供的应用程序的加固方法及装置,采用了获取应用程序的安装文件,并在安装文件中插入广告代码,并对插入广告代码后的安装文件进行加固,生成加固安装文件的技术方案,向应用程序中插入广告代码,能够增加开发者的收入,同时,还能够有效地阻止恶意软件获取应用程序的关键信息,从而恶意软件也就无法实现针对该应用程序的破解、反编译、二次打包和木马植入等恶意行为,提高了应用程序的安全性。
进一步地,由于将保护代码直接插入可执行文件的代码内,相应修改全局配置文件的程序入口,实现了可执行文件的重构,从而在程序运行时,首先执行保护代码,以进行相应解密处理,直接对可执行文件进行处理,增加了可执行文件防护的灵活度,进一步提高了软件安装包的安全性。
再进一步地,每一类的代码中置入解壳触发代码和和反编译工具的崩溃代码,在每一类运行时,单独对运行的类进行解密,可以有效防止破解工具进行内存截取。
基于同一发明构思,本申请另一实施例提供一种实施本发明实施例中应用程序的加固方法的装置,请参考图2,图2为本发明实施例提供的应用程序的加固装置的模块图,如图2所示,该装置包括:
获取单元201,用于获取应用程序的安装文件;
插入单元202,用于在安装文件中插入广告代码;
加固单元203,用于对插入广告代码后的安装文件进行加固,生成加固安装文件。
在具体实施过程中,插入单元202具体用于解析安装文件中的可执行文件,获得第一代码,并将广告代码插入到第一代码中,获得第二代码。
在具体实施过程中,插入单元202具体用于在应用程序的显示流程的最前方插入广告代码。
在具体实施过程中,插入单元202具体用于获取安装文件的入口节点标签,并将广告代码插入到入口节点标签之前,使得应用程序在显示入口节点标签之前先执行广告代码。
在具体实施过程中,插入单元202具体用于将广告框架代码和广告内容代码插入入口节点标签之前。
在具体实施过程中,加固单元203具体用于将保护代码插入第二代码中获得第三代码,并对第三代码进行加密处理获得第一可执行文件,并按照保护代码的入口点修改安装文件中的全局配置文件获得第一全局配置文件,并将第一可执行文件和第一全局配置文件重新打包生成加固安装包。
在具体实施过程中,加固单元203具体用于抽取第三代码的至少一部分进行重构,获得重构的代码,并植入用于解密重构的代码的链接库,链接库在解密过程中由java本地接口加载。
在具体实施过程中,装置被配置为对安卓软件安装文件进行加固,全局配置文件为manifest文件,可执行文件为dex文件。
在具体实施过程中,装置还包括签名单元204,签名单元204用于在加固单元203生成加固安装文件之后,对加固安装文件进行签名。
由于本实施例所介绍的装置为实施本发明实施例中应用程序的加固方法所采用的装置,故而基于本发明实施例中所介绍的应用程序的加固方法,本领域所属技术人员能够了解本实施例的装置的具体实施方式以及其各种变化形式,所以在此对于该装置如何实现本发明实施例中的方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中应用程序的加固方法所采用的装置,都属于本申请所欲保护的范围。
上述本发明实施例中的技术方案,至少具有如下的技术效果或优点:
1、由于本发明实施例提供的应用程序的加固方法及装置,采用了获取应用程序的安装文件,并在安装文件中插入广告代码,并对插入广告代码后的安装文件进行加固,生成加固安装文件的技术方案,向应用程序中插入广告代码,能够增加开发者的收入,同时,还能够有效地阻止恶意软件获取应用程序的关键信息,从而恶意软件也就无法实现针对该应用程序的破解、反编译、二次打包和木马植入等恶意行为,提高了应用程序的安全性。
2、由于将保护代码直接插入可执行文件的代码内,相应修改全局配置文件的程序入口,实现了可执行文件的重构,从而在程序运行时,首先执行保护代码,以进行相应解密处理,直接对可执行文件进行处理,增加了可执行文件防护的灵活度,进一步提高了软件安装包的安全性。
3、每一类的代码中置入解壳触发代码和和反编译工具的崩溃代码,在每一类运行时,单独对运行的类进行解密,可以有效防止破解工具进行内存截取。
本发明实施例公开了:
A1、一种应用程序的加固方法,其特征在于,所述方法包括:
获取应用程序的安装文件;
在所述安装文件中插入广告代码;
对插入广告代码后的安装文件进行加固,生成加固安装文件。
A2、根据A1所述的方法,其特征在于,在所述安装文件中插入广告代码,包括:
解析所述安装文件中的可执行文件,获得第一代码;
将所述广告代码插入到所述第一代码中,获得第二代码。
A3、根据A2所述的方法,其特征在于,所述将所述广告代码插入到所述第一代码中,包括:
在所述应用程序的显示流程的最前方插入所述广告代码。
A4、根据A3所述的方法,其特征在于,所述在所述应用程序的显示流程的最前方插入所述广告代码,包括:
获取所述安装文件的入口节点标签;
将所述广告代码插入到所述入口节点标签之前,使得所述应用程序在显示所述入口节点标签之前先执行所述广告代码。
A5、根据A4所述的方法,其特征在于,所述将所述广告代码插入到所述入口节点标签之前,包括:
将广告框架代码和广告内容代码插入所述入口节点标签之前。
A6、如A2所述的方法,其特征在于,所述对插入广告代码后的安装文件进行加固,包括:
将保护代码插入所述第二代码中获得第三代码,并对所述第三代码进行加密处理获得第一可执行文件;
按照所述保护代码的入口点修改所述安装文件中的全局配置文件获得第一全局配置文件;
将所述第一可执行文件和所述第一全局配置文件重新打包生成加固安装包。
A7、根据A6所述的方法,其特征在于,所述保护代码包括对所述可执行文件进行加壳和解壳的代码。
A8、根据A7所述的方法,其特征在于,所述保护代码还包括解壳触发代码和和反编译工具的崩溃代码;
所述将保护代码插入所述第二代码中获得第三代码,包括:在所述第二代码中的每一类的代码中置入解壳触发代码和反编译工具的崩溃代码,所述解壳触发代码被执行时,调用所述解壳代码对该类进行解密。
A9、根据A8所述的方法,其特征在于,所述对所述第三代码进行加密处理获得第一可执行文件,包括:
抽取所述第三代码的至少一部分进行重构,获得重构的代码;
植入用于解密所述重构的代码的链接库,所述链接库在解密过程中由java本地接口加载。
A10、根据A6-9中任一权项所述的方法,其特征在于,所述安装文件为安卓软件安装文件,所述全局配置文件为manifest文件,所述可执行文件为dex文件。
A11、根据A1所述的方法,其特征在于,在所述生成加固安装文件之后,所述方法还包括:
对所述加固安装文件进行签名。
B12、一种应用程序的加固装置,其特征在于,所述装置包括:
获取单元,用于获取应用程序的安装文件;
插入单元,用于在所述安装文件中插入广告代码;
加固单元,用于对插入广告代码后的安装文件进行加固,生成加固安装文件。
B13、根据B12所述的装置,其特征在于,所述插入单元具体用于解析所述安装文件中的可执行文件,获得第一代码,并将所述广告代码插入到所述第一代码中,获得第二代码。
B14、根据B13所述的装置,其特征在于,所述插入单元具体用于在所述应用程序的显示流程的最前方插入所述广告代码。
B15、根据B14所述的装置,其特征在于,所述插入单元具体用于获取所述安装文件的入口节点标签,并将所述广告代码插入到所述入口节点标签之前,使得所述应用程序在显示所述入口节点标签之前先执行所述广告代码。
B16、根据B15所述的装置,其特征在于,所述插入单元具体用于将广告框架代码和广告内容代码插入所述入口节点标签之前。
B17、如B13所述的装置,其特征在于,所述加固单元具体用于将保护代码插入所述第二代码中获得第三代码,并对所述第三代码进行加密处理获得第一可执行文件,并按照所述保护代码的入口点修改所述安装文件中的全局配置文件获得第一全局配置文件,并将所述第一可执行文件和所述第一全局配置文件重新打包生成加固安装包。
B18、根据B17所述的装置,其特征在于,所述加固单元具体用于抽取所述第三代码的至少一部分进行重构,获得重构的代码,并植入用于解密所述重构的代码的链接库,所述链接库在解密过程中由java本地接口加载。
B19、根据B17或18所述的装置,其特征在于,所述装置被配置为对安卓软件安装文件进行加固,所述全局配置文件为manifest文件,所述可执行文件为dex文件。
B20、根据B12所述的装置,其特征在于,所述装置还包括签名单元,所述签名单元用于在所述加固单元生成所述加固安装文件之后,对所述加固安装文件进行签名。
上述详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的客户端模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的软件安装包的加固保护装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种应用程序的加固方法,其特征在于,所述方法包括:
获取应用程序的安装文件;
在所述安装文件中插入广告代码;
对插入广告代码后的安装文件进行加固,生成加固安装文件。
2.根据权利要求1所述的方法,其特征在于,在所述安装文件中插入广告代码,包括:
解析所述安装文件中的可执行文件,获得第一代码;
将所述广告代码插入到所述第一代码中,获得第二代码。
3.根据权利要求2所述的方法,其特征在于,所述将所述广告代码插入到所述第一代码中,包括:
在所述应用程序的显示流程的最前方插入所述广告代码。
4.根据权利要求3所述的方法,其特征在于,所述在所述应用程序的显示流程的最前方插入所述广告代码,包括:
获取所述安装文件的入口节点标签;
将所述广告代码插入到所述入口节点标签之前,使得所述应用程序在显示所述入口节点标签之前先执行所述广告代码。
5.根据权利要求4所述的方法,其特征在于,所述将所述广告代码插入到所述入口节点标签之前,包括:
将广告框架代码和广告内容代码插入所述入口节点标签之前。
6.如权利要求2所述的方法,其特征在于,所述对插入广告代码后的安装文件进行加固,包括:
将保护代码插入所述第二代码中获得第三代码,并对所述第三代码进行加密处理获得第一可执行文件;
按照所述保护代码的入口点修改所述安装文件中的全局配置文件获得第一全局配置文件;
将所述第一可执行文件和所述第一全局配置文件重新打包生成加固安装包。
7.根据权利要求6所述的方法,其特征在于,所述保护代码包括对所述可执行文件进行加壳和解壳的代码。
8.根据权利要求7所述的方法,其特征在于,所述保护代码还包括解壳触发代码和和反编译工具的崩溃代码;
所述将保护代码插入所述第二代码中获得第三代码,包括:在所述第二代码中的每一类的代码中置入解壳触发代码和反编译工具的崩溃代码,所述解壳触发代码被执行时,调用所述解壳代码对该类进行解密。
9.根据权利要求8所述的方法,其特征在于,所述对所述第三代码进行加密处理获得第一可执行文件,包括:
抽取所述第三代码的至少一部分进行重构,获得重构的代码;
植入用于解密所述重构的代码的链接库,所述链接库在解密过程中由java本地接口加载。
10.一种应用程序的加固装置,其特征在于,所述装置包括:
获取单元,用于获取应用程序的安装文件;
插入单元,用于在所述安装文件中插入广告代码;
加固单元,用于对插入广告代码后的安装文件进行加固,生成加固安装文件。
CN201610065152.9A 2016-01-29 2016-01-29 一种应用程序的加固方法及装置 Pending CN105740703A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610065152.9A CN105740703A (zh) 2016-01-29 2016-01-29 一种应用程序的加固方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610065152.9A CN105740703A (zh) 2016-01-29 2016-01-29 一种应用程序的加固方法及装置

Publications (1)

Publication Number Publication Date
CN105740703A true CN105740703A (zh) 2016-07-06

Family

ID=56247085

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610065152.9A Pending CN105740703A (zh) 2016-01-29 2016-01-29 一种应用程序的加固方法及装置

Country Status (1)

Country Link
CN (1) CN105740703A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107544826A (zh) * 2017-08-22 2018-01-05 网易(杭州)网络有限公司 Xposed模块加固的方法、介质、装置和计算设备
CN107766096A (zh) * 2016-08-19 2018-03-06 阿里巴巴集团控股有限公司 应用程序安装包的生成方法、应用程序的运行方法及装置
CN108710800A (zh) * 2018-05-22 2018-10-26 国家计算机网络与信息安全管理中心 一种安卓应用程序的加壳识别方法
CN109033837A (zh) * 2018-07-24 2018-12-18 北京梆梆安全科技有限公司 一种安装包风险检测的方法及装置
CN109062582A (zh) * 2018-07-23 2018-12-21 北京云测信息技术有限公司 一种应用安装包的加密方法及装置
CN110581833A (zh) * 2018-06-11 2019-12-17 中移(杭州)信息技术有限公司 一种业务安全保护方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102681841A (zh) * 2012-02-01 2012-09-19 中兴通讯(香港)有限公司 一种手机应用开发方法和系统
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102681841A (zh) * 2012-02-01 2012-09-19 中兴通讯(香港)有限公司 一种手机应用开发方法和系统
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107766096A (zh) * 2016-08-19 2018-03-06 阿里巴巴集团控股有限公司 应用程序安装包的生成方法、应用程序的运行方法及装置
CN107544826A (zh) * 2017-08-22 2018-01-05 网易(杭州)网络有限公司 Xposed模块加固的方法、介质、装置和计算设备
CN107544826B (zh) * 2017-08-22 2020-06-09 网易(杭州)网络有限公司 Xposed模块加固的方法、介质、装置和计算设备
CN108710800A (zh) * 2018-05-22 2018-10-26 国家计算机网络与信息安全管理中心 一种安卓应用程序的加壳识别方法
CN110581833A (zh) * 2018-06-11 2019-12-17 中移(杭州)信息技术有限公司 一种业务安全保护方法及装置
CN110581833B (zh) * 2018-06-11 2022-08-23 中移(杭州)信息技术有限公司 一种业务安全保护方法及装置
CN109062582A (zh) * 2018-07-23 2018-12-21 北京云测信息技术有限公司 一种应用安装包的加密方法及装置
CN109033837A (zh) * 2018-07-24 2018-12-18 北京梆梆安全科技有限公司 一种安装包风险检测的方法及装置

Similar Documents

Publication Publication Date Title
CN105740703A (zh) 一种应用程序的加固方法及装置
CN104239757B (zh) 应用程序防止逆向的方法及装置、运行方法及终端
CN104462959B (zh) 一种安卓应用的加固保护方法、服务器和系统
CN109491695B (zh) 一种集成安卓应用的增量更新方法
CN108229112B (zh) 一种保护应用程序、应用程序的运行方法以及装置
CN104392181A (zh) So文件的保护方法、装置及安卓安装包的加固方法和系统
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN105653432B (zh) 一种崩溃数据的处理方法和装置
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN108733379B (zh) 基于dex字节码抽离映射混淆的安卓应用加固方法
CN106295255B (zh) 应用程序的加固方法和装置
CN103914637B (zh) 一种安卓平台的可执行程序加密方法
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
CN108536451B (zh) 应用程序的埋点注入方法和装置
CN104484585A (zh) 一种应用程序安装包的处理方法、装置及移动设备
KR20170018745A (ko) 어플리케이션의 코드 난독화를 위한 시스템 및 방법
US20150095653A1 (en) Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package
US20180129794A1 (en) Method for Protecting Dex File from Decompilation in Android System
CN104408337A (zh) 一种apk文件防逆向的加固方法
Faruki et al. Android code protection via obfuscation techniques: past, present and future directions
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
CN106708571A (zh) 资源文件的加载方法、装置和加固资源文件的方法、装置
CN104462971A (zh) 根据应用程序声明特征识别恶意应用程序的方法和装置
CN105760721A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160706