CN104463002B - 一种加固apk的方法和装置以及apk加固客户端和服务器 - Google Patents

一种加固apk的方法和装置以及apk加固客户端和服务器 Download PDF

Info

Publication number
CN104463002B
CN104463002B CN201410815934.0A CN201410815934A CN104463002B CN 104463002 B CN104463002 B CN 104463002B CN 201410815934 A CN201410815934 A CN 201410815934A CN 104463002 B CN104463002 B CN 104463002B
Authority
CN
China
Prior art keywords
code
apk
codes
native
snippets
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
CN201410815934.0A
Other languages
English (en)
Other versions
CN104463002A (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.)
360 Digital Security Technology Group 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 CN201410815934.0A priority Critical patent/CN104463002B/zh
Publication of CN104463002A publication Critical patent/CN104463002A/zh
Application granted granted Critical
Publication of CN104463002B publication Critical patent/CN104463002B/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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

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

Abstract

本发明公开了一种加固APK的方法和装置以及APK加固客户端和服务器,该方法包括:获取待加固APK中的至少一个方法对应的Java代码;将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。本发明提供的技术方案通过将APK中的Java代码转换成反射调用的Native C代码,实现了将Java的方法调用转化为对等语法的Native C的方法调用,当一个方法被调用时,实现调用的代码是Native C代码而不是原始的Java代码。与Java代码相比,逆向Native C代码的成本很高,且Native C代码的保护方式很多,大大降低了APK被反汇编分析,进而重打包再次分发的可能性,提高APK的安全等级。

Description

一种加固APK的方法和装置以及APK加固客户端和服务器
技术领域
本发明涉及信息安全领域,具体涉及一种加固APK的方法和装置以及APK加固客户端和服务器。
背景技术
安卓***的快速发展以及设备的高速增长,产生了大量的第三方应用程序,与其他操作***相比,安卓***的开源性为应用开发者提供了更多的功能接口,这些功能接口在提高了***的可扩展性的同时也为恶意软件提供了便利,非法拷贝、逆向工程、反编译、调试、破解、二次打包、内存截取等手段不断威胁着安卓***的安全,不仅危害了使用者,也给正常应用开发者造成严重的损害。
现有的安卓软件安装包的加固方案主要分为三种:第一种是对待保护方法的Java代码进行完整的加密;第二种是运行时对待保护方法的Java代码做字节码变形,防止直接还原出完整的Java代码,现有方式不能很好的自定义,该方案需要做字节码变形的函数;第三种是将前两种方案混合使用。但由于上述方案在APK运行的某一时间内内存中存在完整的Java代码的映像,受保护的方法的Java代码可以通过内存Dump的方式被完整的还原出来,导致现有方案始终无法完全解决安卓安装包面临的安全问题,人们也一直在寻求更有效的解决方案。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种加固APK的方法和装置以及APK加固客户端和服务器。
依据本发明的一个方面,提供了一种加固APK的方法,该方法包括:
获取待加固APK中的至少一个方法对应的Java代码;
将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。
可选地,所述获取待加固APK中的至少一个方法对应的Java代码包括:
对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
可选地,将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码包括:
对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。
可选地,所述对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码包括:
将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
可选地,所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
可选地,该方法进一步包括:
对所述APK中的转换后的Native C代码进行加密处理。
可选地,该方法进一步包括:
获取待加固APK中的ELF文件,进行反编译;
根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
将提取出的一段或多段代码进行加密处理后,放入指定文件中;
将所述指定文件添加到所述反编译的APK中,编译生成加固APK;
其中,在所述加固APK运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
可选地,所述将提取出的一段或多段代码进行加密处理包括:
对提取出的一端或多段代码进行VM虚拟化;或/和,对提取出的一端或多段代码进行分段加密;或/和,对提取出的一端或多段代码进行代码混淆;或/和,对提取出的一端或多段代码进行反调试处理。
可选地,所述将提取出的一段或多段代码进行加密处理后,放入指定文件中包括:
将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部。
可选地,上述方法由位于终端侧的客户端执行;
或者,由位于终端侧的客户端获取待加固的APK上传到服务器,由服务器执行上述方法。
依据本发明的另一个方面,提供了一种加固APK的装置,该装置包括:
获取单元,适于获取待加固APK中的至少一个方法对应的Java代码;
转换单元,适于将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。
可选地,所述获取单元,适于对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
可选地,所述转换单元,适于对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。
可选地,所述转换单元,适于将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
可选地,所述转换单元所采用的所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
可选地,该装置进一步包括:
加密单元,适于对所述APK中的转换后的Native C代码进行加密处理。
可选地,该装置进一步包括:添加编译单元;
所述获取单元,进一步适于获取待加固APK中的ELF文件,进行反编译;并适于根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
所述加密单元,进一步适于将提取出的一段或多段代码进行加密处理后,放入指定文件中;
所述添加编译单元,适于将所述指定文件添加到所述反编译的APK中,编译生成加固APK;
其中,所述加固APK在运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
可选地,所述加密单元,适于对提取出的一端或多段代码进行VM虚拟化;或/和,适于对提取出的一端或多段代码进行分段加密;或/和,适于对提取出的一端或多段代码进行代码混淆;或/和,适于对提取出的一端或多段代码进行反调试处理。
可选地,所述加密单元,适于将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部
依据本发明的又一个方面,提供了一种APK加固客户端,该客户端包括如上任一项所述的加固APK的装置。
依据本发明的再一个方面,提供了一种APK加固服务器,该服务器包括如上任一项所述的加固APK的装置。
由上述可知,本发明提供的技术方案通过将APK中的Java代码转换成反射调用的Native C代码,实现了将Java的方法调用转化为对等语法的Native C的方法调用,当一个方法被调用时,实现调用的代码是Native C代码而不是原始的Java代码。与Java代码相比,在任何时间点不存在自身还原的过程,并且逆向Native C代码的成本很高,且Native C代码的保护方式很多,大大降低了APK被反汇编分析,进而重打包再次分发的可能性,提高APK的安全等级。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种加固APK的方法的流程图;
图2示出了根据本发明另一个实施例的一种加固APK的方法的流程图;
图3示出了根据本发明一个实施例的一种加固APK的装置的示意图;
图4示出了根据本发明另一个实施例的一种加固APK的装置的示意图;
图5示出了根据本发明又一个实施例的一种加固APK的装置的示意图
图6示出了根据本发明一个实施例的一种APK加固客户端的示意图;
图7示出了根据本发明一个实施例的一种APK加固服务器的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种加固APK的方法的流程图。如图1所示,该方法包括:
步骤S110,获取待加固APK中的至少一个方法对应的Java代码。
步骤S120,将至少一个方法对应的Java代码分别转换成相应的反射调用的NativeC代码。
可见,图1所示的方法通过将APK中的Java代码转换成反射调用的Native C代码,实现了将Java的方法调用转化为对等语法的Native C的方法调用,当一个方法被调用时,实现调用的代码是Native C代码而不是原始的Java代码。与Java代码相比,在任何时间点不存在自身还原的过程,并且逆向Native C代码的成本很高,且Native C代码的保护方式很多,大大降低了APK被反汇编分析,进而重打包再次分发的可能性,提高APK的安全等级。
在本发明的一个实施例中,图1所示方法的步骤S110获取待加固APK中的至少一个方法对应的Java代码包括:对待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
在本发明的一个实施例中,图1所示方法的步骤S120将至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码包括:对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。该过程实现了Java调用的方法和Native C调用的方法的对等转化,保证被加固后APK执行功能的有效性。
在一个具体实施例中,对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码具体可以是:将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。其中,中间语言可以是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
在将方法对应的Java代码转换成相应的反射调用的Native C代码之后,为了进一步提高安全等级,在本发明的一个实施例中,图1所示的方法进一步包括:对APK中的转换后的Native C代码进行加密处理。相比于Java代码,Native C代码的加密方式多种多样,进一步提高了反汇编的难度。
在本发明的一些实施例中,上述方法由位于终端侧的客户端执行;或者,在本发明的另一些实施例中,由位于终端侧的客户端获取待加固的APK上传到服务器,由服务器执行上述方法。这样,开发者既可以在客户端加固APK,也可以在服务器端加固APK,具有相当的灵活性。
图2示出了根据本发明另一个实施例的一种加固APK的方法的流程图。如图2所示,该方法包括:
步骤S210,获取待加固APK中的ELF文件,进行反编译。
本步骤中,ELF文件是Android***上的可执行文件格式,也包括.so或.o类文件。
步骤S220,根据加密开始标记和加密结束标记,从反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数。
本步骤中,每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记,该标记用于将任何信息或元数据与程序元素进行关联,其本身不会对源代码执行产生任何影响。
步骤S230,将提取出的一段或多段代码进行加密处理后,放入指定文件中。
步骤S240,将指定文件添加到所述反编译的APK中,编译生成加固APK。
经过上述过程得到的加固APK的运行过程如下:在运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。实现对待保护代码的动态加解密,使得内存中任意时刻都不存在完整的原始代码的映像,从而防止APK被逆向还原。
在本发明的一个实施例中,图2所示方法的步骤S230将提取出的一段或多段代码进行加密处理包括:对提取出的一端或多段代码进行VM虚拟化;或/和,对提取出的一端或多段代码进行分段加密;或/和,对提取出的一端或多段代码进行代码混淆;或/和,对提取出的一端或多段代码进行反调试处理。其中,VM虚拟化是指将原始指令虚拟化,转换成第三方的虚拟机的指令,在APK被逆向时,得到的逆向结果是该虚拟化指令而不是原始指令。
在本发明的一个实施例中,图2所示方法的步骤S230在将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部。
图2所述的方法使得APK开发者可以利用加密开始标记和加密结束标记来标记需要进行的一段或多段代码。提供加密的服务者可根据加密开始标记和加密结束标记来对相应段的代码进行加密处理。并且图2所示的方法将一段或多段代码提取出并加密后放在指定文件中,待需要运行该段代码是才进行解密,并在该段代码运行完毕后再重新进行加密,使得任何时刻在内存中都不存在该APK的完整dump,使得破解者无法得到完整的dump。
图3示出了根据本发明一个实施例的一种加固APK的装置的示意图。如图3所示,该加固APK的装置300包括:
获取单元310,适于获取待加固APK中的至少一个方法对应的Java代码;
转换单元320,适于将至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。
可见,图3所示的装置通过各单元的相互配合,将APK中的Java代码转换成反射调用的Native C代码,实现了将Java的方法调用转化为对等语法的Native C的方法调用,当一个方法被调用时,实现调用的代码是Native C代码而不是原始的Java代码。与Java代码相比,逆向Native C代码的成本很高,且Native C代码的保护方式很多,大大降低了APK被反汇编分析,进而重打包再次分发的可能性,提高APK的安全等级。
在本发明的一个实施例中,图3所示装置的获取单元310,适于对待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
在本发明的一个实施例中,图3所示装置的转换单元320,适于对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。转换单元320在该过程实现了Java调用的方法和Native C调用的方法的对等转化,保证被加固后APK执行功能的有效性。
在一个具体实施例中,对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码的过程具体是:转换单元320,适于将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,在将所述中间语言转换成Native C代码。其中,中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
图4示出了根据本发明另一个实施例的一种加固APK的装置的示意图。如图4所示,该加固APK的装置400包括:获取单元410、转换单元420和加密单元430。
其中,获取单元410、转换单元420分别与图3所示装置的获取单元310、转换单元320对应相同,在此不再赘述。
加密单元430,适于对所述APK中的转换后的Native C代码进行加密处理。
相比于Java代码,Native C代码的加密方式更加多样,进一步增加逆向难度,防止APK关键信息的泄露。
图5示出了根据本发明又一个实施例的一种加固APK的装置的示意图。如图5所示,该加固APK的装置500包括:获取单元510、加密单元520、和添加编译单元530。
获取单元510,适于获取待加固APK中的ELF文件,进行反编译;并适于根据加密开始标记和加密结束标记,从反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数。
其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记。
加密单元520,适于将提取出的一段或多段代码进行加密处理后,放入指定文件中。
添加编译单元530,适于将指定文件添加到所述反编译的APK中,编译生成加固APK。
经图5所示的装置加固后得到的加固APK,在运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。实现对待保护代码的动态加解密,使得内存中任意时刻都不存在完整的原始代码的映像,从而防止APK被逆向还原。
在本发明的一个实施例中,加密单元520,适于对提取出的一端或多段代码进行VM虚拟化;或/和,适于对提取出的一端或多段代码进行分段加密;或/和,适于对提取出的一端或多段代码进行代码混淆;或/和,适于对提取出的一端或多段代码进行反调试处理。
在本发明的一个实施例中,加密单元520,适于将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部。
本发明的一个实施例中,还提供了包含图3和图5所示装置的一种加固APK的装置,其中的获取单元310和获取单元510为同一个单元。本发明的另一个实施例中,还提供了包含图4和图5所述装置的一种加固APK的装置,其中的获取单元410和获取单元510为同一个单元。
图6示出了根据本发明一个实施例的一种APK加固客户端的示意图。如图6所示,该APK加固客户端包括加固APK的装置610。该加固APK的装置610可以是如上文中任一实施例所述的加固APK的装置。
图7示出了根据本发明一个实施例的一种APK加固服务器的示意图。如图7所示,该APK加固服务器包括加固APK的装置710。该加固APK的装置710可以是如上文中任一实施例所述的加固APK的装置。
综上所述,本发明提供的技术方案通过将APK中的Java代码转换成反射调用的Native C代码,实现了将Java的方法调用转化为对等语法的Native C的方法调用,当一个方法被调用时,实现调用的代码是Native C代码而不是原始的Java代码。并通过对转换后的Native C代码进行加密,实现对Native C代码的进一步保护。与Java代码相比,逆向Native C代码的成本很高,且Native C代码的保护方式很多,大大降低了APK被反汇编分析,进而重打包再次分发的可能性,提高APK的安全等级。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的加固APK的装置以及APK加固客户端和服务器中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种加固APK的方法,其中,该方法包括:
获取待加固APK中的至少一个方法对应的Java代码;
将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。
A2、如A1所述的方法,其中,所述获取待加固APK中的至少一个方法对应的Java代码包括:
对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
A3、如A1所述的方法,其中,将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码包括:
对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。
A4、如A3所述的方法,其中,所述对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码包括:
将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
A5、如A4所述的方法,其中,
所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
A6、如A1所述的方法,其中,该方法进一步包括:
对所述APK中的转换后的Native C代码进行加密处理。
A7、如A1所述的方法,其中,该方法进一步包括:
获取待加固APK中的ELF文件,进行反编译;
根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
将提取出的一段或多段代码进行加密处理后,放入指定文件中;
将所述指定文件添加到所述反编译的APK中,编译生成加固APK;
其中,在所述加固APK运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
A8、如A7所述的方法,其中,所述将提取出的一段或多段代码进行加密处理包括:
对提取出的一端或多段代码进行VM虚拟化;或/和,对提取出的一端或多段代码进行分段加密;或/和,对提取出的一端或多段代码进行代码混淆;或/和,对提取出的一端或多段代码进行反调试处理。
A9、如A7所述的方法,其中,所述将提取出的一段或多段代码进行加密处理后,放入指定文件中包括:
将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部。
A10、如A1-A9中任一项所述的方法,其中,
上述方法由位于终端侧的客户端执行;
或者,由位于终端侧的客户端获取待加固的APK上传到服务器,由服务器执行上述方法。
本发明公开了B11、一种加固APK的装置,其中,该装置包括:
获取单元,适于获取待加固APK中的至少一个方法对应的Java代码;
转换单元,适于将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码。
B12、如B11所述的装置,其中,
所述获取单元,适于对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
B13、如B11所述的装置,其中,
所述转换单元,适于对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。
B14、如B13所述的装置,其中,
所述转换单元,适于将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
B15、如B14所述的装置,其中,
所述转换单元所采用的所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
B16、如B11所述的装置,其中,该装置进一步包括:
加密单元,适于对所述APK中的转换后的Native C代码进行加密处理。
B17、如B11所述的装置,其中,该装置进一步包括:添加编译单元和加密单元;
所述获取单元,进一步适于获取待加固APK中的ELF文件,进行反编译;并适于根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
所述加密单元,进一步适于将提取出的一段或多段代码进行加密处理后,放入指定文件中;
所述添加编译单元,适于将所述指定文件添加到所述反编译的APK中,编译生成加固APK;
其中,所述加固APK在运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
B18、如B17所述的装置,其中,
所述加密单元,适于对提取出的一端或多段代码进行VM虚拟化;或/和,适于对提取出的一端或多段代码进行分段加密;或/和,适于对提取出的一端或多段代码进行代码混淆;或/和,适于对提取出的一端或多段代码进行反调试处理。
B19、如B17所述的装置,其中,
所述加密单元,适于将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部
本发明公开了C20、一种APK加固客户端,其中,该客户端包括如B11-B19中任一项所述的加固APK的装置。
本发明还公开了D21、一种APK加固服务器,其中,该服务器包括如B11-B19中任一项所述的加固APK的装置。

Claims (19)

1.一种加固APK的方法,其中,该方法包括:
获取待加固APK中的至少一个方法对应的Java代码;
将所述至少一个方法中的每个方法对应的Java代码转换成对等语法的Native C代码;
该方法进一步包括:
获取待加固APK中的ELF文件,进行反编译;
根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
将提取出的一段或多段代码进行加密处理后,放入指定文件中;
将所述指定文件添加到所述待加固APK中,编译生成加固APK;
其中,在所述加固APK运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
2.如权利要求1所述的方法,其中,所述获取待加固APK中的至少一个方法对应的Java代码包括:
对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
3.如权利要求1所述的方法,其中,将所述至少一个方法对应的Java代码分别转换成相应的反射调用的Native C代码包括:
对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的NativeC代码,再对Native C代码进行编译。
4.如权利要求3所述的方法,其中,所述对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码包括:
将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
5.如权利要求4所述的方法,其中,
所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
6.如权利要求1所述的方法,其中,该方法进一步包括:
对所述APK中的转换后的Native C代码进行加密处理。
7.如权利要求1所述的方法,其中,所述将提取出的一段或多段代码进行加密处理包括:
对提取出的一段或多段代码进行VM虚拟化;或/和,对提取出的一段或多段代码进行分段加密;或/和,对提取出的一段或多段代码进行代码混淆;或/和,对提取出的一段或多段代码进行反调试处理。
8.如权利要求1所述的方法,其中,所述将提取出的一段或多段代码进行加密处理后,放入指定文件中包括:
将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部。
9.如权利要求1-8中任一项所述的方法,其中,
上述方法由位于终端侧的客户端执行;
或者,由位于终端侧的客户端获取待加固的APK上传到服务器,由服务器执行上述方法。
10.一种加固APK的装置,其中,该装置包括:
获取单元,适于获取待加固APK中的至少一个方法对应的Java代码;
转换单元,适于将所述至少一个方法中的每个方法对应的Java代码转换成对等语法的Native C代码;
该装置进一步包括:添加编译单元和加密单元;
所述获取单元,进一步适于获取待加固APK中的ELF文件,进行反编译;并适于根据加密开始标记和加密结束标记,从所述反编译的ELF文件中提取出待保护的一段或多段代码,并对每个提取位置设置一个钩子函数;其中每段待保护的代码的起始位置和结束位置分别有加密开始标记和加密结束标记;
所述加密单元,进一步适于将提取出的一段或多段代码进行加密处理后,放入指定文件中;
所述添加编译单元,适于将所述指定文件添加到所述待加固APK中,编译生成加固APK;
其中,所述加固APK在运行的过程中,通过设置的钩子函数获知到需要运行被保护的一段代码时,从所述指定文件中解密出该段代码,并在该段代码运行完毕时,重新对该段代码进行加密。
11.如权利要求10所述的装置,其中,
所述获取单元,适于对所述待加固APK进行反编译获取其中的至少一个方法对应的Java代码。
12.如权利要求10所述的装置,其中,
所述转换单元,适于对一个方法对应的Java代码进行语义解析,根据语义解析结果构造反射调用的Native C代码,再对Native C代码进行编译。
13.如权利要求12所述的装置,其中,
所述转换单元,适于将该方法对应的Java代码编译成smali代码,将smali代码反编译成一种中间语言,再将所述中间语言转换成Native C代码。
14.如权利要求13所述的装置,其中,
所述转换单元所采用的所述中间语言是一种由三元组指令构成的指令集,一个三元组指令包括:源地址、操作的目标地址和操作的类型。
15.如权利要求10所述的装置,其中,该装置进一步包括:
加密单元,适于对所述APK中的转换后的Native C代码进行加密处理。
16.如权利要求10所述的装置,其中,
所述加密单元,适于对提取出的一段或多段代码进行VM虚拟化;或/和,适于对提取出的一段或多段代码进行分段加密;或/和,适于对提取出的一段或多段代码进行代码混淆;或/和,适于对提取出的一段或多段代码进行反调试处理。
17.如权利要求10所述的装置,其中,
所述加密单元,适于将提取出的一段或多段代码进行加密处理后,放入SO文件的尾部
18.一种APK加固客户端,其中,该客户端包括如权利要求10-17中任一项所述的加固APK的装置。
19.一种APK加固服务器,其中,该服务器包括如权利要求10-17中任一项所述的加固APK的装置。
CN201410815934.0A 2014-12-24 2014-12-24 一种加固apk的方法和装置以及apk加固客户端和服务器 Active CN104463002B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410815934.0A CN104463002B (zh) 2014-12-24 2014-12-24 一种加固apk的方法和装置以及apk加固客户端和服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410815934.0A CN104463002B (zh) 2014-12-24 2014-12-24 一种加固apk的方法和装置以及apk加固客户端和服务器

Publications (2)

Publication Number Publication Date
CN104463002A CN104463002A (zh) 2015-03-25
CN104463002B true CN104463002B (zh) 2017-04-05

Family

ID=52909024

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410815934.0A Active CN104463002B (zh) 2014-12-24 2014-12-24 一种加固apk的方法和装置以及apk加固客户端和服务器

Country Status (1)

Country Link
CN (1) CN104463002B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326691B (zh) * 2015-06-15 2021-06-18 中兴通讯股份有限公司 加解密功能的实现方法、装置及服务器
CN105631251B (zh) * 2015-12-25 2018-07-24 北京奇虎科技有限公司 一种apk加固保护方法及***
CN106933610B (zh) * 2015-12-30 2021-07-30 北京金山安全软件有限公司 一种应用程序安装包生成方法、装置及电子设备
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN107122635A (zh) * 2017-04-27 2017-09-01 北京洋浦伟业科技发展有限公司 一种so文件的加固方法、装置和apk的加固方法
CN108932406B (zh) * 2017-05-18 2021-12-17 北京梆梆安全科技有限公司 虚拟化软件保护方法和装置
CN107729725A (zh) * 2017-10-09 2018-02-23 南京南瑞集团公司 一种基于虚拟机指令修改的Android应用加固***及方法
CN108681457B (zh) * 2018-05-11 2020-09-01 西北大学 基于代码下沉与残码解释的Android应用程序保护方法
CN110531965A (zh) * 2018-05-23 2019-12-03 阿里巴巴集团控股有限公司 一种数据处理方法、程序运行方法和设备
CN108846264A (zh) * 2018-06-11 2018-11-20 北京奇虎科技有限公司 代码加固方法、装置、智能终端和计算机可读存储介质
CN108985017A (zh) * 2018-09-26 2018-12-11 北京京东金融科技控股有限公司 应用程序的加固方法和装置
CN109598107B (zh) * 2018-11-20 2021-02-02 江苏通付盾信息安全技术有限公司 一种基于应用安装包文件的代码转换方法及装置
CN109614773B (zh) * 2018-11-20 2020-11-13 江苏通付盾信息安全技术有限公司 代码自修改方法、装置及电子设备
CN109614772B (zh) * 2018-11-20 2021-02-02 江苏通付盾信息安全技术有限公司 基于应用安装包文件的代码转换方法及装置
CN109543369B (zh) * 2018-11-23 2022-03-25 杭州哲信信息技术有限公司 一种dex的保护方法
CN109918872B (zh) * 2019-01-28 2021-06-29 中国科学院数据与通信保护研究教育中心 Android应用加固方法
CN113971027A (zh) * 2021-10-26 2022-01-25 北京字节跳动网络技术有限公司 一种代码转换方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102023885A (zh) * 2010-12-17 2011-04-20 北京握奇数据***有限公司 一种存储Java卡运行时环境字节码的方法及***
CN103902858A (zh) * 2013-12-25 2014-07-02 武汉安天信息技术有限责任公司 一种apk应用加固的方法及***

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102023885A (zh) * 2010-12-17 2011-04-20 北京握奇数据***有限公司 一种存储Java卡运行时环境字节码的方法及***
CN103902858A (zh) * 2013-12-25 2014-07-02 武汉安天信息技术有限责任公司 一种apk应用加固的方法及***

Also Published As

Publication number Publication date
CN104463002A (zh) 2015-03-25

Similar Documents

Publication Publication Date Title
CN104463002B (zh) 一种加固apk的方法和装置以及apk加固客户端和服务器
US10339837B1 (en) Distribution of scrambled binary output using a randomized compiler
Williams et al. Security through diversity: Leveraging virtual machine technology
Banescu et al. A tutorial on software obfuscation
CN103761475B (zh) 检测智能终端中恶意代码的方法及装置
CN106462677B (zh) 一种保护软件项目的方法和装置
Schulz Code protection in android
US8589897B2 (en) System and method for branch extraction obfuscation
US8090959B2 (en) Method and apparatus for protecting .net programs
WO2016094840A2 (en) System, method & computer readable medium for software protection via composable process-level virtual machines
US10127160B2 (en) Methods and systems for binary scrambling
CN105512521A (zh) 一种软件安装包的加固保护方法和***
Fang et al. Multi-stage binary code obfuscation using improved virtual machine
WO2014072209A1 (en) Compiler generating operator free code
CN106599627A (zh) 基于虚拟机保护应用安全的方法及装置
CN106708571A (zh) 资源文件的加载方法、装置和加固资源文件的方法、装置
CN105760721B (zh) 一种软件加固方法和***
Masid et al. Application of the SAMA methodology to Ryuk malware
CN113626773B (zh) 一种基于中间语言的代码保护方法
He et al. Exploiting binary-level code virtualization to protect Android applications against app repackaging
Joshi et al. Impact of software obfuscation on susceptibility to return-oriented programming attacks
Xue et al. Exploiting code diversity to enhance code virtualization protection
CN106650337A (zh) 对安装包中的脚本文件进行处理的方法和装置
Chen Encapsulating antivirus (av) evasion techniques in metasploit framework
Wang et al. Invalidating analysis knowledge for code virtualization protection through partition diversity

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

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

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee after: Beijing Qizhi Business Consulting 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
TR01 Transfer of patent right

Effective date of registration: 20210622

Address after: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee after: Beijing Hongteng Intelligent 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: Beijing Qizhi Business Consulting Co.,Ltd.

CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee after: Sanliu0 Digital Security Technology Group Co.,Ltd.

Address before: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee before: Beijing Hongteng Intelligent Technology Co.,Ltd.