CN108985017A - 应用程序的加固方法和装置 - Google Patents

应用程序的加固方法和装置 Download PDF

Info

Publication number
CN108985017A
CN108985017A CN201811123035.9A CN201811123035A CN108985017A CN 108985017 A CN108985017 A CN 108985017A CN 201811123035 A CN201811123035 A CN 201811123035A CN 108985017 A CN108985017 A CN 108985017A
Authority
CN
China
Prior art keywords
file
executable code
executable
target
application program
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
CN201811123035.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 Jingdong Financial Technology Holding Co Ltd
Original Assignee
Beijing Jingdong Financial Technology Holding 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 Jingdong Financial Technology Holding Co Ltd filed Critical Beijing Jingdong Financial Technology Holding Co Ltd
Priority to CN201811123035.9A priority Critical patent/CN108985017A/zh
Publication of CN108985017A publication Critical patent/CN108985017A/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Landscapes

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

Abstract

本申请实施例公开了应用程序的加固方法和装置。该方法的一具体实施方式包括:从使用第一编程语言编写的预设应用程序对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;将所述目标可执行代码段转换为第二编程语言对应的、用于替换所述目标可执行代码段的替换可执行代码段;生成包括所述替换可执行代码段的目标调用文件;从所述第一可执行文件中移除所述目标可执行代码段,生成第二可执行文件,其中,所述第二可执行文件包括调用所述目标调用文件的调用接口;打包所述目标调用文件与所述第二可执行文件,得到加固后的所述预设应用程序的可执行文件。该实施方式提高了应用程序的安全性。

Description

应用程序的加固方法和装置
技术领域
本申请实施例涉及计算机技术领域,具体涉及信息安全技术领域,尤其涉及应用程序的加固方法和装置。
背景技术
随着安卓操作系统的广泛应用,运行在安卓操作系统上的应用程序也在不断增长。现有技术中,运行在安卓操作系统上的应用程序一般采用Java语言进行开发,源代码被编译为Java类文件,再通过安卓软件开发工具将Java类文件转换为dex格式的二进制可执行文件。dex格式的二进制可执行文件,与软件配置、资源文件等打包为apk格式文件。Apk格式文件为安卓应用程序安装包。用户可以在使用安卓操作系统的终端设备上安装上述应用程序安装包,从而运行应用程序。
安卓系统是一个源代码完全开放的操作系统,无论是dex格式文件的指令编码方式,还是Java虚拟机的工作原理,都已被大家所知。目前,安卓应用程序由于采用Java语言进行开发,通过Java虚拟机解释执行。对解释执行后的Java代码进行反编译,具有很强的可读性。
发明内容
本申请实施例提出了一种应用程序的加固方法和装置。
第一方面,本申请实施例提供了一种应用程序的加固方法,该方法包括:从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段;生成包括替换可执行代码段的目标调用文件;从第一可执行文件中移除目标可执行代码段,生成第二可执行文件,其中,第二可执行文件包括调用目标调用文件的调用接口;打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
在一些实施例中,上述将所述目标可执行代码段转换为第二编程语言对应的、用于替换所述目标可执行代码段的替换可执行代码段,包括:将所述目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码;编译所述中间代码,得到所述替换可执行代码段。
在一些实施例中,待加固函数为异常捕获函数,所述异常捕获函数用于捕获预设应用程序的代码运行中的异常;以及所述将所述目标可执行代码段转换为第二编程语言编写的中间代码段,包括:使用符合所述第二编程语言编写规范的、实现跳转功能的代码来实现所述异常捕获函数。
在一些实施例中,第二可执行文件运行于预设虚拟机上,以及方法还包括:通过预设接口向预设虚拟机发送执行替换可执行代码段的执行结果。
在一些实施例中,生成包括替换可执行代码段的目标调用文件,包括:对替换可执行代码进行加密,得到加密后的替换可执行代码段;根据加密后的替换可执行代码段生成目标调用文件。
在一些实施例中,该方法还包括:对调用接口进行加密。
第二方面,本申请实施例提供了一种应用程序的加固装置,该装置包括:确定单元,被配置成从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;转换单元,被配置成将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段;第一生成单元,被配置成生成包括替换可执行代码段的目标调用文件;第二生成单元,被配置成从第一可执行文件中移除目标可执行代码段,生成第二可执行文件,其中,第二可执行文件包括调用目标调用文件的调用接口;打包单元,被配置成打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
在一些实施例中,转换单元进一步被配置成:将所述目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码;编译所述中间代码,得到所述替换可执行代码段。
在一些实施例中,所述待加固函数为异常捕获函数,所述异常捕获函数用于捕获预设应用程序的代码运行中的异常;以及所述转换单元进一步被配置成:使用符合所述第二编程语言编写规范的、实现跳转功能的代码来实现所述异常捕获函数。
在一些实施例中,第二可执行文件运行于预设虚拟机上,以及装置还包括发送单元,发送单元被配置成:通过预设接口向预设虚拟机发送执行替换可执行代码段的执行结果。
在一些实施例中,生成单元进一步被配置成:对替换可执行代码进行加密,得到加密后的替换可执行代码段;根据加密后的替换可执行代码段生成目标调用文件。
在一些实施例中,第二生成单元进一步被配置成:对调用接口进行加密。
第三方面,本申请实施例提供了一种电子设备,该电子设备包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如第一方面中任一实现方式描述的方法。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,其中,该计算机程序被处理器执行时实现如第一方面中任一实现方式描述的方法。
本申请实施例提供的应用程序的加固方法和装置,通过从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;而后将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段;接着生成包括替换可执行代码段的目标调用文件;然后从第一可执行文件中移除目标可执行代码段,生成第二可执行文件;最后打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件,从而增加了对可执行文件反编译的难度,提高了应用程序的安全性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请的一个实施例的应用程序的加固方法可以应用于其中的示例性系统架构图;
图2是根据本申请的应用程序的加固方法的一个实施例的流程图;
图3是根据本申请的应用程序的加固方法的一个应用场景的示意图;
图4是根据本申请的应用程序的加固方法的又一个实施例的流程图;
图5是根据本申请的应用程序的加固装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了本申请的一个实施例的应用程序的加固方法可以应用于其中的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
终端设备101、102、103可以通过网络104与服务器105交互,以接收或发送消息等。例如从服务器105下载应用程序,并在本地进行安装。终端设备101、102、103上可以安装有各种客户端应用,例如应用程序下载应用等。
终端设备101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、膝上型便携计算机和台式计算机等等。当终端设备101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块),也可以实现成单个软件或软件模块。在此不做具体限定。
服务器105可以提供各种服务,例如通过网络从其他服务器获取应用程序的可执行文件,对应用程序的可执行文件进行加固;并将加固后的应用程序发送给终端设备。
需要说明的是,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软模块),也可以实现成单个软件或软件模块。在此不做具体限定。
需要说明的是,本申请实施例所提供的应用程序的加固方法一般由服务器105执行,相应地,应用程序的加固装置一般设置于服务器105中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,其示出了根据本申请的应用程序的加固方法的一个实施例的流程200。该应用程序的加固方法,包括以下步骤:
步骤201,从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段。
在本实施例中,应用程序的加固方法的执行主体(例如图1所示的服务器)可以首先获取使用第一编程语言编写的预设应用程序所对应的第一可执行文件。然后上述从使用第一编程语言编写的预设应用程序对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段。
上述执行主体可以通过网络接收来自其他电子设备的上述使用第一编程语言编写的预设应用程序。此外,上述使用第一编程语言编写的预设应用程序还可能预先由上述执行主体生成。
上述预设应用程序的源代码可以是按照第一编程语言规范书写的应用程序代码。这里的第一编程语言可以是任意高级语言,例如:Java可以是Java语言、C++语言、Basic语言等。
上述第一可执行文件可以是对上述由第一编程语言规范书写的预设应用程序的源代码进行编译得到的。第一可执行文件可以是二进制文件。在一些应用场景中,第一可执行文件可以被终端设备的操作系统加载执行。第一可执行文件的类型例如可以包括:.exe文件、.sys文件等。在这些应用场景中,上述操作系统例如可以是Windows操作系统。
在另外一些应用场景中,第一可执行文件可以是字节码文件。在这些应用场景中,第一可执行文件可以被运行于终端设备的操作系统之上的虚拟机识别,并由虚拟机将第一可执行文件实时转换成终端设备的操作系统可以加载执行的机器指令。这里的操作系统例如可以是Android系统。上述第一可执行文件例如可以是.dex类型的文件。此外,上述虚拟机例如可以是Dalvik虚拟机、Art虚拟机等。
在这些应用场景中,上述第一可执行文件可以包括文件头、索引区、数据区三个部分。其中,文件头可以包括dex文件的文件标识、dex文件的校验码、头结构的大小、字符串列表中的字符串个数、字符串列表偏移、类型列表中的类型个数、类型列表偏移、方法声明列表中的个数,方法声明列表偏移、方法列表中的个数、方法列表偏移、数据段的大小、数据段偏移等信息。索引区中索引了整个dex文件中的字符串、类型、方法声明、字段以及方法的信息。在数据区,包含了dex文件涉及的所有方法,以及每一方法对应的所有指令。上述方法可以对应一个函数代码。
可以预先指定预设应用程序的源代码中的待加固函数。
上述待加固函数可以包括所有方法中的一个方法,也可以包括两个以上的方法。
上述执行主体可以根据待加固函数的函数名从第一可执行文件的索引区中确定出待加固函数对应的偏移量和所占用的字节大小。进一步地,可以通过上述偏移量确定待加固函数对应的起始地址,以及通过待加固函数占用的字节大小来确定待加固函数的结束地址。上述执行主体可以将上述待加固函数对应的起始地址、结束地址之间的代码段作为目标可执行代码段。
步骤202,将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段。
在本实施例中,基于步骤201中得到目标可执行代码段,上述执行主体(例如图1所示的服务器)可以使用各种分析方法将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段。其中,目标可执行代码段与替换可执行代码段的编码规范可以不相同。
这里的第二编程语言可以为与第一编程语言不相同的高级语言。第二编程语言例如可以是C、C++语言等。在一些应用场景中,第一编程语言可以是比第二编程语言高级的编程语言。
上述替换可执行代码段可以包括由终端设备的操作系统加载执行的代码。具体地,上述替换可执行代码段可以包括被终端设备的CPU执行的代码。这里的替换可执行代码段中的代码可以包括机器代码。
具体地,上述执行主体可以对目标可执行代码段中的代码进行语法分析,确定出目标可执行代码段中的各条指令。例如可以读取目标可执行代码段中的第一个字节,该第一个字节为目标可执行代码段的第一条指令的第一个字节。通常一条指令的第一个字节可以包括指示该指令的长度的字段。然后从该第一个字节中读取第一条指令的长度。然后跳过第一条指令的长度,即到了下一条指令,循环执行上述步骤,直到目标可执行代码段的结尾,从而分析出目标可执行代码段所包括的各条指令。这里的指令包括赋值指令、循环指令、实现某个表达式的指令等。然后,对于目标可执行代码段中的每一条的指令,上述执行主体可以确定该指令的语义。这里的语义例如可以包括赋值、循环、实现表达式等。进一步地,上述执行主体可以将该条指令替换为符合上述替换可执行代码段的编写规范的指令。这样一来,可以将上述目标可执行代码段中的目标可执行代码转换为替换可执行代码,从而得到替换可执行代码段。
实践中,上述执行主体可以访问预设代码转换对照表。预设代码转换对照表中可以包括多条符合上述目标可执行代码的编程规范的指令,以及与上述每一条指令对应的替换指令。这里的替换指令可以为符合上述替换可执行代码编写规范的指令。上述预设代码转换表可以设置在上述执行主体中,也可以设置在与上述执行主体实现通信连接的其他电子设备中。
在本实施例的一些可选的实现方式中,上述将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段,包括以下步骤:
首先,将目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码。
在这些可选的实现方式中,上述执行主体可以首先对目标可执行代码段中的代码进行语法分析,确定出目标可执行代码段中的各条指令。例如可以读取目标可执行代码段中的第一个字节,该第一个字节对应目标可执行代码段的第一条指令的第一个字节;然后从该第一个字节中读取第一条指令的长度。然后跳过第一条指令的长度,即到了下一条指令,循环执行上述步骤,直到目标可执行代码段的结尾,从而分析出目标可执行代码段所包括的各条指令。这里的指令包括赋值指令、循环指令、实现某个表达式的指令等。然后,对于由上述语法分析所得到的多条指令,上述执行主体可以确定一条指令或一组指令的语义含义。接着,上述执行主体可以根据各指令的语义含义确定上述目标可执行代码段的控制流图。然后,上述执行主体还可以分析可执行代码段的数据流。最后,上述执行主体根据分析的控制流图和数据流将目标可执行代码段中的代码转换成第二编程语言对应的程序代码。可以将由上述目标可执行代码段中的代码所转换成的第二编程语言对应的程序代码视为中间代码。
其次,编译中间代码,得到替换可执行代码段。
上述执行主体可以使用第二编程语言对应的编译工具来编译上述中间代码,从而得到目标可执行代码段的替换可执行代码段。
在将目标可执行代码段转换为替换可执行代码段之后,由于替换可执行代码段中的代码编码规范与目标可执行代码段中的代码编写规范不相同,在一定程度上可以实现对预设应用程序的可执行文件进行加固的效果。
在本实施例的一些可选的实现方式中,上述待加固函数为异常捕获函数。异常捕获函数用于捕获预设应用程序代码运行中的异常。上述将目标可执行代码段转换为第二编程语言编写的中间代码,包括:使用符合第二编程语言编写规范的、实现跳转功能的代码来实现上述异常捕获函数。
上述异常捕获函数的源代码可以由第一编程语言实现。例如上述异常捕获函数可以是由Java语言实现的try-catch函数。在一些第二编程语言中,例如C语言中,没有现成的异常捕获函数。
在这些可选的实现方式中,可以根据异常捕获函数的起始地址,例如try函数的起始地址,以及异常捕获函数的结束地址,例如catch函数的结束地址,来确定异常捕获函数对应的可执行代码段。然后,上述执行主体可以使用符合第二编程语言编写规范的、实现跳转功能的代码来实现上述异常捕获函数。也就是说,若目标可以执行代码段是异常捕获函数,上述中间代码可以包括符合第二编程语言编写规范的、实现跳转功能的代码。
上述中间代码可以包括由异常捕获函数的起始地址以及异常捕获函数的结束地址之间的可执行代码转换成的、符合第二编程语言编写规范的指令代码。
上述实现跳转功能的代码中可以包括跳转语句(例如goto语句),或者包括跳转函数(例如非局部跳转函数setjmp函数和longjmp函数)等。上述中间代码中的这些实现跳转功能的代码,可以实现跳出运行异常、并且返回运行异常所对应的具体代码的功能。
需要说明的是,上述异常捕获函数,以及goto语句和非局部跳转函数以及使用方法是目前广泛研究和应用的公知技术,在此不再赘述。
步骤203,生成包括替换可执行代码段的目标调用文件。
在本实施例中,应用程序的加固方法的执行主体可以根据各种方法生成包括替换可执行代码段的目标调用文件。
具体地,上述执行主体可以首先确定目标调用文件的格式。上述目标调用文件例如可以是可执行链接格式(Executable and Linkable Format,ELF)文件。然后,根据替换可执行代码段内的代码生成目标调用文件的文件头、程序头、区段头以及各区段。文件头位于目标调用文件的最前面,包括文件类型、文件支持的处理器型号以及程序头和区段头开始的地址,即程序代码及区段内容的入口地址。程序头、区段头包括定位替换可执行代码及各区段内容的偏移量。每一个区段可以存储类型相同的内容,例如存储替换可执行代码段内代码的区段、存储数据的区段等。
需要说明的是,ELF文件是目前广泛研究和使用的公知技术,此处不赘述。
步骤204,从第一可执行文件中移除目标可执行代码段,生成第二可执行文件。
上述执行主体可以从第一可执行文件中移除目标可执行代码段,并在移除目标可执行代码段的第一可执行文件中设置调用目标调用文件的调用接口,从而生成第二可执行文件。也就是说,第二可执行文件中包括调用目标调用文件的调用接口。
在一些应用场景中,上述第二可执行文件的文件头部可以包括使替换可执行代码段中的代码运行的指令,例如包括调用目标调用文件的调用接口的指令。这样,当运行第二可执行文件时,可通过调用接口调用目标调用文件。使得目标调用文件中的替换可执行代码端终段中的代码同时运行。
在这些应用场景中,还可以在第二可执行文件中的对应第一可执行文件的目标可执行代码段的位置处,设置调用目标调用文件的调用接口。由此,第二可执行文件在执行过程中可以通过上述调用接口调用替换可执行代码。
这样一来,原第一可执行文件被拆分成了两个文件,从而增加了对可执行文件反编译的难度,进而提高了预设应用程序的安全性。
步骤205,打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
在本实施例中,上述执行主体可以使用现有的打包工具将目标调用文件与第二可执行文件打包,从而得到加固后的预设应用程序的可执行文件。
打包其实就是对目标调用文件与第二可执行文件进行封装,从而增强目标调用文件与第二可执行文件的安全性。
继续参见图3,图3是根据本实施例的应用程序的加固方法的应用场景的一个示意图300。在图3的应用场景中,服务器301可以接收其他服务器302发送的预设应用程序的第一可执行文件303,这里的可执行文件可以由对使用第一编程语言编写的预设应用程序的源代码进行编译得到。服务器301可以从使用第一编程语言编写的预设应用程序所对应的第一可执行文件303中,确定出待加固函数对应的目标可执行代码段304。然后,服务器301可以将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段305。接着,服务器301可以生成包括替换可执行代码段的目标调用文件306。随后,上述服务器301可以从第一可执行文件中移除目标可执行代码段,生成第二可执行文件307,其中,第二可执行文件包括调用目标调用文件的调用接口,最后,上述服务器301可以打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件308。
本申请的上述实施例提供的方法通过将预设应用程序的第一可执行文件中的待加固函数对应的目标可执行代码段转换成替换可执行代码段,替换可执行代码段的源代码对应的编程语言与第一可执行文件对应的编程语言不相同。并从第一可执行文件中去除目标可执行代码段,将替换可执行代码段存储在目标调用文件中,从而增加了对可执行文件反编译的难度,提高了应用程序的安全性。
在本实施例的一些可选的实现方式中,上述第二可执行文件运行于预设虚拟机上。上述应用程序的加固方法还包括:通过预设接口向预设虚拟机发送执行替换可执行代码段的执行结果。
在这些可选的实现方式中,上述第一可执行文件以及第二可执行文件可以运行在预设虚拟机上。这里的第一可执行文件和第二可执行文件例如可以为由Java语言编写的源程序编译后得到的.dex文件。上述预设虚拟机可以由终端设备的操作系统运行,预设虚拟机例如可以是Dalvik虚拟机、Art虚拟机等。这里的操作系统例如可以是Android操作系统。这里的替换可执行代码段可以是本地可执行代码段。上述本地可执行代码段可以为被终端设备的处理器执行的代码段。这里的预设接口例如可以是Java本地接口(Java Nativeinterface,JNI)。上述执行结果例如可以包括对象的增删、内存的增加或减小等。
上述替换可执行代码段中可以包括虚拟指令,上述虚拟指令可以通过自定义虚拟机解释执行。上述替换可执行代码中的虚拟指令的解释执行结果可能无法传回运行第二可执行文件的虚拟机中。从而影响了预设虚拟加在运行第二可执行文件过程中的内存回收,或者对象的增删等。上述执行主体可以通过预设调用接口调用预设虚拟机的库函数的方式,向预设虚拟机发送执行替换可执行代码段中代码的执行结果。在一些应用场景中,还可以使用Java本地接口来调用上述预设虚拟机的库函数。
在这些可选的实现方式中,实现了执行第二可执行文件的预设虚拟机与替换可执行代码的交互,从而可以将替换可执行代码段中代码的执行结果发送给上述预设虚拟机,以使预设虚拟机根据上述执行结果来增删对象,或者回收内存等。
进一步参考图4,其示出了应用程序的加固方法的又一个实施例的流程400。该应用程序的加固方法的流程400,包括以下步骤:
步骤401,从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段。
步骤401与图2所示实施例中的步骤201相同,此处不赘述。
步骤402,将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段。
步骤402与图2所示实施例中的步骤202相同,此处不赘述。
步骤403,对替换可执行代码段中的代码进行加密,得到加密后的替换可执行代码段。
在本实施例中,上述执行主体可以使用预设加密算法对替换执行代码段中的代码进行加密。
上述预设加密算法例如可以包括但不限于:高级加密标准(Advanced EncryptionStandard,AES)算法、RSA加密算法、椭圆曲线密码编码(Elliptic Curves Cryptography,ECC)算法、迪菲-赫尔曼(Diffie-Hellman,DH)算法、安全散列算法(Secure HashAlgorithm,SHA)等。
步骤404,根据加密后的替换可执行代码段生成目标调用文件。
在本实施例中,上述执行主体可以根据加密后的替换可执行代码段生成目标调用文件。
生成目标调用文件的过程可以参考图2所示实施例的步骤203,此处不赘述。
步骤405,从第一可执行文件中移除目标可执行代码段,生成第二可执行文件。
步骤405与图2所示实施例中的步骤204相同,此处不赘述。
步骤406,打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
步骤406与图2所示实施例中的步骤205相同,此处不赘述。
从图4中可以看出,与图2对应的实施例相比,本实施例中的应用程序的加固方法的流程400突出了对目标调用文件中的替换可执行代码段的代码进行加密的步骤。由此,本实施例描述的方案可以进一步加大对应用程序的可执行文件进行反编译的难度,从而可以进一步提高应用程序的可执行文件的安全性。
在本申请的应用程序的加固方法各实施例的一些可选的实现方式中,图2所示实施例和图4所示实施例的应用程序加固方法可以进一步包括:对第二可执行文件中的调用接口进行加密。
上述执行主体可以使用各种加密方法对上述的调用接口进行加密。例如可以使用高级加密标准(Advanced Encryption Standard,AES)算法、RSA加密算法、椭圆曲线密码编码(Elliptic Curves Cryptography,ECC)算法、迪菲-赫尔曼(Diffie-Hellman,DH)算法、安全散列算法(Secure Hash Algorithm,SHA)等加密算法在第二可执行文件中对调用接口进行加密。
在这些可选的实现方式中,对上述调用接口进行加密,使得调用接口不再直接暴露。可以进一步加大对第二可执行文件进行反编译的难度,从而可以进一步提高应用程序的安全性。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种应用程序的加固装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例的应用程序的加固装置500包括:确定单元501、转换单元502、第一生成单元503、第二生成单元504和打包单元505。其中,接收单元501配置用于接收用户的网页浏览请求,其中,确定单元501,被配置成从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;转换单元502,被配置成将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段;第一生成单元503,被配置成生成包括替换可执行代码段的目标调用文件;第二生成单元504,被配置成从第一可执行文件中移除目标可执行代码段,生成第二可执行文件,其中,第二可执行文件包括调用目标调用文件的调用接口;打包单元505,被配置成打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
在本实施例中,应用程序的加固装置500的确定单元501、转换单元502、第一生成单元503、第二生成单元504和打包单元505的具体处理及其所带来的技术效果可分别参考图2对应实施例中步骤201、步骤202、步骤203、步骤204和步骤205的相关说明,在此不再赘述。
在本实施例的一些可选的实现方式中,转换单元502进一步被配置成:将目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码;编译中间代码,得到替换可执行代码段。
在本实施例的一些可选的实现方式中,待加固函数为异常捕获函数,异常捕获函数用于捕获预设应用程序的代码运行中的异常;以及转换单元502进一步被配置成:使用符合第二编程语言编写规范的、实现跳转功能的代码来实现异常捕获函数。
在本实施例的一些可选的实现方式中,第二可执行文件运行于预设虚拟机上,以及装置还包括发送单元,发送单元被配置成:通过预设接口向预设虚拟机发送执行替换可执行代码段的执行结果。
在本实施例的一些可选的实现方式中,生成单元进一步被配置成:对替换可执行代码段中的代码进行加密,得到加密后的替换可执行代码段;根据加密后的替换可执行代码段生成目标调用文件。
在本实施例的一些可选的实现方式中,第二生成单元进一步被配置成:对调用接口进行加密。
下面参考图6,其示出了适于用来实现本申请实施例的电子设备的计算机系统600的结构示意图。图6示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU,Central Processing Unit)601,其可以根据存储在只读存储器(ROM,Read Only Memory)602中的程序或者从存储部分606加载到随机访问存储器(RAM,Random Access Memory)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM602以及RAM 603通过总线604彼此相连。输入/输出(I/O,Input/Output)接口605也连接至总线604。
以下部件连接至I/O接口605:包括硬盘等的存储部分606;以及包括诸如LAN(局域网,Local Area Network)卡、调制解调器等的网络接口卡的通信部分607。通信部分607经由诸如因特网的网络执行通信处理。驱动器608也根据需要连接至I/O接口605。可拆卸介质609,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器608上,以便于从其上读出的计算机程序根据需要被安装入存储部分606。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分607从网络上被下载和安装,和/或从可拆卸介质609被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括确定单元、转换单元、第一生成单元、第二生成单元和打包单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,确定单元还可以被描述为“从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;将目标可执行代码段转换为第二编程语言对应的、用于替换目标可执行代码段的替换可执行代码段;生成包括替换可执行代码段的目标调用文件;从第一可执行文件中移除目标可执行代码段,生成第二可执行文件,其中,第二可执行文件包括调用目标调用文件的调用接口;打包目标调用文件与第二可执行文件,得到加固后的预设应用程序的可执行文件。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (14)

1.一种应用程序的加固方法,包括:
从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;
将所述目标可执行代码段转换为第二编程语言对应的、用于替换所述目标可执行代码段的替换可执行代码段;
生成包括所述替换可执行代码段的目标调用文件;
从所述第一可执行文件中移除所述目标可执行代码段,生成第二可执行文件,其中,所述第二可执行文件包括调用所述目标调用文件的调用接口;
打包所述目标调用文件与所述第二可执行文件,得到加固后的所述预设应用程序的可执行文件。
2.根据权利要求1所述的方法,其中,所述将所述目标可执行代码段转换为第二编程语言对应的、用于替换所述目标可执行代码段的替换可执行代码段,包括:
将所述目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码;
编译所述中间代码,得到所述替换可执行代码段。
3.根据权利要求2所述的方法,其中:所述待加固函数为异常捕获函数,所述异常捕获函数用于捕获预设应用程序的代码运行中的异常;以及
所述将所述目标可执行代码段转换为第二编程语言编写的中间代码,包括:
使用符合所述第二编程语言编写规范的、实现跳转功能的代码来实现所述异常捕获函数。
4.根据权利要求1所述的方法,其中,所述第二可执行文件运行于预设虚拟机上,以及
所述方法还包括:
通过预设接口向所述预设虚拟机发送执行所述替换可执行代码段的执行结果。
5.根据权利要求1所述的方法,其中,所述生成包括所述替换可执行代码段的目标调用文件,包括:
对所述替换可执行代码段中的代码进行加密,得到加密后的替换可执行代码段;
根据加密后的替换可执行代码段生成目标调用文件。
6.根据权利要求1所述的方法,其中,所述方法还包括:对所述调用接口进行加密。
7.一种应用程序的加固装置,包括:
确定单元,被配置成从使用第一编程语言编写的预设应用程序所对应的第一可执行文件中,确定出待加固函数对应的目标可执行代码段;
转换单元,被配置成将所述目标可执行代码段转换为第二编程语言对应的、用于替换所述目标可执行代码段的替换可执行代码段;
第一生成单元,被配置成生成包括所述替换可执行代码段的目标调用文件;
第二生成单元,被配置成从所述第一可执行文件中移除所述目标可执行代码段,生成第二可执行文件,其中,所述第二可执行文件包括调用所述目标调用文件的调用接口;
打包单元,被配置成打包所述目标调用文件与所述第二可执行文件,得到加固后的所述预设应用程序的可执行文件。
8.根据权利要求7所述的装置,其中,所述转换单元进一步被配置成:
将所述目标可执行代码段中的代码转换为符合第二编程语言编写规范的中间代码;
编译所述中间代码,得到所述替换可执行代码段。
9.根据权利要求8所述的装置,其中:所述待加固函数为异常捕获函数,所述异常捕获函数用于捕获预设应用程序的代码运行中的异常;以及
所述转换单元进一步被配置成:
使用符合所述第二编程语言编写规范的、实现跳转功能的代码来实现所述异常捕获函数。
10.根据权利要求7所述的装置,其中,所述第二可执行文件运行于预设虚拟机上,以及
所述装置还包括发送单元,所述发送单元被配置成:
通过预设接口向所述预设虚拟机发送执行所述替换可执行代码段的执行结果。
11.根据权利要求7所述的装置,其中,所述生成单元进一步被配置成:
对所述替换可执行代码段中的代码进行加密,得到加密后的替换可执行代码段;
根据加密后的替换可执行代码段生成目标调用文件。
12.根据权利要求1所述的装置,其中,所述第二生成单元进一步被配置成:对所述调用接口进行加密。
13.一种电子设备,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如权利要求1-6中任一所述的方法。
CN201811123035.9A 2018-09-26 2018-09-26 应用程序的加固方法和装置 Pending CN108985017A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811123035.9A CN108985017A (zh) 2018-09-26 2018-09-26 应用程序的加固方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811123035.9A CN108985017A (zh) 2018-09-26 2018-09-26 应用程序的加固方法和装置

Publications (1)

Publication Number Publication Date
CN108985017A true CN108985017A (zh) 2018-12-11

Family

ID=64542869

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811123035.9A Pending CN108985017A (zh) 2018-09-26 2018-09-26 应用程序的加固方法和装置

Country Status (1)

Country Link
CN (1) CN108985017A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109918872A (zh) * 2019-01-28 2019-06-21 中国科学院数据与通信保护研究教育中心 Android应用加固方法
CN110378084A (zh) * 2019-07-22 2019-10-25 北京顶象技术有限公司 应用程序保护方法、装置、计算机设备及存储介质
CN110471662A (zh) * 2019-08-21 2019-11-19 北京百度网讯科技有限公司 程序转换方法、装置及设备
CN111352629A (zh) * 2018-12-24 2020-06-30 北京奇虎科技有限公司 一种程序调用的优化方法及装置
CN111752600A (zh) * 2020-06-30 2020-10-09 深圳壹账通智能科技有限公司 代码异常检测方法、装置、计算机设备及存储介质
CN113094667A (zh) * 2021-04-09 2021-07-09 每日互动股份有限公司 一种防止java程序被反编译的系统
CN113312120A (zh) * 2021-06-17 2021-08-27 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质
CN113849245A (zh) * 2021-09-23 2021-12-28 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质
CN113987470A (zh) * 2021-10-29 2022-01-28 山西大鲲智联科技有限公司 可执行文件处理方法、装置、电子设备和计算机可读介质
CN114115884A (zh) * 2020-08-26 2022-03-01 腾讯科技(深圳)有限公司 一种编程服务的管理方法以及相关装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104463002A (zh) * 2014-12-24 2015-03-25 北京奇虎科技有限公司 一种加固apk的方法和装置以及apk加固客户端和服务器
CN105631251A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种apk加固保护方法及系统
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN106845167A (zh) * 2016-12-12 2017-06-13 北京奇虎科技有限公司 一种apk的加固方法和装置,及动态加载方法和装置
CN107229848A (zh) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 一种代码加固方法和装置
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104463002A (zh) * 2014-12-24 2015-03-25 北京奇虎科技有限公司 一种加固apk的方法和装置以及apk加固客户端和服务器
CN105631251A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种apk加固保护方法及系统
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN106845167A (zh) * 2016-12-12 2017-06-13 北京奇虎科技有限公司 一种apk的加固方法和装置,及动态加载方法和装置
CN107229848A (zh) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 一种代码加固方法和装置
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111352629A (zh) * 2018-12-24 2020-06-30 北京奇虎科技有限公司 一种程序调用的优化方法及装置
CN109918872A (zh) * 2019-01-28 2019-06-21 中国科学院数据与通信保护研究教育中心 Android应用加固方法
CN110378084A (zh) * 2019-07-22 2019-10-25 北京顶象技术有限公司 应用程序保护方法、装置、计算机设备及存储介质
CN110378084B (zh) * 2019-07-22 2021-06-08 北京顶象技术有限公司 应用程序保护方法、装置、计算机设备及存储介质
CN110471662A (zh) * 2019-08-21 2019-11-19 北京百度网讯科技有限公司 程序转换方法、装置及设备
CN111752600A (zh) * 2020-06-30 2020-10-09 深圳壹账通智能科技有限公司 代码异常检测方法、装置、计算机设备及存储介质
CN114115884A (zh) * 2020-08-26 2022-03-01 腾讯科技(深圳)有限公司 一种编程服务的管理方法以及相关装置
CN113094667A (zh) * 2021-04-09 2021-07-09 每日互动股份有限公司 一种防止java程序被反编译的系统
CN113094667B (zh) * 2021-04-09 2022-04-29 每日互动股份有限公司 一种防止java程序被反编译的系统
CN113312120A (zh) * 2021-06-17 2021-08-27 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质
CN113312120B (zh) * 2021-06-17 2022-05-10 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质
CN113849245A (zh) * 2021-09-23 2021-12-28 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质
CN113849245B (zh) * 2021-09-23 2023-09-12 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质
CN113987470A (zh) * 2021-10-29 2022-01-28 山西大鲲智联科技有限公司 可执行文件处理方法、装置、电子设备和计算机可读介质

Similar Documents

Publication Publication Date Title
CN108985017A (zh) 应用程序的加固方法和装置
KR101328012B1 (ko) 애플리케이션 코드 난독화 장치 및 그 방법
CN107229848A (zh) 一种代码加固方法和装置
CN110704063B (zh) 编译和执行智能合约的方法及装置
US9697022B2 (en) Run time incremental compilation of script code
CN110688122B (zh) 编译和执行智能合约的方法及装置
CN110704064B (zh) 编译和执行智能合约的方法及装置
CN104798075A (zh) 应用随机化
US20190146764A1 (en) Using comments of a program to provide optimizations
CN109948308A (zh) 代码安全保护方法、装置、电子设备和计算机可读存储介质
CN112597454A (zh) 代码混淆方法、代码运行方法、装置、介质与设备
CN104063225B (zh) 锁屏主题开发方法及装置
CN109787768B (zh) 一种身份验证配置方法、装置及计算机可读存储介质
CN107292135A (zh) 一种程序代码保护方法和装置
CN107103215A (zh) 一种apk安装方法及装置
Dewald et al. AVR processors as a platform for language-based security
CN109598107A (zh) 一种基于应用安装包文件的代码转换方法及装置
US20150113502A1 (en) Method and system for encapsulation of application
US20150113506A1 (en) Method and system for adaptive loading of application
CN108985756A (zh) Se应用处理方法、用户终端以及服务器
CN111880800B (zh) 应用下载方法与应用下载系统
KR20140139392A (ko) 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치
CN109450989A (zh) 一种数据传输的方法、装置、设备及介质
CN111260080A (zh) 基于机器学习的流程优化方法、装置、终端及存储介质
KR102439778B1 (ko) 애플리케이션의 보안성 향상을 위한 애플리케이션 변환 장치 및 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: Room 221, 2nd floor, Block C, 18 Kechuang 11th Street, Daxing Economic and Technological Development Zone, Beijing, 100176

Applicant after: Jingdong Digital Technology Holding Co., Ltd.

Address before: Room 221, 2nd floor, Block C, 18 Kechuang 11th Street, Daxing Economic and Technological Development Zone, Beijing, 100176

Applicant before: Beijing Jingdong Financial Technology Holding Co., Ltd.

RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20181211