CN111953475B - 一种代码漏洞的修复方法及设备 - Google Patents

一种代码漏洞的修复方法及设备 Download PDF

Info

Publication number
CN111953475B
CN111953475B CN202010728355.8A CN202010728355A CN111953475B CN 111953475 B CN111953475 B CN 111953475B CN 202010728355 A CN202010728355 A CN 202010728355A CN 111953475 B CN111953475 B CN 111953475B
Authority
CN
China
Prior art keywords
file
executable
class
aggregate
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.)
Active
Application number
CN202010728355.8A
Other languages
English (en)
Other versions
CN111953475A (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.)
Shanghai Lianshang Network Technology Co Ltd
Original Assignee
Shanghai Lianshang Network Technology 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 Shanghai Lianshang Network Technology Co Ltd filed Critical Shanghai Lianshang Network Technology Co Ltd
Priority to CN202010728355.8A priority Critical patent/CN111953475B/zh
Publication of CN111953475A publication Critical patent/CN111953475A/zh
Application granted granted Critical
Publication of CN111953475B publication Critical patent/CN111953475B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • 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/53Monitoring 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 executing in a restricted environment, e.g. sandbox or secure virtual machine
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Power Engineering (AREA)
  • Stored Programmes (AREA)

Abstract

本申请的目的是提供一种代码漏洞的修复方法及设备,本申请通过客户端响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,以请求应用服务器返回新的可执行聚合文件的下载地址和类信息发送给所述客户端;客户端基于下载地址下载新的可执行聚合文件,并基于类信息解析下载的新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,提高了线上漏洞修复的即时性,不需要应用服务器重新发版,为更好的用户体验提供了技术支持,在提高用户体验的同时,增强了用户的留存度。

Description

一种代码漏洞的修复方法及设备
技术领域
本申请涉及计算机领域,尤其涉及一种代码漏洞的修复方法及设备。
背景技术
安卓系统版本众多,机型众多,每次发布一个版本都是需要较长的时间。安卓应用版本升级至少需要两周才能达到80%的升级率,严重阻碍了版本迭代速度。也导致市场上application(应用程序,APP)版本分散,处理漏洞(bug)和投诉等也越来越麻烦。
现有技术中,APP发布新的版本的时候,如果发现线上bug,需要修改代码后,重新打包代码,然后再重新发布到市场,此种修复漏洞等问题的方式比较耗时,即时性较低,从而容易造成用户的流失。
发明内容
本申请的一个目的是提供一种代码漏洞的修复方法及设备,以在线上代码出现漏洞时,能够在不需要重新发版的情况下就可以修复线上的代码漏洞,从而提高线上漏洞的修复的响应即时性。
根据本申请的一个方面,提供了一种代码漏洞的修复方法,应用于客户端,其中,所述方法包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息;
接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息;
基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件;
按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
进一步地,上述客户端的代码漏洞的修复方法中,所述响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,读取所述客户端保存的所述至少一个类文件对应的可执行聚合文件,并计算所述可执行聚合文件的第一MD5值;
获取所述应用程序的第一版本信息;
基于所述可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,向所述应用服务器发送网路请求。
进一步地,上述客户端的代码漏洞的修复方法中,所述基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,包括:
根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;
基于所述下载地址下载所述新的可执行聚合文件;
根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;
根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
进一步地,上述客户端的代码漏洞的修复方法中,所述按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,包括:
读取每个所述类文件对应的原有可执行文件的内存对象,得到所述至少一个原有可执行文件对应的原有内存对象数组,其中,每个所述类文件对应一个原有可执行文件;
基于每个所述解密后的可执行文件的内存对象,构造所述至少一个解密后的可执行文件的自定义内存对象数组;
基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组;
将所述目标数组替换所述应用程序中的所述原有内存对象数组;
按照所述文件顺序列表的顺序,加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
进一步地,上述客户端的代码漏洞的修复方法中,所述基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组,包括:
获取所述原有内存对象数组的原数组长度和所述自定义内存对象数组的自定义数组长度;
基于所述原数组长度和所述自定义数组长度,对构建的目标数组进行初始化;
将所述自定义内存对象数组拷贝至所述目标数组的前部,将所述原有内存对象数组拷贝至所述目标数组的后部,得到所述目标数组。
根据本申请的另一个方面,还提供了一种代码漏洞的修复方法,应用于应用服务器端,其中,所述方法包括
接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值;
基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;
若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
进一步地,上述应用服务端的代码漏洞的修复方法中,所述基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新,包括:
获取所述应用程序在本地的第二版本信息及所述第二版本信息对应的应用程序中的所述可执行聚合文件的第二MD5值;
判断所述第一版本信息和所述第二版本信息是否一致,且所述可执行聚合文件的所述第一MD5值和所述第二MD5值是否一致。
进一步地,上述应用服务端的代码漏洞的修复方法中,所述方法还包括:
获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
根据预设的加解密密钥分别对每个所述可执行文件进行加密,得到至少一个加密后的可执行文件;
按每个所述类文件在所述应用程序中的运行顺序,将所述至少一个加密后的可执行文件进行聚合处理,得到所述至少一个类文件对应的可执行聚合文件。
进一步地,上述应用服务端的代码漏洞的修复方法中,所述获取所述至少一个类文件中的每个所述类文件对应的可执行文件,包括:
从漏洞统计平台获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
其中,所述漏洞统计平台用于获取所述应用程序中存在漏洞的至少一个类文件,并将每个所述类文件打包成对应的可执行文件。
根据本申请的另一个方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如上述代码漏洞的修复方法。
根据本申请的另一个方面,还提供了一种客户端,其中,该客户端包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述客户端的代码漏洞的修复方法。
根据本申请的另一个方面,还提供了一种应用服务器,其中,该应用服务器包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述应用服务端的代码漏洞的修复方法。
与现有技术相比,本申请通过在客户端响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息;当客户端和应用服务器质之间的应用程序的版本不一致时,所述客户端接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息后,基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件;按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,实现了通过钩子技术在安卓虚拟机中按照文件顺序列表的顺序,对加载的至少一个解密后的可执行文件进行运行,以实现对应用程序中存在漏洞的代码的替换,从而达到对存在漏洞的代码的修复的目的,使得在线上代码出现漏洞时,能够在不需要重新发版的情况下也可以修复线上的代码漏洞,从而提高线上漏洞的修复的响应即时性。
进一步地,当客户端需要对应用程序中存在漏洞的代码进行修复时,应用服务器接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值;基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。实现了当应用程序的线上代码出现漏洞时,可以通过客户端向应用服务器请求更新的可执行聚合文件,以便客户端冷启动后,基于请求的新的可执行聚合文件,对应用程序中存在漏洞的代码进行替换,以达到修复存在漏洞的代码目的,不仅大大提高了线上漏洞的修复的响应即时性,不需要应用服务器重新发版即可修复应用程序的线上代码的漏洞,为更好的用户体验提供了技术支持,在提高用户体验的同时,增强了用户的留存度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种代码漏洞的修复方法的交互流程示意图;
图2示出根据本申请一个方面的一种代码漏洞的修复方法的一实际应用场景中的dex聚合文件的示意图;
图3示出根据本申请一个方面的一种代码漏洞的修复方法的一实际应用场景的流程示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
如图1所示,本申请一个方面的一种代码漏洞的修复方法的交互流程示意图,应用于应用程序中的线上代码出现漏洞时,对存在漏洞的代码进行修复的过程中,该方法包括客户端和存在代码漏洞的应用程序对应的应用服务器。该方法包括:步骤S11、步骤S12、步骤S13、步骤S14、步骤S21、步骤S22、步骤S23、步骤S24、步骤S31、步骤S32、步骤S33及步骤S34,具体包括如下步骤:
当客户端发现应用程序中存在需要修复的问题代码时,在所述步骤S11中,客户端响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息;在此,所述应用程序的第一版本信息用于指示所述应用程序在所述客户端当前的版本信息。
步骤S21,所述应用服务器接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值。
步骤S22,所述应用服务器基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;
若是,则执行步骤S23;若否,则向所述客户端返回所述应用服务器存储的当前可执行聚合文件的下载地址和类信息至所述客户端,以使客户端基于所述当前可执行聚合文件的下载地址和类信息对第一版本信息对应的应用程序中存在漏洞的问题代码进行修复。
在所述步骤S23中,所述应用服务器将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。在此,所述新的可执行聚合文件为更新后的应用程序中的所述至少一个类文件对应的可执行聚合文件。
步骤S12,所述客户端接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息。
步骤S13,客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件。
步骤S14,客户端按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
通过上述步骤S11至步骤S14和步骤S21至步骤S24,实现了当应用程序的线上代码出现漏洞时,可以通过客户端向应用服务器请求更新的可执行聚合文件,以便客户端对新的可执行聚合文件进行解析,得到至少一个解密后的可执行文件,在客户端冷启动后,通过钩子技术在安卓虚拟机中按照文件顺序列表的顺序,对加载的至少一个解密后的可执行文件进行运行,以实现对应用程序中存在漏洞的代码的替换,以达到修复存在漏洞的代码目的,不仅大大提高了线上漏洞的修复的响应即时性,不需要应用服务器重新发版即可修复应用程序的线上代码的漏洞,为更好的用户体验提供了技术支持,在提高用户体验的同时,增强了用户的留存度。
接着本申请的上述实施例,在实际的应用场景中,当发现应用程序的线上代码存在漏洞时,需要定位和确定需要进行修复的问题代码,可以通过漏洞统计平台获取所述应用程序中存在漏洞的至少一个类文件,并将每个所述类文件打包成对应的可执行文件。即,所述漏洞统计平台对线上bug进行统计,并在统计后对存在漏洞的问题代码进行本地修复,在漏洞统计平台对存在漏洞的代码进行确定和修复后,为了便于应用服务器存储更新的应用程序的代码,需要将修复的代码发送给应用服务器,以便应用服务器基于修复的代码对客户端存在漏洞的问题代码进行修复和即时响应;又由于在修复漏洞时,需要在安卓虚拟机中进行运行,而安卓虚拟机能够识别的文件为可执行文件,则所述漏洞统计平台在将存在漏洞的问题代码发送给应用服务器时,所述漏洞统计平台需要将应用程序中存在漏洞的问题代码的类(class)文件打包成安卓系统能够识别的可执行(dex)文件,在此使用安卓(Android)软件开发工具包(Software Development Kit,SDK)自带的工具dx.dat来对类文件进行打包,具体打包代码为如下代码:
dx--dex--output=OUTPUT.dex SOURCE_CLASS
其中,OUTPUT.dex为自定义的输出dex文件的文件名,SOURCE_CLASS为需要打包成dex文件的class文件,即将一个class文件打包成对应的dex文件。
在漏洞统计平台对每个类文件进行打包成功后,将所述至少一个类文件中的每个所述类文件对应的可执行文件上传至应用服务器,以使所述应用服务器对所述至少一个类文件中的每个所述类文件对应的可执行文件进行加密和聚合处理。
接着本实施例中,本申请一个方面的一种所述应用服务器端的代码漏洞的修复方法中,所述方法还包括:
获取所述至少一个类文件中的每个所述类文件对应的可执行文件;其中,所述应用服务器是从所述漏洞统计平台获取所述至少一个类文件中的每个所述类文件对应的可执行文件的;
根据预设的加解密密钥分别对每个所述可执行文件进行加密,得到至少一个加密后的可执行文件;在此,所述加密方法可以包括但不限于AES加密算法等,对每个可执行文件均进行加密处理,防止各dex文件中的源代码发生泄漏,影响后续应用程序的版本和/或代码修复。
按每个所述类文件在所述应用程序中的运行顺序,将所述至少一个加密后的可执行文件进行聚合处理,得到所述至少一个类文件对应的可执行聚合文件。
例如,在应用服务器从所述漏洞统计平台接收到所述至少一个类文件对应的可执行文件,若所述类文件的个数为3个,分别为class1、class2和class3,其中,类文件class1对应的可执行文件为的dex1,类文件class2对应的可执行文件为的dex2,及类文件class3对应的可执行文件为的dex3;为了保证可执行文件的安全性,根据预设的加解密密钥分别对每个可执行文件进行加密处理,在本申请一优选的实施例中,可以根据预设的加解密密钥分别对可执行文件:dex1、dex2及dex3中的每个可执行文件进行AES加密处理,得到上述三个可执行文件各对应的加密后的可执行文件;并按上述三个类文件中的每个所述类文件在所述应用程序中的运行顺序,将3个所述加密后的可执行文件进行聚合处理,得到一个整体的可执行聚合文件,该整体的可执行聚合文件即为上述3个类文件对应的可执行聚合文件,如图2所示,实现了将存在漏洞的问题代码进行修复后的代码对应的至少一个可执行文件进行加密聚合处理。
接着本申请上述实施例,在所述步骤S11中,所述客户端响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,具体包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,读取所述客户端保存的所述至少一个类文件对应的可执行聚合文件,并计算所述可执行聚合文件的第一MD5值;
获取所述应用程序的第一版本信息;
基于所述可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,向所述应用服务器发送网路请求。
例如,客户端在实际运行应用程序的应用场景中,当客户端检测到应用程序中存在漏洞时,先确定存在漏洞的问题代码所在的至少一个类文件,然后读取所述客户端保存的所述至少一个类文件对应的可执行聚合文件,即dex聚合文件,并在代码中计算所述dex聚合文件的MD5值,在此,计算所述dex聚合文件的MD5值是进行动态计算的以防止被篡改,其中,所述客户端读取保存的所述dex聚合文件的MD5值可以通过如下代码实现:
String dexPkgMd5=MD5Util.getMd5(localDexPkgFile)
在计算所述至少一个类文件对应的dex聚合文件的第一MD5值的同时,还需要获取所述客户端存在漏洞代码的应用程序的版本信息,即客户端的第一版本信息,并将所述应用程序的第一版本信息和dex聚合文件的第一MD5值作为参数,调用接口,向应用服务器发起网络请求,以请求应用服务器中更新的dex聚合文件,所述网路请求包括所述至少一个类文件对应的dex聚合文件的第一MD5值和所述应用程序的第一版本信息,以便应用服务器根据应用程序的第一版本信息和该dex聚合文件的第一MD5值,来判断应用服务器端保存的dex聚合文件是否更新(即是否被篡改),具体判断的过程中,应用服务器还需获取应用程序在应用服务器保存的应用程序的版本信息(即应用程序的第二版本信息)及该第二版本信息对应的应用程序中的该dex聚合文件的第二MD5值,使得应用服务器可以通过判断所述第一版本信息和所述第二版本信息是否一致,且所述可执行聚合文件的所述第一MD5值和所述第二MD5值是否一致,来确定应用服务器保存的应用程序的版本信息是否发生了版本更新,其中,通过比较应用程序的第一版本信息和第二版本信息的一致性,可以判断出应用服务器的应用程序是否存在版本的更新,通过对比该dex聚合文件在客户端的第一MD5值和在应用服务器端的第二MD5值,可以对至少一个dex文件进行文件的完整性校验,避免出现dex文件的功能、内容及类等加载不完整的问题;若应用服务器保存的应用程序的版本信息(即应用程序的第二版本信息)及其对应的dex聚合文件的第二MD5值发生了改变,则所述应用服务器会向所述客户端返回新的dex聚合文件的下载地址和对应的类信息,使得客户端可以基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,其中,客户端可以通过如下代码实现对应用服务器返回的新的dex聚合文件对应的类信息进行解析的:
{
dexLens:[5120,36864,12288],//加密后的dex文件的长度,用于切分dex聚合文件
md5:"65ea1a45540df4c50afeb006e71882ae",//dex聚合文件的第一md5值,用于比对,验证是否被篡改
url:”http://www.test.com/dexPkg/898887879”,//dex聚合文件的下载地址
versionCode:18,//APP的当前版本信息
needUpdate:true//是否需要更新
}
对应的类信息包括如下内容:
Figure BDA0002599498770000131
所述步骤S13中,所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,具体包括:
根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;
基于所述下载地址下载所述新的可执行聚合文件;
根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;
根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
例如,当应用服务器向客户端返回新的dex聚合文件的下载地址和对应的类信息后,所述客户端可以通过如下代码来实现对网络请求返回的dex聚合文件的下载地址及其对应的类信息的处理:
Figure BDA0002599498770000141
其中,当客户端对新的dex聚合文件进行解析后,得到至少一个加密后的dex文件,在客户端进行存在漏洞的问题代码进行替换以修复之前,需要对每个加密后的dex文件进行加密,其中,在本申请一优选实施例中,在应用程序Applicattion的onCreate中,先加载至少一个加密后的dex文件到到客户端的内存中,并通过AES解密算法对下载的每个所述加密后的dex文件进行解密,其中,通过如下代码对加载所述加密后的dex文件(未解密)的字符串内容:
String dexContent=FileUtil.readStringFromSD(“fix.dex”);
通过如下代码实现使用AES解密算法来对加密后的dex文件的字符串内容进行解密:
byte[]res=AESUtil.decrypt(dexContent,PASSWORD);
其中,PASSWORD为客户端与应用服务器端之间约定好的加解密密钥,即预设的加解密密钥。
通过如下代码得到解密后的dex文件:
File dexFile=FileUtil.newFIle(res);
接着本申请的上述实施例,客户端在解析并加载下载的新的dex聚合文件的过程中,可以利用钩子(Hook)技术加载下载的解密后的dex文件到Android程序运行虚拟机(即,安卓虚拟机)运行,以达到修复存在漏洞的问题代码的目的;其中,采用Hook技术修复代码的机制理论基础中存在如下两点原则:一是Android虚拟机中的类加载采用双亲加载机制,已经加载过的类,不会再重新加载,二是因为存在多个dex文件的情况,所以所有的dex文件需要按照文件顺序列表进行按顺序加载,可以通过反射来Hook加载顺序,实现先加载预先指定的dex文件。具体地,客户端在执行所述步骤S14按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,具体包括:
读取每个所述类文件对应的原有可执行文件的内存对象,得到所述至少一个原有可执行文件对应的原有内存对象数组,其中,每个所述类文件对应一个原有可执行文件;
基于每个所述解密后的可执行文件的内存对象,构造所述至少一个解密后的可执行文件的自定义内存对象数组;
基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组;
将所述目标数组替换所述应用程序中的所述原有内存对象数组;
按照所述文件顺序列表的顺序,加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
例如,所述步骤S14中,首先读取每个所述类文件对应的原有可执行文件的内存对象,得到所述至少一个原有可执行文件对应的原有内存对象数组,其中,每个所述类文件对应一个原有可执行文件,其中,通过如下代码来读取原有可执行文件的内存对象以得到至少一个原有可执行文件对应的原有内存对象数组,即原有DexElement数组,其中,一个DexElement代表一个dex文件的内存对象:
Field pathList=ReflectionUtil.getField(getClassLoader(),”pathList”);
//反射得到类加载器ClassLoader的pathList对象
Object dexPathListObj=pathList.get(classLoader);//得到pathList的DexPathList对象
Field dexElementsField=ReflectionUtil.getField(dexPathListObj,
"dexElements");
//得到DexPathList中的dexElements属性
Object[]oldElements=(Object[])dexElementsField.get(dexPathListObj);
//获得DexPathList对象中dexElements属性的真实值
其次,基于每个所述解密后的可执行文件的内存对象,构造所述至少一个解密后的可执行文件的自定义内存对象数组,其中可以通过如下代码进行自定义DexElement数组的构造:
List<File>files=new ArrayList<>();//构造自定义DexElement数组,其中,一个DexElement代表一个dex文件的内存对象
files.add(dexFile);//对应第一步中得到的dexFile
List<IOException>ioExceptions=new ArrayList<>();//构造参数
Method makePathElementsMethod=ReflectionUtil.getMethod(
dexPathListObj,"makePathElements",List.class,File.class,List.class);
//得到DexPathList的makePathElements方法引用
接着,基于所述原有DexElement数组和所述自定义DexElement数组,构建并确定目标数组,即目标DexElement数组,比如,通过如下代码实现对目标DexElement数组的构建:
Object[]newElements=(Object[])makePathElementsMethod.invoke(null,files,optimizedDirectory,ioExceptions);
//构建出一个新的数组,即目标Element数组
本实施例中,所述基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组,具体包括:
获取所述原有内存对象数组的原数组长度和所述自定义内存对象数组的自定义数组长度;
基于所述原数组长度和所述自定义数组长度,对构建的目标数组进行初始化;
将所述自定义内存对象数组拷贝至所述目标数组的前部,将所述原有内存对象数组拷贝至所述目标数组的后部,得到所述目标数组。
例如,在构建目标数组(目标Element数组)时,可以通过合并自定义DexElement数组和原有DexElement数组,以得到目标DexElement数组。需要说明的是,在构建的目标DexElement数组中,需要将自定义DexElement数组排在原有DexElement数组的前面,可以通过如下代码实现对目标DexElement数组的构建和确定:
Object[]dexElements=null;
if(newElements!=null&&newElements.length>0){//合并后的目标DexElements数组
dexElements=(Object[])Array.newInstance(oldElements.getClass()
.getComponentType(),oldElements.length+newElements.length);//初始化目标数组,使用原有DexElement数组的原数组长度+自定义DexElement数组的自定义数组长度
System.arraycopy(newElements,0,dexElements,0,
newElements.length);//拷贝自定义DexElement数组到目标数组的前部
System.arraycopy(oldElements,0,dexElements,newElements.length,
oldElements.length);//将原有DexElement数组拷贝到目标数组的后部
}
之后,客户端通过反射将所述目标数组替换所述应用程序中的所述原有内存对象数组;最后,按照所述文件顺序列表的顺序,加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,由于自定义DexElement数组在目标数组的前部,按照文件顺序列表的顺序按序加载所述至少一个解密后的可执行文件中的每个解密后的可执行文件的过程中,先加载包含有与原有DexElement数组中的类的自定义DexElement数组,鉴于采用钩子技术在安卓虚拟机中进行运行的机制中,已经加载过的类,不会再重新加载,则在加载到目标数组中存在漏洞的原有DexElement数组时,由于在加载自定义DexElement数组时,已经将与原有DexElement数组中的可执行文件对应的类已经加载过了,无需再加载原有DexElement数组,就达到了通过自定义DexElement数组来替换原有DexElement数组的目的,其中,通过反射替换应用程序中的所述原有内存对象数组,已完成Hook过程可以通过如下代码实现:
dexElementsField.set(dexPathListObj,dexElements);
当客户端完成对应用程序中存在漏洞的问题代码的修复后,可以向应用服务器发送用于指示应用程序的当前次存在漏洞的问题代码已被修复的响应信息,以便应用服务器统计当前次的漏洞修复的成功率,实现对当前次漏洞修复的统计。
在本申请一个方面提供的代码漏洞的修复方法的一实际应用场景中,如图3所示,当发现应用程序的线上代码存在漏洞时,可以通过漏洞统计平台定位并统计线上bug代码,并确定线上bug代码对应的至少一个类文件;在统计后对存在漏洞的问题代码进行本地修复,在漏洞统计平台对存在漏洞的代码进行确定和修复后;又由于在修复漏洞时,需要在安卓虚拟机中进行运行,而安卓虚拟机能够识别的文件为可执行文件,则所述漏洞统计平台在将存在漏洞的问题代码发送给应用服务器时,所述漏洞统计平台需要将应用程序中存在漏洞的问题代码的类(class)文件打包成安卓系统能够识别的可执行(dex)文件,并将至少一个dex文件上传至应用服务器(对应图3中的服务端)。应用服务器分别对每个所述可执行文件进行加密,得到至少一个加密后的可执行文件并聚合,得到对应的dex聚合文件,计算并保存该dex聚合文件的第二MD5值(对应图3中的md5值)及每个加密后的dex文件的长度;当客户端冷启动后,计算客户端的至少一个dex文件对应的dex聚合文件的第一MD5值和获取应用程序的第一版本信息,将该dex聚合文件的第一MD5值和所述应用程序的第一版本信息作为参数,尝试请求应用服务器端的最新的dex聚合文件,应用服务器端向客户端返回新的dex聚合文件的下载地址和对应的类信息;客户端根据所述下载地址下载所述新的dex聚合文件,并基于类信息对下载的所述新的dex聚合文件进行解析,得到至少一个加密后的dex文件,并对每个所述加密后的dex文件进行解密,得到每个解密后的dex文件,客户端按照文件顺序列表Hook对应的至少一个解密后的dex文件加载过程,从而实现对客户端的应用程序中存在漏洞的问题代码的修复,在修复之后,向应用服务器发送用于指示修复完成的响应信息,以实现对应用服务器进行打点上报。
根据本申请的另一方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如上述代码漏洞的修复方法。
根据本申请的另一方面,还提供了一种客户端,其中,该客户端包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述客户端的代码漏洞的修复方法。
在此,所述用于代码漏洞的修复的客户端中的各实施例的详细内容,具体可参见上述的客户端的代码漏洞的修复方法实施例的对应部分,在此,不再赘述。
根据本申请的另一方面,还提供了一种应用服务器,其中,该应用服务器包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述应用服务器端的代码漏洞的修复方法。
在此,所述用于代码漏洞的修复的应用服务器中的各实施例的详细内容,具体可参见上述的应用服务器的代码漏洞的修复方法实施例的对应部分,在此,不再赘述。
综上所述,本申请通过在客户端响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息;当客户端和应用服务器质之间的应用程序的版本不一致时,所述客户端接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息后,基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件;按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,实现了通过钩子技术在安卓虚拟机中按照文件顺序列表的顺序,对加载的至少一个解密后的可执行文件进行运行,以实现对应用程序中存在漏洞的代码的替换,从而达到对存在漏洞的代码的修复的目的,使得在线上代码出现漏洞时,能够在不需要重新发版的情况下也可以修复线上的代码漏洞,从而提高线上漏洞的修复的响应即时性。
进一步地,当客户端需要对应用程序中存在漏洞的代码进行修复时,应用服务器接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值;基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。实现了当应用程序的线上代码出现漏洞时,可以通过客户端向应用服务器请求更新的可执行聚合文件,以便客户端冷启动后,基于请求的新的可执行聚合文件,对应用程序中存在漏洞的代码进行替换,以达到修复存在漏洞的代码目的,不仅大大提高了线上漏洞的修复的响应即时性,不需要应用服务器重新发版即可修复应用程序的线上代码的漏洞,为更好的用户体验提供了技术支持,在提高用户体验的同时,增强了用户的留存度。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (11)

1.一种代码漏洞的修复方法,应用于客户端,其中,所述方法包括:
响应于检测到应用程序的线上代码存在漏洞时,定位和确定待进行修复的问题代码,并通过漏洞统计平台获取所述应用程序中存在漏洞的至少一个类文件并将每个所述类文件打包成对应的可执行文件后,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,其中,所述应用服务器基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新,若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端;
接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息;
基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件;
按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞;
其中,所述基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,包括:根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;基于所述下载地址下载所述新的可执行聚合文件;根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
2.根据权利要求1所述的方法,其中,所述响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,读取所述客户端保存的所述至少一个类文件对应的可执行聚合文件,并计算所述可执行聚合文件的第一MD5值;
获取所述应用程序的第一版本信息;
基于所述可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,向所述应用服务器发送网路请求。
3.根据权利要求1所述的方法,其中,所述按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,包括:
读取每个所述类文件对应的原有可执行文件的内存对象,得到所述至少一个原有可执行文件对应的原有内存对象数组,其中,每个所述类文件对应一个原有可执行文件;
基于每个所述解密后的可执行文件的内存对象,构造所述至少一个解密后的可执行文件的自定义内存对象数组;
基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组;
将所述目标数组替换所述应用程序中的所述原有内存对象数组;
按照所述文件顺序列表的顺序,加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
4.根据权利要求3所述的方法,其中,所述基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组,包括:
获取所述原有内存对象数组的原数组长度和所述自定义内存对象数组的自定义数组长度;
基于所述原数组长度和所述自定义数组长度,对构建的目标数组进行初始化;
将所述自定义内存对象数组拷贝至所述目标数组的前部,将所述原有内存对象数组拷贝至所述目标数组的后部,得到所述目标数组。
5.一种代码漏洞的修复方法,应用于应用服务器端,其中,所述方法包括
接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值;其中,所述网路请求由所述客户端响应于检测到应用程序的线上代码存在漏洞时,定位和确定待进行修复的问题代码,并通过漏洞统计平台获取所述应用程序中存在漏洞的至少一个类文件并将每个所述类文件打包成对应的可执行文件后而发起;
基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;
若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞;
其中,所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,包括:根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;基于所述下载地址下载所述新的可执行聚合文件;根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
6.根据权利要求5所述的方法,其中,所述基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新,包括:
获取所述应用程序在本地的第二版本信息及所述第二版本信息对应的应用程序中的所述可执行聚合文件的第二MD5值;
判断所述第一版本信息和所述第二版本信息是否一致,且所述可执行聚合文件的所述第一MD5值和所述第二MD5值是否一致。
7.根据权利要求5所述的方法,其中,所述方法还包括:
获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
根据预设的加解密密钥分别对每个所述可执行文件进行加密,得到至少一个加密后的可执行文件;
按每个所述类文件在所述应用程序中的运行顺序,将所述至少一个加密后的可执行文件进行聚合处理,得到所述至少一个类文件对应的可执行聚合文件。
8.根据权利要求7所述的方法,其中,所述获取所述至少一个类文件中的每个所述类文件对应的可执行文件,包括:
从漏洞统计平台获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
其中,所述漏洞统计平台用于获取所述应用程序中存在漏洞的至少一个类文件,并将每个所述类文件打包成对应的可执行文件。
9.一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如权利要求1至8中任一项所述的方法。
10.一种客户端,其中,该客户端包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至4中任一项所述的方法。
11.一种应用服务器,其中,该应用服务器包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求5至8中任一项所述的方法。
CN202010728355.8A 2020-07-23 2020-07-23 一种代码漏洞的修复方法及设备 Active CN111953475B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010728355.8A CN111953475B (zh) 2020-07-23 2020-07-23 一种代码漏洞的修复方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010728355.8A CN111953475B (zh) 2020-07-23 2020-07-23 一种代码漏洞的修复方法及设备

Publications (2)

Publication Number Publication Date
CN111953475A CN111953475A (zh) 2020-11-17
CN111953475B true CN111953475B (zh) 2023-07-04

Family

ID=73339586

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010728355.8A Active CN111953475B (zh) 2020-07-23 2020-07-23 一种代码漏洞的修复方法及设备

Country Status (1)

Country Link
CN (1) CN111953475B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115459989A (zh) * 2022-09-02 2022-12-09 京东科技信息技术有限公司 数据访问方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106020873B (zh) * 2016-05-13 2021-11-23 腾讯科技(深圳)有限公司 补丁包加载方法及装置
WO2018209843A1 (zh) * 2017-05-17 2018-11-22 华为技术有限公司 一种执行热补丁的方法、装置及终端
CN107391107A (zh) * 2017-06-12 2017-11-24 北京明朝万达科技股份有限公司 一种应用程序的修复方法和装置
CN107329781A (zh) * 2017-06-21 2017-11-07 努比亚技术有限公司 软件热修复方法、终端、系统及计算机可读存储介质
CN107506647A (zh) * 2017-07-28 2017-12-22 努比亚技术有限公司 漏洞自动修复方法及移动终端
CN108037946B (zh) * 2017-11-03 2020-06-12 金证财富南京科技有限公司 一种应用程序热更新的方法、系统及服务器

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Helping Mobile Software Code Reviewers: A Study of Bug Repair and Refactoring Patterns.IEEE.2016,全文. *
面向动态加载的Android恶意行为动静态检测方法;郑晓梅;杨宇飞;程硕;潘正东;;计算机应用与软件(第12期);全文 *

Also Published As

Publication number Publication date
CN111953475A (zh) 2020-11-17

Similar Documents

Publication Publication Date Title
CN109214168B (zh) 固件升级方法及装置
CN107038045B (zh) 加载库文件的方法及装置
CN108229112B (zh) 一种保护应用程序、应用程序的运行方法以及装置
KR102600025B1 (ko) 프리캐싱을 위해 클라이언트 머신들 간에 셰이더들을 분배하는 것
US20140150096A1 (en) Method for assuring integrity of mobile applications and apparatus using the method
EP2104040A2 (en) Method and apparatus for verifying archived data integrity in integrated storage systems
US11561889B2 (en) Orchestration for automated performance testing
JP2011525003A (ja) 安全なアプリケーションストリーミング
US20200110905A1 (en) Security hardened software footprint in a computing environment
CN112507291B (zh) Android设备的唯一标识的生成方法和装置
CN111143869A (zh) 应用程序包处理方法、装置、电子设备及存储介质
CN111880826A (zh) 云业务应用升级方法、装置、电子设备和存储介质
CN113221166A (zh) 一种获取区块链数据的方法、装置、电子设备及存储介质
US10897361B1 (en) Automated hash validation
CN115248919A (zh) 一种函数接口的调用方法、装置、电子设备及存储介质
CN106709281B (zh) 补丁发放和获取方法、装置
CN111953475B (zh) 一种代码漏洞的修复方法及设备
CN111176685A (zh) 一种升级方法及装置
US11057215B1 (en) Automated hash validation
CN112416395A (zh) 一种热修复更新方法和装置
Choi et al. Large-scale analysis of remote code injection attacks in android apps
US11494493B1 (en) Software verification for network-accessible applications
US8775822B2 (en) Computer-implemented method and system for protecting a software installation after certification
US11349670B1 (en) Automated hash validation
CN110309655B (zh) 一种检测app更新过程中安全性的方法以及检测装置

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
GR01 Patent grant
GR01 Patent grant