CN111953475A - 一种代码漏洞的修复方法及设备 - Google Patents
一种代码漏洞的修复方法及设备 Download PDFInfo
- Publication number
- CN111953475A CN111953475A CN202010728355.8A CN202010728355A CN111953475A CN 111953475 A CN111953475 A CN 111953475A CN 202010728355 A CN202010728355 A CN 202010728355A CN 111953475 A CN111953475 A CN 111953475A
- Authority
- CN
- China
- Prior art keywords
- file
- executable
- class
- application program
- array
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic 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/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/53—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic 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/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (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//是否需要更新
}
对应的类信息包括如下内容:
所述步骤S13中,所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,具体包括:
根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;
基于所述下载地址下载所述新的可执行聚合文件;
根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;
根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
例如,当应用服务器向客户端返回新的dex聚合文件的下载地址和对应的类信息后,所述客户端可以通过如下代码来实现对网络请求返回的dex聚合文件的下载地址及其对应的类信息的处理:
其中,当客户端对新的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 (12)
1.一种代码漏洞的修复方法,应用于客户端,其中,所述方法包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,所述网路请求包括所述至少一个类文件对应的可执行聚合文件的第一MD5值和所述应用程序的第一版本信息;
接收所述应用服务器发送的新的可执行聚合文件的下载地址和类信息;
基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件;
按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
2.根据权利要求1所述的方法,其中,所述响应于检测到应用程序中存在漏洞的至少一个类文件,向应用服务器发送网路请求,包括:
响应于检测到应用程序中存在漏洞的至少一个类文件,读取所述客户端保存的所述至少一个类文件对应的可执行聚合文件,并计算所述可执行聚合文件的第一MD5值;
获取所述应用程序的第一版本信息;
基于所述可执行聚合文件的第一MD5值和所述应用程序的第一版本信息,向所述应用服务器发送网路请求。
3.根据权利要求1所述的方法,其中,所述基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件,得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,包括:
根据所述类信息中的更新状态确定所述可执行聚合文件需要更新;
基于所述下载地址下载所述新的可执行聚合文件;
根据所述类信息中的每个加密后的可执行文件的长度,从下载的所述新的可执行聚合文件中切分出至少一个所述加密后的可执行文件并确定所述文件顺序列表,其中,每个所述类文件对应一个所述加密后的可执行文件;
根据预设的加解密密钥分别对每个所述加密后的可执行文件进行解密,得到至少一个所述解密后的可执行文件并保存,其中,每个所述类文件对应一个所述解密后的可执行文件。
4.根据权利要求1所述的方法,其中,所述按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞,包括:
读取每个所述类文件对应的原有可执行文件的内存对象,得到所述至少一个原有可执行文件对应的原有内存对象数组,其中,每个所述类文件对应一个原有可执行文件;
基于每个所述解密后的可执行文件的内存对象,构造所述至少一个解密后的可执行文件的自定义内存对象数组;
基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组;
将所述目标数组替换所述应用程序中的所述原有内存对象数组;
按照所述文件顺序列表的顺序,加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
5.根据权利要求4所述的方法,其中,所述基于所述原有内存对象数组和所述自定义内存对象数组,构建并确定目标数组,包括:
获取所述原有内存对象数组的原数组长度和所述自定义内存对象数组的自定义数组长度;
基于所述原数组长度和所述自定义数组长度,对构建的目标数组进行初始化;
将所述自定义内存对象数组拷贝至所述目标数组的前部,将所述原有内存对象数组拷贝至所述目标数组的后部,得到所述目标数组。
6.一种代码漏洞的修复方法,应用于应用服务器端,其中,所述方法包括
接收客户端发送的网路请求,所述网路请求包括应用程序的第一版本信息和所述应用程序中存在漏洞的至少一个类文件对应的可执行聚合文件的第一MD5值;
基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新;
若是,则将新的可执行聚合文件的下载地址和类信息发送给所述客户端,以使所述客户端基于所述下载地址下载所述新的可执行聚合文件,并基于所述类信息解析下载的所述新的可执行聚合文件得到文件顺序列表和至少一个解密后的可执行文件,其中,每个所述类文件对应一个所述解密后的可执行文件,并按照所述文件顺序列表的顺序,采用钩子技术加载所述至少一个解密后的可执行文件至安卓虚拟机中运行,以修复所述应用程序存在的漏洞。
7.根据权利要求6所述的方法,其中,所述基于所述第一版本信息和所述可执行聚合文件的第一MD5值,判断本地保存的所述可执行聚合文件是否更新,包括:
获取所述应用程序在本地的第二版本信息及所述第二版本信息对应的应用程序中的所述可执行聚合文件的第二MD5值;
判断所述第一版本信息和所述第二版本信息是否一致,且所述可执行聚合文件的所述第一MD5值和所述第二MD5值是否一致。
8.根据权利要求6所述的方法,其中,所述方法还包括:
获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
根据预设的加解密密钥分别对每个所述可执行文件进行加密,得到至少一个加密后的可执行文件;
按每个所述类文件在所述应用程序中的运行顺序,将所述至少一个加密后的可执行文件进行聚合处理,得到所述至少一个类文件对应的可执行聚合文件。
9.根据权利要求8所述的方法,其中,所述获取所述至少一个类文件中的每个所述类文件对应的可执行文件,包括:
从漏洞统计平台获取所述至少一个类文件中的每个所述类文件对应的可执行文件;
其中,所述漏洞统计平台用于获取所述应用程序中存在漏洞的至少一个类文件,并将每个所述类文件打包成对应的可执行文件。
10.一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如权利要求1至9中任一项所述的方法。
11.一种客户端,其中,该客户端包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至5中任一项所述的方法。
12.一种应用服务器,其中,该应用服务器包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求6至9中任一项所述的方法。
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 true CN111953475A (zh) | 2020-11-17 |
CN111953475B 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) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641527A (zh) * | 2021-09-02 | 2021-11-12 | 中国银行股份有限公司 | 手机银行客户端生产问题修复方法及装置 |
CN115459989A (zh) * | 2022-09-02 | 2022-12-09 | 京东科技信息技术有限公司 | 数据访问方法和装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020873A (zh) * | 2016-05-13 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 补丁包加载方法及装置 |
CN106095502A (zh) * | 2016-06-13 | 2016-11-09 | 北京奇虎科技有限公司 | 一种安卓应用的热修复方法、装置、服务器和系统 |
CN107329781A (zh) * | 2017-06-21 | 2017-11-07 | 努比亚技术有限公司 | 软件热修复方法、终端、系统及计算机可读存储介质 |
CN107391107A (zh) * | 2017-06-12 | 2017-11-24 | 北京明朝万达科技股份有限公司 | 一种应用程序的修复方法和装置 |
CN107506647A (zh) * | 2017-07-28 | 2017-12-22 | 努比亚技术有限公司 | 漏洞自动修复方法及移动终端 |
CN108037946A (zh) * | 2017-11-03 | 2018-05-15 | 金证财富南京科技有限公司 | 一种应用程序热更新的方法、系统及服务器 |
WO2018209843A1 (zh) * | 2017-05-17 | 2018-11-22 | 华为技术有限公司 | 一种执行热补丁的方法、装置及终端 |
-
2020
- 2020-07-23 CN CN202010728355.8A patent/CN111953475B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020873A (zh) * | 2016-05-13 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 补丁包加载方法及装置 |
CN106095502A (zh) * | 2016-06-13 | 2016-11-09 | 北京奇虎科技有限公司 | 一种安卓应用的热修复方法、装置、服务器和系统 |
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 | 努比亚技术有限公司 | 漏洞自动修复方法及移动终端 |
CN108037946A (zh) * | 2017-11-03 | 2018-05-15 | 金证财富南京科技有限公司 | 一种应用程序热更新的方法、系统及服务器 |
Non-Patent Citations (2)
Title |
---|
"Helping Mobile Software Code Reviewers: A Study of Bug Repair and Refactoring Patterns", IEEE * |
郑晓梅;杨宇飞;程硕;潘正东;: "面向动态加载的Android恶意行为动静态检测方法", 计算机应用与软件, no. 12 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641527A (zh) * | 2021-09-02 | 2021-11-12 | 中国银行股份有限公司 | 手机银行客户端生产问题修复方法及装置 |
CN115459989A (zh) * | 2022-09-02 | 2022-12-09 | 京东科技信息技术有限公司 | 数据访问方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111953475B (zh) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102419574B1 (ko) | 컴퓨터 애플리케이션에서 메모리 손상을 교정하기 위한 시스템 및 방법 | |
US11762763B2 (en) | Orchestration for automated performance testing | |
CN108229112B (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
US9092301B2 (en) | Efficient patching | |
US10979440B1 (en) | Preventing serverless application package tampering | |
US10216527B2 (en) | Automated software configuration management | |
US20030204843A1 (en) | Automated installation of an application | |
CN113221166A (zh) | 一种获取区块链数据的方法、装置、电子设备及存储介质 | |
CN111914303B (zh) | Linux系统运行时状态的安全度量与安全验证方法 | |
US11036522B2 (en) | Remote component loader | |
CN112507291B (zh) | Android设备的唯一标识的生成方法和装置 | |
CN111143869A (zh) | 应用程序包处理方法、装置、电子设备及存储介质 | |
CN111953475B (zh) | 一种代码漏洞的修复方法及设备 | |
US20200287724A1 (en) | Establishment of trusted communication with container-based services | |
CN113467784B (zh) | 应用程序处理方法及其装置、计算机可读存储介质 | |
CN111897846A (zh) | 缓存数据校验方法、装置、设备及存储介质 | |
CN112153012B (zh) | 多端触点接入方法、装置及存储介质 | |
WO2023065823A1 (zh) | 一种软件开发工具包修复方法、终端、服务器及设备 | |
CN115248919A (zh) | 一种函数接口的调用方法、装置、电子设备及存储介质 | |
US11151020B1 (en) | Method and system for managing deployment of software application components in a continuous development pipeline | |
US20030204730A1 (en) | Secure transmission and installation of an application | |
US8635447B1 (en) | Managing certificates between software environments | |
CN110232261B (zh) | 包文件的操作方法、文件处理设备及具有存储功能的设备 | |
CN108259490B (zh) | 一种客户端校验方法及装置 | |
US20200183675A1 (en) | Image file packaging method and image file packaging system |
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 |