CN104239757B - 应用程序防止逆向的方法及装置、运行方法及终端 - Google Patents

应用程序防止逆向的方法及装置、运行方法及终端 Download PDF

Info

Publication number
CN104239757B
CN104239757B CN201410521806.5A CN201410521806A CN104239757B CN 104239757 B CN104239757 B CN 104239757B CN 201410521806 A CN201410521806 A CN 201410521806A CN 104239757 B CN104239757 B CN 104239757B
Authority
CN
China
Prior art keywords
file
application program
executable code
compression
additional data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410521806.5A
Other languages
English (en)
Other versions
CN104239757A (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 CN201410521806.5A priority Critical patent/CN104239757B/zh
Publication of CN104239757A publication Critical patent/CN104239757A/zh
Application granted granted Critical
Publication of CN104239757B publication Critical patent/CN104239757B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种应用程序防止逆向的方法及装置、运行方法及终端,其中,应用程序防止逆向的方法包括:从应用程序中获取包括可执行代码的文件;压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。本发明能够减少现有技术中应用程序由加固过程产生的加固增量,同时防止应用程序中的可执行代码被逆向查找。

Description

应用程序防止逆向的方法及装置、运行方法及终端
技术领域
本发明涉及安全技术,尤其涉及一种应用程序防止逆向的方法及装置、运行方法及终端。
背景技术
随着移动终端平台的日益发展,第三方应用程序大量涌现,对第三方应用的盗版和重打包现象日益严重。其原因主要在于,目前市面上存在多种对应用文件进行解压缩的通用软件,在利用这些软件对应用文件进行解压缩之后,应用源代码中的明文字符串、库函数调用、核心功能函数等都显露无遗,使得非法开发者对第三方应用程序的盗版或者核心功能的逆向工程都变得简单易行。
为防止应用被反编译、恶意篡改,可以通过加固的方法来并保护应用数据信息不被窃取。所谓应用程序的加固一般指采用加壳、隐蔽、混淆等手段对源程序代码进行加密,同时不影响应用文件的正常运行。
然而,采用现有的加固方法通常会使应用文件在加固后以一定比例增大(一般最低为8%到9%)、占用更多的存储空间(或称为“加固增量”),因而会对应用文件的运行、存储和传输的效率造成影响,不利于应用的使用和推广。
发明内容
针对现有技术中的缺陷,本发明提供一种应用程序防止逆向的方法及装置、应用程序的运行方法及终端,能够减少现有技术中应用程序由加固过程产生的加固增量,同时防止应用程序中的可执行代码被逆向查找。
第一方面,本发明提供了一种应用程序防止逆向的方法,其特征在于,包括:
从应用程序中获取包括可执行代码的文件;
压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;
根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
可选地,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
可选地,该方法还包括:将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。
可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
可选地,所述从应用程序中获取包括可执行代码的文件之前,所述方法还包括:
接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,所述从应用程序中获取包括可执行代码的文件,包括:
根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。
第二方面,本发明还提供了一种应用程序的运行方法,包括:
获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
可选地,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
可选地,所述根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码的步骤,包括:
利用所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
可选地,所述应用程序的可执行代码为:所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
第三方面,本发明还提供了一种应用程序防止逆向的装置,该装置包括:
获取单元,用于从应用程序中获取包括可执行代码的文件;
压缩单元,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;
替换文件生成单元,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
可选地,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
可选地,该装置还包括:变更单元,用于将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。
可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
可选地,该装置还包括:
接口单元,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,获取单元具体用于:
根据所述接口单元接收的加固请求,从所述应用程序中获取包括可执行代码的文件。
第四方面,本发明还提供了一种终端,包括:
获取单元,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
解压缩单元,用于根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
可选地,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
可选地,所述解压缩单元,具体用于利用所述获取单元获取的所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
由上述技术方案可知,本发明主要根据应用程序中包括可执行代码的文件得到压缩处理后的文件和附加数据两个部分,其中附加数据用于还原、运行所述可执行代码,并起到防止可执行代码被逆向查找的作用。由此,本发明对于占有主要存储空间的可执行代码进行了压缩,并在运行时使用附加数据对应地进行解压缩,可以在不影响应用程序正常运行的情况下有效地减小加固增量。
附图说明
图1为本发明一实施例提供的应用程序防止逆向的方法的流程示意图;
图2为本发明一实施例提供的应用程序的运行方法的流程示意图;
图3为本发明一实施例提供的Android系统下的APK文件的加固方法的流程示意图;
图4为本发明一实施例提供的应用程序防止逆向的装置的结构示意图;
图5为本发明一实施例提供的终端的结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
现有技术中出现了多种安卓应用的安全加固方法,通过对安卓应用进行加密、防反编译、防代码混淆等加固措施,然而由于加固方法所采用的方案不同,加固的效果也不同,有些加固后并不能达到防止暴力破解的效果,例如现有的一种加固方法首先加密原程序包的可执行文件dex,然后在提取四大组件信息生成代理的dex文件,程序执行时动态解密原程序dex,然而这样的加密方式,加密包和原包分离,原包仅为加密文件,可以轻易地通过内存转存实现程序的破解,加固效果有限。
当前,在Android系统上,一个可以安装、运行的应用,需要打包成Android系统的APK文件格式。APK是Android application package file的缩写,简称APK文件,即Android安装包,也可以理解为Android终端上安装的应用软件。APK文件其实是ZIP文件格式,但后缀名被修改为APK,通过工具解压等方式可以看到其内部的文件结构,如表1所示:
表1 APK文件内部的文件结构
Android安装包(APK文件)一般通过Android应用市场下载、安装到手机上,也可以通过USB数据线等数据线接口或无线数据传输的方式从PC安装。Android上的病毒、木马和其他恶意软件想要进入用户的手机,也必须打包成APK的形式。反过来说,如果不是一个合法的APK文件,它就无法安装到用户手机上,也就不会对用户产生危害。基于这一点,杀毒引擎就可以把查杀的目标集中到对APK文件的扫描上,从而大大提高扫描的效率。
那么,Android安装包(APK文件)中的哪些信息可以作为扫描的重点,针对此问题本申请进行了分析,具体如下:
1)包名
Android操作系统通过APK的包名(package name)对各个安装的APK进行管理。“包名”是与应用相互对应的一种标识,具有固定的命名风格。例如某个Android安装包的包名是com.qihoo360.mobilesafe。Android系统要求每个应用都声明一个唯一的包名。如果要安装的APK的包名和当前手机上某个已有的应用的包名重复了,那么Android系统会拒绝安装。Android平台下的恶意软件也需要声明一个包名,因此,包名就可以作为识别恶意软件的一个重要特征。
2)数字签名
出于安全性的目的,Android系统要求每个APK都要包含数字签名(digitalsignature)。Android系统在安装APK文件的时候会检查APK内部各文件的数字签名是否与其预先设定的数字签名一致,如果不一致,或者没有数字签名,则认为文件已被篡改,拒绝该APK的安装和运行。Android平台下的恶意软件也不例外,所以APK文件的数字签名也可以作为识别恶意软件的一个重要特征。
3)AndroidManifest.xml中列出的各模块的入口信息
AndroidManifest.xml是每个APK文件所必需的全局描述文件,里面列出了Android安装包中应用的每个模块的入口信息。在Android系统中,只有在AndroidManifest.xml中列出了的模块,才能够被系统调用。Android平台下的木马,往往会伪装成正常的应用或游戏来诱骗用户安装,其中有很多木马就是寄生在一个正常的应用或游戏中,用户运行它的时候,看上去是原来的软件或游戏,但寄生在其中的木马模块在合适的时机就被激活,从而感染用户的手机。而因为Android系统要求所有的模块都要在AndroidManifest.xml中列出,这就为寻找寄生的木马提高了重要线索。因此,AndroidManifest.xml中列出的各模块的信息,也是识别恶意软件的重要特征。
4)dex文件和ELF文件
Android应用通常是用Java语言开发的,它用Android开发工具编译之后变成了二进制的字节码(byte code),这些字节码被打包成classes.dex文件,由Android平台的Dalvik虚拟机来解释执行。为了能够调用Android系统功能,Android系统提供了一套运行环境(Android Framework),Android应用调用系统各功能都是通过调用AndroidFramework的库来实现的。
另一方面,Android系统也支持应用程序通过JNI(Java Native Interface,JAVA本地调用)或者二进制可执行程序(native executable)直接运行。此时应用执行的是直接在CPU上运行的二进制机器码,不需要经过虚拟机解释,可以直接调用Android库如libc、WebKit、SQLite、OpenGL/ES(函数库的名称)等来调用系统各功能。如果Android应用要通过JNI或者native executable运行,就需要将要执行的代码编译成ELF文件格式。ELF是Executable and Linkable Format的缩写,是Android/Linux操作系统中可执行程序、共享库的文件格式。
每一个安卓软件安装包(APKAPK)都包含一个清单(Manifest)文件,也就是AndroidManifest.xml,它存储在项目层次中的最底层。清单可以定义应用程序及其组件的结构和元数据。AndroidManifest.xml包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用目的过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。它还提供了各种属性来详细地说明应用程序的元数据(图标或者主题)以及额外的可用来进行安全设置和单元测试顶级节点。
清单(Manifest)文件中的标签包含了一些节点(node),它们定义了应用程序组件、安全设置和组成应用程序的测试类。下面列出了一些常用的清单(Manifest)文件中的节点标签:
应用节点标签(application),清单内一般只包含一个application节点。application节点使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。application节点还可以作为一个包含了活动、服务、内容提供器和广播接收器标签的容器,用来指定应用程序组件。
活动节点标签(activity),应用程序显示的每一个活动(Activity)都要求有一个activity标签。
服务节点标签(service),service标签和activity标签一样,应用程序中使用的每一个服务类(Service)都要创建一个新的service标签。
内容提供者标签(provider),provider标签用来说明应用程序中的每一个内容提供器。
接收器标签(receiver),通过添加receiver标签,可以注册一个广播接收器(Broadcast Receiver),而不用事先启动应用程序。广播接收器就像全局事件监听器一样,通过在声明中注册一个广播接收器,可以使这个进程实现完全自动化。如果一个匹配的数据传输被广播了,则应用程序就会自动启动,并且注册的广播接收器也会开始运行。
用户权限标签(uses-permission),作为安全模型的一部分,uses-permission标签声明了那些由用户定义的权限,而这些权限是应用程序正常执行所必需的。
许可标签(permission),许可标签在可以限制访问某个应用程序组件之前,需要在清单中定义一个permission标签。可以使用permission标签来创建这些权限定义。
检测类(instrumentation),instrumentation类提供一个框架,用来在应用程序运行时在活动或者服务上运行测试。它们提供了一些方法来监控应用程序及其与系统资源的交互。
在本发明的一种优选实施例应用于Android系统中时,可执行文件包括dex文件,dex文件主要是APK中的classes.dex文件,即Dalvik Executable(Dalvik虚拟机可执行文件)。公知的是,Dalvik是用于Android平台的Java虚拟机。Dalvik虚拟机(Dalvik VM)是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)。
图1示出了本发明一实施例提供的应用程序防止逆向的方法的流程示意图,本实施例的应用程序防止逆向的方法如下所述。
101、从应用程序中获取包括可执行代码的文件。
举例来说,本实施例中的应用程序,指的是适用于某种特定的操作系统下的可执行程序,应用程序包括作为程序源代码的可执行代码部分。举例来说,应用程序可为运行在Windows系统、Linux系统、Android系统或者其他操作系统下的软件、应用、软件安装包、应用安装包等等。应用程序中,需要被保护的可执行代码位于至少一个文件当中,而步骤101中所要获取的就是这些包括了可执行代码的文件。
应说明的是,这里的应用程序应为未经过如加固、加壳、压缩、加密等手段处理过的、可以直接正常运行的应用程序。
在具体应用中,上述应用程序可包括如Android安装包APK(Android Package)文件中的classes.dex文件,而classes.dex文件中包括APK文件中需要被保护的可执行代码,此时包括了可执行代码的文件即classes.dex文件。
102、压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找。
举例来说,附加数据可包括:用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。这里的可执行文件中并不包含完整的可执行代码,因而不可能通过对其进行简单的逆向操作得到可执行代码。另一方面,动态链接库中存储的数据具有不易被逆向的特点,因而起到对可执行代码的隐蔽作用。
当然,本实施例中的附加数据还可包括其他数据或文件,本实施例不对附加数据包括的内容进行限制。
步骤103、根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
通常,在运行应用程序时,根据应用程序的指令起始点运行应用程序的可执行代码。然而在本实施例中,由于对应用程序中的可执行代码进行了压缩处理,为此在运行经过上述防止逆向处理后的应用程序时,无法直接以原来的指令起始点来运行应用程序的可执行代码。因此,本实施例中在生成替换文件之后,将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
进而,在运行经过上述步骤处理后的应用程序时,首先运行包括附加数据的上述替换文件,进而还原并运行应用程序的可执行代码。
本实施例的方案主要是对应用程序的安装包中的代码文件执行加固操作,所述加固操作能够提高应用程序的安全性,有效防止应用程序被反编译、恶意篡改、保护应用程序的数据信息不会被黑客窃取,降低应用程序被病毒植入、广告加入、支付渠道篡改、钓鱼、信息劫持等风险。
可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。基于该特征,经过上述步骤处理后的应用程序可以不改变包括可执行代码的文件与应用程序中其他文件之间的调用关系。
在本实施例中,为了保护应用程序中的可执行代码部分不被反编译、且不被恶意篡改、保护应用程序的数据信息不被黑客窃取,对应用程序的包括可执行代码的文件进行压缩处理,得到压缩后的文件和附加数据,进而可实现有效保护应用程序的可执行代码。
在本实施例中,对应用程序中包括可执行代码的文件的处理可理解为对该文件进行了一种变换,这种变换按照特定的方式保留原文件的全部信息,但变换后的可执行代码对外部呈现不可见的状态。举例来说,这样的变换可以是加密、加壳、压缩等手段或者上述手段的组合,当然变换的形式也不仅限于此。
同时,为了使变换不对应用程序的运行造成影响,需要同时生成一些附加数据,用于在系统(即上述安装应用程序的操作系统)中运行上述压缩后的文件。举例来说,附加数据在运行时对应变换会进行一系列相反的操作,使得可执行代码在系统内存中展开,变为可以运行的状态,然后调整程序的运行或调用,使可执行代码可以在内存中正常运行。
在本实施例中,对应用程序的可执行代码进行压缩得到上述压缩后的文件和附加数据,可理解为对应用程序的加固处理。本实施例中的压缩可为采用当前公知的压缩算法对应用程序的可执行代码进行压缩处理。
举例来说,本实施例中,加固处理后的可执行代码和所述附加数据的大小为n kB,所述待加固的应用程序的可执行代码的大小为mkB,0<n/m≤1,由此,实现加固处理后的应用程序的负增量。例如,加固处理前应用程序的可执行代码部分的大小可以是100KB,而加固处理后的可执行代码的大小可以是40KB,再加内容较少的、大小约为10KB的附加数据,使得上述n/m=(40+10)/100=0.5,即加固处理后的应用程序减小了50KB,即可以达到负增量的目的。
由此,本实施例主要根据应用程序中包括可执行代码的文件得到压缩处理后的文件和附加数据两个部分,其中附加数据用于还原、运行所述可执行代码,并起到防止可执行代码被逆向查找的作用。由此,本发明对于占有主要存储空间的可执行代码进行了压缩,并在运行时使用附加数据对应地进行解压缩,可以在不影响应用程序正常运行的情况下有效地减小加固增量。
另外,本实施例中的附加数据中的可执行程序部分可记录在用于在系统(如Android系统)中还原并运行所述加固处理后的可执行代码的可执行文件中;而采用动态链接库记录一些用于还原并运行所述加固处理后的可执行代码的必要信息,可以有效地防止通过对所述可执行文件的逆向工程来进行可执行代码的窃取。
若应用程序为在Android系统中运行的应用程序,则前述的附加数据可为用于在Android系统中还原并运行所述可执行代码的附加数据。
在另一可能的实现场景中,前述图1所示的方法还包括下述的图中未示出的步骤100:
100、接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,前述的步骤101可具体为:
101’、根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。
也就是说,在一种可能的实现方式中,应用程序防止逆向的方法可包括:步骤100、步骤101’、步骤102和步骤103。
在具体应用中,步骤100中的加固请求可具体包括:应用程序的安装包括及加固该应用程序的多渠道信息,安装包中具体可以包括有包括可执行代码的文件和资源文件,所述资源文件中可以配置有发布渠道名称及对应渠道值的名值对。该渠道名称和渠道值均属于渠道信息。
更具体地,这里的渠道值可以用于区分不同的发布渠道。对于开发者,其可以在应用程序的资源文件中配置发布渠道名称及对应渠道值的名值对。以安卓应用为例,可以在AndroidManifest.xml文件的META-data参数下设定渠道值,其中,AndroidManifest.xml文件可用于定义应用程序及其组件的结构和元数据,META-data使用“name-value”(渠道名称及对应渠道值的名值对)的格式给其父组件提供任意可选的数据,名值对“name-value”中,“name”表示发布渠道的唯一名称,可使用Java样式的命名规则来确保名称的唯一性;而“value”表示每一渠道对应的渠道值。
本发明实施例中,上述多渠道信息可用于表示加固该应用程序的多种发布渠道的信息。例如,用户在提交安卓应用“墨迹天气”的APK文件后,可以通过提交如下多渠道信息来指定加固发布渠道,如现有的360、91助手、豌豆荚、金山等等。
本实施例的应用程序防止逆向的方法,将保护代码直接插入可执行文件的代码内,相应修改全局配置文件(包括可执行代码的文件和资源文件)的程序入口,实现了包括可执行代码的文件的重构,从而在程序运行时,首先执行保护代码,以进行相应解密处理,直接对包括可执行代码的文件进行处理,增加了包括可执行代码的文件防护的灵活度,进一步提高了软件安装包的安全性。
特别地,本实施例采用云端加固方式,开发者可以直接从开放平台首页(例如dev.360.cn)进入加固保页面,在网页上点击“上传应用”。一键上传,自动加固,应用可以在后台完成安全监测和保护;接着点击“下载应用”,把下载的加固包重新签名,即可将最安全的产品分发到各个应用市场。另外,本实施例的页面上还可以提供签名工具,或者允许用户上传签名秘钥在完成加固后自动进行签名。
进一步地,在每一类的代码中置入解壳触发代码和和反编译工具的崩溃代码,在每一类运行时,单独对运行的类进行解密,可以有效防止破解工具进行内存截取(dump)。
图2示出了本发明一实施例提供的一种应用程序的运行方法的流程示意图,该方法包括:
201、获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
202、根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
在具体应用中,前述步骤201中的附加数据可包括:用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
由此,上述步骤202可具体为:利用所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
可理解的是,对应于经上述防止逆向方法进行处理的应用程序,这里采用相应的过程来进行可执行代码的解压缩、还原和运行,因而可以使处理的应用程序可以正常运行。具体来说,附加数据在运行时对应于上述变换会进行一系列相反的操作,使得可执行代码在系统内存中展开,变为可以运行的状态,然后调整程序的运行或调用,使可执行代码可以在内存中正常运行。
举例来说,所述运行该应用程序的系统可为Android系统;所述应用程序中包括可执行代码的文件可为Android安装包APK文件中的classes.dex文件。
为了更清楚地说明本实施例的技术方案,下面具体以一种Android系统下的APK文件的加固方法及运行方法为例,对上述应用程序防止逆向的方法和运行方法进行进一步说明。
其中,APK是Android Package的缩写,即Android系统中的安装包文件。而文件中的可执行代码部分记录于将APK文件解压后得到的classes.dex文件中,为了保护应用开发者的劳动成果、避免应用被反编译、恶意篡改等等,一般需要对APK文件、尤其是其中的classes.dex文件进行保护。
图3示出了一种Android系统下的APK文件的加固方法的流程图,具体来说,对该文件的加固方法流程如下:
首先,对于APK文件进行解压缩,得到其中的classes.dex文件。需要说明的是,这里的APK文件若经过其他加密处理的,应先对应地进行解密,使得classes.dex文件是直接记载需要保护的可执行代码的。另外,加固方法实现过程中需要去掉原APK文件中数字证书的签名,因此在加固后需要重新由对应的数字证书进行签名。
接下来,对classes.dex文件进行高强度压缩,在此将压缩后的文件称为classes.part1文件;同时,生成所述附加数据中的可执行文件load.dex和动态数据库文件load.so,并将对应的用于解压缩可执行代码的部分数据添加到load.dex中,将用于解压缩的其他部分数据添加到load.so中,当然,这两部分数据是相互对应、相互配合的。该处的解压缩的其他部分数据可为用于还原并运行可执行代码的除load.dex中的数据之外的数据。
最后,将classes.part1作为加固后的classes.dex文件的主体部分,并将load.so和load.dex添加到这一个classes.dex之中,形成新的classes.dex文件;使用这一文件替换掉原有的classes.dex文件,并与APK中的其他文件一起重新压缩成一个加固后的APK文件中,即可在不改变APK内部文件之间的关系的情况下完成加固。
具体来说,load.dex文件的可执行程序代码中,主要用于执行如下流程:第一,load.dex文件作为系统的运行指令起始点,直接利用load.so找到对应的classes.part1文件并进行解压缩,以使classes.dex文件的数据被还原;第二,在系统的内存中,将还原出来的数据放到一个合适的位置上并进行一些后续的处理,使得classes.dex文件的数据被展开到合适的位置,达到可以被正常调用的状态。举例来说,load.dex文件在还原classes.dex文件的数据之后,将对应的类(class)放入到系统内存中已经有的一个数组当中,使得在系统加载各个类的过程中,在调用该数组的同时可以将对应的类也调用起来,使得程序自此可以按照原本的classes.dex文件中的可执行代码来运行。
另一方面,在代码执行顺序上需要进行相应的调整,即在加固后的classes.dex文件的数据在系统的内存中已经充分展开后,需要调整执行代码顺序,使得调用的主体变为展开后的classes.dex文件中的数据。而且,在最初运行加固后的classes.dex文件时,由于classes.part1还不能够直接运行,所以程序会从load.dex处开始执行。总体来说,load.dex所执行的步骤相当于一个预加载的过程。
另外,为了防止通过同时加载所有类来进行上述可执行代码的破解,可以在load.dex文件或其他位置处加入用以进行下述操作的内容:判断所有类的列表中是否有超过阈值比例的类被加载(例如判断是否同时加载所有类的列表中70%以上的类),若是则消除最先还原的类的数据。该操作可以保证内存不会同时出现全部类的数据,防止通过内存截取等手段破解上述可执行代码。
可见,load.dex既是加固方法中所生成的特定文件,也是加固后的应用程序的运行方法的执行主体,上述对于load.dex的说明也可以代表本实例中应用程序的运行方法的流程。
应说明的是,加固处理前的classes.dex大小一般是几百KB,在进行高强度压缩后可以缩小50%左右;而上述用于还原并执行classes.dex中的可执行代码的load.dex的大小最小可以是几百个字节,最大会有十几个KB,相应的load.so大小一般为几个KB,可见上述加固方法可以在保证原有应用程序正常运行的基础上达到加固增量减少乃至负加固增量的目的,因而可以提高应用程序的运行、存储和传输的效率,有利于应用的使用和推广。
需要说明的是,上述文件名load.dex、load.so、classes.part1仅是一种示例,其可以使用其他文件名进行等同替换;而且,在实际应用中,加固方法的各步骤之间的顺序可以进行调换;另外,对于数据在文件之间的划分在实际应用中可以灵活地进行调整;上述替换、调换或调整并影响上述技术方案的实质,因此并不使相应技术方案的本质脱离本发明权利要求所限定的范围。
图4示出了本发明一实施例提供的一种应用程序防止逆向的装置的结构示意图,所述加固装置包括:
获取单元401,用于从应用程序中获取包括可执行代码的文件;
压缩单元402,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;
替换文件生成单元403,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
在本实施例中,附加数据可包括:用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
在具体应用中,该装置还包括图4中未示出的:变更单元404,用于将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
在另一可能的实现场景中,前述图4所示的装置中还包括下述的图中未示出的接口单元400:
接口单元400,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,前述获取单元401可具体用于:
根据所述接口单元400接收的加固请求,从所述应用程序中获取包括可执行代码的文件。
在具体应用中,上述加固请求可具体包括:应用程序的安装包括及加固该应用程序的多渠道信息,安装包中具体可以包括有包括可执行代码的文件和资源文件,所述资源文件中可以配置有发布渠道名称及对应渠道值的名值对。该渠道名称和渠道值均属于渠道信息。
由于本发明实施例提供的加固装置可执行前述图1所示的加固方法的流程,本实施例不在此详述。
综上所述,本实施例主要根据应用程序中包括可执行代码的文件得到压缩处理后的文件和附加数据两个部分,其中附加数据用于还原、运行所述可执行代码,并起到防止可执行代码被逆向查找的作用。由此,本发明对于占有主要存储空间的可执行代码进行了压缩,并在运行时使用附加数据对应地进行解压缩,可以在不影响应用程序正常运行的情况下有效地减小加固增量。
图5示出了本发明一实施例提供的终端的结构示意图,所述终端包括:
获取单元501,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
解压缩单元502,用于根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
在具体应用中,上述的附加数据可包括:用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
举例来说,前述的解压缩单元502可具体用于:利用所述获取单元获取的所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
在本实施例中,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
上述实施例中的终端能够较好的运行加固后的应用程序,且可执行前述图2所示的运行方法的流程,本实施例不在此详述。
本发明的其他实施例还公开了如下内容:
A1、一种应用程序防止逆向的方法,包括:
从应用程序中获取包括可执行代码的文件;
压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;
根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
A2、根据前述方案A1所述的方法,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
A3、根据前述方案A1或A2所述的方法,所述从应用程序中获取包括可执行代码的文件之前,所述方法还包括:
接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,所述从应用程序中获取包括可执行代码的文件,包括:
根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。
A4、根据前述方案A2所述的方法,还包括:
将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
A5、根据前述方案A1所述的方法,还包括:
所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。
A6、根据前述方案A1、A2、A4、A5中任意一个所述的方法,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
本发明的其他实施例还公开了如下内容:
B1、一种应用程序的运行方法,包括:
获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
B2、根据前述方案B1所述的方法,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
B3、根据前述方案B2所述的方法,所述根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码的步骤,包括:
利用所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
B4、根据前述方案B1至B3中任意一个所述的方法,所述运行所述应用程序的系统为Android系统;
所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
本发明的其他实施例还公开了如下内容:
C1、一种应用程序防止逆向的装置,所述装置包括:
获取单元,用于从应用程序中获取包括可执行代码的文件;
压缩单元,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;
替换文件生成单元,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。
C2、根据前述方案C1所述的装置,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
C3、根据前述方案C1或C2所述的装置,该装置还包括:
接口单元,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,获取单元具体用于:
根据所述接口单元接收的加固请求,从所述应用程序中获取包括可执行代码的文件。
C4、根据前述方案C2所述的装置,该装置还包括:
变更单元,用于将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。
C5、根据前述方案C1所述的装置,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。
C6、根据前述方案C1、C2、C4、C5中任意一个所述的装置,所述运行所述应用程序的系统为Android系统;
所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
本发明的其他实施例还公开了如下内容:
D1、一种终端,包括:
获取单元,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;
解压缩单元,用于根据所述获取单元获取的所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。
D2、根据前述方案D1所述的终端,所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
D3、根据前述方案D2所述的终端,所述解压缩单元,具体用于:利用所述获取单元获取的所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。
D4、根据前述方案D1至D3中任意一个所述的终端,所述运行所述应用程序的系统为Android系统;
所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。
本发明的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释呈反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在于该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是互相排斥之处,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种浏览器终端的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

Claims (6)

1.一种应用程序防止逆向的方法,其特征在于,包括:
从应用程序中获取包括可执行代码的文件;
压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据;
根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
2.根据权利要求1所述的方法,其特征在于,所述从应用程序中获取包括可执行代码的文件之前,所述方法还包括:
接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,所述从应用程序中获取包括可执行代码的文件,包括:
根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。
3.一种应用程序的运行方法,其特征在于,包括:
获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的;
根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
4.一种应用程序防止逆向的装置,其特征在于,所述装置包括:
获取单元,用于从应用程序中获取包括可执行代码的文件;
压缩单元,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据;
替换文件生成单元,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
5.根据权利要求4所述的装置,其特征在于,该装置还包括:
接口单元,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,获取单元具体用于:
根据所述接口单元接收的加固请求,从所述应用程序中获取包括可执行代码的文件。
6.一种应用程序的运行终端,其特征在于,包括:
获取单元,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的;
解压缩单元,用于根据所述获取单元获取的所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
CN201410521806.5A 2014-09-30 2014-09-30 应用程序防止逆向的方法及装置、运行方法及终端 Active CN104239757B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410521806.5A CN104239757B (zh) 2014-09-30 2014-09-30 应用程序防止逆向的方法及装置、运行方法及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410521806.5A CN104239757B (zh) 2014-09-30 2014-09-30 应用程序防止逆向的方法及装置、运行方法及终端

Publications (2)

Publication Number Publication Date
CN104239757A CN104239757A (zh) 2014-12-24
CN104239757B true CN104239757B (zh) 2017-04-19

Family

ID=52227804

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410521806.5A Active CN104239757B (zh) 2014-09-30 2014-09-30 应用程序防止逆向的方法及装置、运行方法及终端

Country Status (1)

Country Link
CN (1) CN104239757B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015192637A1 (zh) * 2014-06-17 2015-12-23 北京奇虎科技有限公司 软件安装包的加固保护方法和装置
CN105988925A (zh) * 2015-02-10 2016-10-05 腾讯科技(深圳)有限公司 一种应用程序启动耗时的测试方法、装置及系统
CN105512521A (zh) * 2015-12-25 2016-04-20 北京奇虎科技有限公司 一种软件安装包的加固保护方法和系统
CN106960156B (zh) * 2016-01-08 2020-03-13 广州市动景计算机科技有限公司 基于应用程序的数据加密及访问方法、装置
CN105677259A (zh) * 2016-02-29 2016-06-15 珠海市魅族科技有限公司 一种移动终端中存储文件的方法及移动终端
CN107291485B (zh) * 2016-04-11 2021-01-26 北京京东尚科信息技术有限公司 动态链接库的加固方法、运行方法、加固装置和安全系统
CN105930735B (zh) * 2016-04-22 2019-02-05 北京奇虎科技有限公司 一种文件加固方法及装置
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN107784204B (zh) * 2016-08-31 2021-10-22 百度在线网络技术(北京)有限公司 应用脱壳方法和装置
CN106446616A (zh) * 2016-09-14 2017-02-22 金蝶软件(中国)有限公司 一种软件保护方法及装置
CN106971098B (zh) * 2016-10-11 2020-06-02 阿里巴巴集团控股有限公司 一种防重打包的方法及其装置
CN107992265A (zh) * 2016-10-27 2018-05-04 中兴通讯股份有限公司 一种应用程序的源文件的检验方法及装置
CN108460276B (zh) * 2016-12-09 2022-01-25 北京奇虎科技有限公司 一种安卓安装包的动态链接库so文件的处理方法和装置
CN107957954B (zh) * 2017-12-19 2021-06-29 郑州云海信息技术有限公司 一种Linux系统下提高测试数据安全性的方法和系统
CN108170433A (zh) * 2017-12-22 2018-06-15 上海你我贷互联网金融信息服务有限公司 一种Java代码的混淆方法、恢复方法及其装置
CN108830096B (zh) * 2018-06-21 2021-02-26 广州华多网络科技有限公司 数据处理方法、装置、电子设备及存储介质
CN109408141A (zh) * 2018-09-27 2019-03-01 海信集团有限公司 应用程序的启动处理方法、装置及电子设备
CN110532738A (zh) * 2019-08-26 2019-12-03 北京智游网安科技有限公司 一种基于so文件的代码处理方法、智能终端及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备
CN103473488A (zh) * 2013-09-18 2013-12-25 浙江大学城市学院 一种android应用程序防盗版的方法及系统
CN103745141A (zh) * 2013-12-02 2014-04-23 上海斐讯数据通信技术有限公司 智能终端android系统中防止应用程序反编译的方法
CN103914637A (zh) * 2013-01-07 2014-07-09 北京洋浦伟业科技发展有限公司 一种安卓平台的可执行程序加密方法
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103914637A (zh) * 2013-01-07 2014-07-09 北京洋浦伟业科技发展有限公司 一种安卓平台的可执行程序加密方法
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备
CN103473488A (zh) * 2013-09-18 2013-12-25 浙江大学城市学院 一种android应用程序防盗版的方法及系统
CN103745141A (zh) * 2013-12-02 2014-04-23 上海斐讯数据通信技术有限公司 智能终端android系统中防止应用程序反编译的方法
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Also Published As

Publication number Publication date
CN104239757A (zh) 2014-12-24

Similar Documents

Publication Publication Date Title
CN104239757B (zh) 应用程序防止逆向的方法及装置、运行方法及终端
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN104462959B (zh) 一种安卓应用的加固保护方法、服务器和系统
CN106462677B (zh) 一种保护软件项目的方法和装置
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
CN104392181A (zh) So文件的保护方法、装置及安卓安装包的加固方法和系统
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN108363911B (zh) 一种Python脚本混淆、水印的方法及装置
JP4892167B2 (ja) ディジタル・データ保護構成
US20190114401A1 (en) On device structure layout randomization for binary code to enhance security through increased entropy
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN104463002A (zh) 一种加固apk的方法和装置以及apk加固客户端和服务器
US20180129794A1 (en) Method for Protecting Dex File from Decompilation in Android System
CN104408337A (zh) 一种apk文件防逆向的加固方法
CN105512521A (zh) 一种软件安装包的加固保护方法和系统
Faruki et al. Android code protection via obfuscation techniques: past, present and future directions
CN111191195A (zh) 一种用于保护apk的方法和装置
CN107609394A (zh) Android安装包的防篡改方法、存储设备及装置
CN105740703A (zh) 一种应用程序的加固方法及装置
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
Lim et al. Structural analysis of packing schemes for extracting hidden codes in mobile malware
KR101557455B1 (ko) 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置

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: 20220711

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