CN109101254A - 一种热修复方法及设备 - Google Patents
一种热修复方法及设备 Download PDFInfo
- Publication number
- CN109101254A CN109101254A CN201810805581.4A CN201810805581A CN109101254A CN 109101254 A CN109101254 A CN 109101254A CN 201810805581 A CN201810805581 A CN 201810805581A CN 109101254 A CN109101254 A CN 109101254A
- Authority
- CN
- China
- Prior art keywords
- hot repair
- hot
- script
- code block
- repair
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种热修复方法及设备,包括:加载内存中预设目录下的热修复脚本文件;使用预设解析器对所述热修复脚本文件解析,得到至少一个热修复代码块和每个所述热修复代码块对应的类和函数;根据每个所述热修复代码块对应的所述类和函数,用所述热修复代码块替换寄存器中所述类和函数对应的原始代码块;当接收到热修复指令时,执行所述热修复指令对应的热修复代码块进行热修复。本发明使用的热修复脚本文件仅支持预设解析器进行解析,绕开iOS的审核;只在执行到的时候执行热修复,实现了用户使用过程中进行修复,与传统一次性全部完成修复相比,丰富了更新机制。
Description
技术领域
本发明涉及热修复领域,尤其涉及一种热修复方法及设备。
背景技术
热修复作为一种快速解决IT产品线上异常的技术手段对于移动应用相当重要,特别在iOS平台上。由于苹果公司的审核周期一般较长,如果通过发布新的版本去修复上一版本出现的异常问题,则需要较长的周期,从而导致异常扩散,不仅影响APP(Application,应用程序)功能的正常使用,更严重损害产品的声誉和用户的体验,导致用户流失。
现有技术中,iOS平台实现热修复的功能的开源技术也不少,比如流程的JSPatch、Lua、Wax等,但就在2017年3月8日左右,苹果公司针对运用这些热修复功能的产品提出了严厉的警告,甚至下架的多款使用以上热修复功能的产品,腾讯阿里等大公司都有相关产品审核被拒。
之所以被苹果警告甚至审核拒绝最主要的原因是安全问题:一方面是没有遵守苹果公司的规定,调用了苹果禁止在应用商店使用的敏感函数;另一方面是在使用这些动态热修复的过程中,没有进行安全方面的技术保障,导致容易被不法分子通过中间人攻击的手段篡改热修复的代码,下发恶意代码,形成严重的安全隐患,破坏苹果的生态***。
发明内容
本发明的目的是提供一种热修复方法及设备,使相关产品能够安全地使用热修复脚本修复异常问题,避免使用敏感函数,使具有热修复功能的产品能顺利通过苹果公司严格的审核。
本发明提供的技术方案如下:
一种热修复方法,包括:加载内存中预设目录下的热修复脚本文件;使用预设解析器对所述热修复脚本文件解析,得到至少一个热修复代码块和每个所述热修复代码块对应的类和函数;根据每个所述热修复代码块对应的所述类和函数,用所述热修复代码块替换寄存器中所述类和函数对应的原始代码块;当接收到热修复指令时,执行所述热修复指令对应的热修复代码块进行热修复。
在上述技术方案中,热修复脚本文件通过使用预设解析器解析成类、函数和热修复代码块的方式,绕开了对iOS***自带JavaScriptCore.framework库的依赖,降低了被苹果公司通过代码扫描到的危险。
进一步,所述预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
在上述技术方案中,Yacc和Lex是Unix***(iOS底层也是Unix)底层默认支持的一种工具,使用其作为脚本解析工具,可以绕开对iOS中runtime运行时的依赖,也降低了被苹果公司通过代码扫描到的风险。
进一步,所述加载内存中预设目录下的热修复脚本文件之前还包括:当符合预设触发条件时,向服务器发送脚本更新请求;当接收到所述服务器根据所述脚本更新请求发送的下载地址时,根据所述下载地址下载对应的热修复脚本包;当所述热修复脚本包被校验成功时,得到热修复脚本文件;将所述热修复脚本文件存储到内存中的预设目录下。
在上述技术方案中,热修复脚本包在下载后会进行校验,保证了热修复过程的安全性。
进一步,所述预设触发条件包括以下任意一种或多种:应用程序启动;应用程度处于后台运行;在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
在上述技术方案中,预设触发条件的多样性使热修复脚本包能够在不同情况下被下载,保证了APP的异常在运行过程中可以得到及时修复。
进一步,所述当热修复脚本包被校验成功时,得到热修复脚本文件具体为:对所述热修复脚本包进行MD5数字签名校验;若所述MD5数字签名校验成功,则解压所述热修复脚本包;若解压成功,得到解压后脚本文件;获取所述解压后脚本文件中前预设数量的字符;当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为所述热修复脚本包被校验成功,所述解压后脚本文件则为所述热修复脚本文件。
在上述技术方案中,热修复脚本包使用多重加密方式,多方面对热修复脚本包的安全性进行控制。
本发明还提供一种热修复设备,包括:加载模块,用于加载内存中预设目录下的热修复脚本文件;解析模块,用于使用预设解析器对所述热修复脚本文件解析,得到至少一个热修复代码块和每个所述热修复代码块对应的类和函数;替换模块,用于根据每个所述热修复代码块对应的所述类和函数,用所述热修复代码块替换所述类和函数对应的原始代码块;热修复模块,用于当接收到热修复指令时,执行所述热修复指令对应的热修复代码块进行热修复。
在上述技术方案中,热修复脚本文件通过使用预设解析器解析成类、函数和热修复代码块的方式,绕开了对iOS***自带JavaScriptCore.framework库的依赖,降低了被苹果公司通过代码扫描到的危险。
进一步,所述预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
进一步,还包括:发送模块,用于当符合预设触发条件时,向服务器发送脚本更新请求;下载模块,用于当接收到所述服务器根据所述脚本更新请求发送的下载地址时,根据所述下载地址下载对应的热修复脚本包;校验模块,用于当所述热修复脚本包被校验成功时,得到热修复脚本文件;存储模块,用于将所述热修复脚本文件存储到内存中的预设目录下。
进一步,所述预设触发条件包括以下任意一种或多种:应用程序启动;应用程度处于后台运行;在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
进一步,所述校验模块,用于当所述热修复脚本包被校验成功时,得到热修复脚本文件具体为:MD5校验子模块,用于对所述热修复脚本包进行MD5数字签名校验;解压子模块,用于若所述MD5数字签名校验成功,则解压所述热修复脚本包;以及,若解压成功,得到解压后脚本文件;字符获取子模块,用于获取所述解压后脚本文件中前预设数量的字符;字符校验子模块,用于当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为所述热修复脚本包被校验成功,所述解压后脚本文件则为所述热修复脚本文件。
与现有技术相比,本发明的热修复方法及设备有益效果在于:
本发明使用的热修复脚本文件仅支持预设解析器进行解析,绕开iOS的审核;只在执行到的时候执行热修复,实现了用户使用过程中进行修复,与传统一次性全部完成修复相比,丰富了更新机制。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对一种热修复方法及设备的上述特性、技术特征、优点及其实现方式予以进一步说明。
图1是本发明热修复方法一个实施例的流程图;
图2是本发明热修复方法另一个实施例的流程图;
图3是本发明热修复设备一个实施例的结构示意图;
图4是本发明热修复设备另一个实施例的结构示意图。
附图标号说明:
10.加载模块,20.解析模块,30.替换模块,40.热修复模块,50.发送模块,60.下载模块,70.校验模块,71.MD5校验子模块,72.解压子模块,73.字符获取子模块,74.字符校验子模块,80.存储模块。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
如本文中所述,术语“包括”及其各种变体可以被理解为开放式术语,其意味着“包括但不限于”。术语“一个实施例”可以被理解为“至少一个实施例”。术语“另一实施例”可以被理解为“至少一个其它实施例”。
本发明的一些实施例涉及热修复方法和设备,其主要用于使安装于iOS***的APP可以顺利通过苹果公司严格的审核,使用热修复更新来修复异常问题。
参见图1,图1示出了在本发明的一个实施例的热修复方法的流程图,包括:
S101加载内存中预设目录下的热修复脚本文件。
具体的,下载、解压后得到的热修复脚本文件存储于本地内存的预设目录下。建立一定的规则来设置预设目录,例如:根据APP版本号为文件夹名,存放于***根目录下,根据APP版本号创建的文件夹作为预设目录。若采用这种规则设置预设目录,APP版本号每次变动其对应的预设目录也会变动。采用APP版本号作为预设目录的名称有效区分了热修复脚本文件属于具体的哪个版本,实现有效管理。
S102使用预设解析器对热修复脚本文件解析,得到至少一个热修复代码块和每个热修复代码块对应的类和函数。
具体的,现有技术一般会采用JavaScriptCore.framework库绕过iOS的审核进行热修复,但是JavaScriptCore.framework库本身属于iOS***自带的库,有被检测到的风险,且若苹果公司对其进行限制,则无法再利用JavaScript库进行热修复。
在本公开的实施例中,预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器,也就是说发布的热修复脚本文件需要满足让Yacc和Lex工具编写的语法词法解析器解析。由于Yacc和Lex是Unix***(iOS底层也是Unix)底层默认支持的一种工具,使用其作为脚本解析工具,可以绕开对iOS中runtime运行时的依赖,也降低了被苹果公司通过代码扫描到的风险。
S103根据每个热修复代码块对应的类和函数,用热修复代码块替换(寄存器中)类和函数对应的原始代码块。
具体的,热修复脚本文件针对的修复异常可能只涉及到一个类下的某一个函数,也可能涉及到一个类下的多个函数或多个类下的多个函数,而每个热修复代码块都有其对应的类和函数,也是为了方便替换寄存器中此类和函数对应的原始代码块,为后续自动热修复打下基础。
热修复代码块的多少是根据需要解决的异常情况决定。而每个热修复代码块由多个表达式组成,热修复时执行的是热修复代码块中的表达式指令。
S104当接收到热修复指令时,执行热修复指令对应的热修复代码块进行热修复。
具体的,接收到热修复指令是指当用户运行某一个函数时,而该函数又是被热修复代码块替换过的,则该函数会触发一个指针,该指针会自动指向到寄存器中该函数对应的热修复代码块,并执行热修复代码块中的表达式指令进行热修复。
例如:拍照功能对应的类下的函数A的原始代码块被替换为热修复代码块,用户点击拍照时,认为接收到拍照所对应的热修复指令,执行函数A对应的热修复代码块进行对拍照这一功能所产生的异常问题的热修复。
需要注意的是,虽然用热修复脚本文件中的各热修复代码块替换对应的原始代码块,但是只有在用户执行到某一个被替换了原始代码块的函数时才会执行对应的热修复代码块进行热修复。若用户常用的功能一直不使用某一个被替换了原始代码块的函数,其对应的热修复代码块不会被执行。
本实施例中的热修复脚本文件通过使用预设解析器解析成类、函数和热修复代码块的方式,绕开了对iOS***自带JavaScriptCore.framework库的依赖,降低了被苹果公司通过代码扫描到的危险。
在另一实施例中,如图2所示,一种热修复方法,包括:
S201当符合预设触发条件时,向服务器发送脚本更新请求。
具体的,APP通过向服务器发送脚本更新请求来下载热修复脚本包,供后续的热修复。
预设触发条件可以根据实际情况设置。可选地,预设触发条件包括以下任意一种或多种:应用程序启动;应用程度处于后台运行;在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
例如:每次APP启动时就认为符合预设触发条件;或者APP处理后台状态(后台运行)时也认为符合预设触发条件;或者APP接收到HTTP接口的返回值等于预设值时认为符合预设触发条件。
每一个HTTP接口的返回信息中都会包含有头信息,在头信息中可以任意添加预设字段,通过对预设字段的值(即上述所说的返回值)进行判断,确认是否符合预设触发条件。预设值由工程师自行定义,在此不作限制。
脚本更新请求中包含了用户信息,用户信息包括以下任意一种或多种:用户的设备号(例如:UUID,即Universally Unique Identifier,通用唯一识别码)、APP的版本号、用户ID(Identification,身份标识号)等。
S202当接收到服务器根据脚本更新请求发送的下载地址时,根据下载地址下载对应的热修复脚本包。
具体的,服务器在接收到包含了用户信息的脚本更新请求后,会根据APP的版本号查询是否存在对应的热修复脚本包,若有的话,会返回下载地址给安装有此APP的客户端,让其下载热修复脚本包;若无的话,则忽略。
S203当热修复脚本包被校验成功时,得到热修复脚本文件。
具体的,下载了热修复脚本包后,会对其进行安全校验,保证下载的热修复脚本包为正确、可正常执行热修复的脚本包。若校验不成功,则向服务器反馈校验不成功信息。
优选地,S203当热修复脚本包被校验成功时,得到热修复脚本文件具体为:
S213对热修复脚本包进行MD5数字签名校验。
具体的,热修复脚本包中包含了MD5数字签名,对其进行校验可以先排除潜在的安全问题。MD5数字签名的校验过程为现有技术,在此不作详细描述。
S223若MD5数字签名校验成功,则解压热修复脚本包。
具体的,为传输方便、快速,热修复脚本包是以压缩包的形式下载的,若下载过程中存在数据缺失等问题,会导致解压不成功,因此,若解压热修复脚本包成功,则认为解压校验成功。
S233若解压成功,得到解压后脚本文件。
具体的,解压后得到的解压后脚本文件就是未压缩前的热修复脚本文件。
S243获取解压后脚本文件中前预设数量的字符。
具体的,热修复脚本文件中包含了服务器根据客户端反馈的用户信息加密得到的字符串,定义将这些字符串作为前预设数量的字符放在热修复脚本文件中。客户端在解压得到解压后脚本文件后,提取前预设数量的字符供后续的文件内容校验,进一步提高热修复脚本文件的安全性。可选地,预设数量为50。
S253当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为热修复脚本包被校验成功,解压后脚本文件则为热修复脚本文件。
具体的,客户端采用和服务器相同的加密方式对用户信息进行加密后得到字符串与获取的前预设数量的字符进行比较,若相同,则认为文件内容校验成功,将解压后脚本文件作为热修复脚本文件存储到预设目录下,供后续加载。
例如,若用户信息包括:用户的设备号和APP版本号,则将两者结合并加密后得到字符串。
需要注意的是,上述的三个校验是顺序校验,只有三个校验都成功,才认为热修复脚本包被校验成功;若其中一个校验出现问题,就认为热修复脚本包校验不成功。
S263当MD5数字签名校验不成功,或,解压不成功,或,用户信息经过加密后得到的字符串与获取的前预设数量的字符不相同时,反馈校验不成功信息。
具体的,任意一个校验不成功,都认为热修复脚本包校验不成功,需要向服务器反馈校验不成功信息。
可选地,校验不成功信息中包含了校验不成功的具体信息,例如:若MD5数字签名校验时不成功,则反馈检验不成功信息中包含MD5数字签名校验不成功的信息。
S204将热修复脚本文件存储到内存中的预设目录下。
S205加载内存中预设目录下的热修复脚本文件。
S206使用预设解析器对热修复脚本文件解析,得到至少一个热修复代码块和每个热修复代码块对应的类和函数。
优选地,预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
S207根据每个热修复代码块对应的类和函数,用热修复代码块替换寄存器中类和函数对应的原始代码块;
S208当接收到热修复指令时,执行热修复指令对应的热修复代码块进行热修复。
具体的,与上述实施例相同部分的解释在此不作赘述,请参见上述实施例。
本发明的热修复脚本包使用多重加密方式,多方面对热修复脚本包的安全性进行控制;且使用的热修复脚本文件仅支持预设解析器进行解析,绕开iOS的审核;只在执行到的时候执行热修复,实现了用户使用过程中进行修复,与传统一次性全部完成修复相比,丰富了更新机制。
参见图3,图3示出了在本发明的一个实施例的热修复设备,包括:
加载模块10,用于加载内存中预设目录下的热修复脚本文件。
具体的,下载、解压后得到的热修复脚本文件存储于本地内存的预设目录下。建立一定的规则来设置预设目录,例如:根据APP版本号为文件夹名,存放于***根目录下,根据APP版本号创建的文件夹作为预设目录。若采用这种规则设置预设目录,APP版本号每次变动其对应的预设目录也会变动。采用APP版本号作为预设目录的名称有效区分了热修复脚本文件属于具体的哪个版本,实现有效管理。
解析模块20,与加载模块10电连接,用于使用预设解析器对热修复脚本文件解析,得到至少一个热修复代码块和每个热修复代码块对应的类和函数。
具体的,现有技术一般会采用JavaScriptCore.framework库绕过iOS的审核进行热修复,但是JavaScriptCore.framework库本身属于iOS***自带的库,有被检测到的风险,且若苹果公司对其进行限制,则无法再利用JavaScript库进行热修复。
在本公开的实施例中,预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器,也就是说发布的热修复脚本文件需要满足让Yacc和Lex工具编写的语法词法解析器解析。由于Yacc和Lex是Unix***(iOS底层也是Unix)底层默认支持的一种工具,使用其作为脚本解析工具,可以绕开对iOS中runtime运行时的依赖,也降低了被苹果公司通过代码扫描到的风险。
替换模块30,与解析模块20电连接,用于根据每个热修复代码块对应的类和函数,用热修复代码块替换(寄存器中)类和函数对应的原始代码块。
具体的,热修复脚本文件针对的修复异常可能只涉及到一个类下的某一个函数,也可能涉及到一个类下的多个函数或多个类下的多个函数,而每个热修复代码块都有其对应的类和函数,也是为了方便替换寄存器中此类和函数对应的原始代码块,为后续自动热修复打下基础。
热修复代码块的多少是根据需要解决的异常情况决定。而每个热修复代码块由多个表达式组成,热修复时执行的是热修复代码块中的表达式指令。
热修复模块40,与替换模块30电连接,用于当接收到热修复指令时,执行热修复指令对应的热修复代码块进行热修复。
具体的,接收到热修复指令是指当用户运行某一个函数时,而该函数又是被热修复代码块替换过的,则该函数会触发一个指针,该指针会自动指向到寄存器中该函数对应的热修复代码块,并执行热修复代码块中的表达式指令进行热修复。
例如:拍照功能对应的类下的函数A的原始代码块被替换为热修复代码块,用户点击拍照时,认为接收到拍照所对应的热修复指令,执行函数A对应的热修复代码块进行对拍照这一功能所产生的异常问题的热修复。
需要注意的是,虽然用热修复脚本文件中的各热修复代码块替换对应的原始代码块,但是只有在用户执行到某一个被替换了原始代码块的函数时才会执行对应的热修复代码块进行热修复。若用户常用的功能一直不使用某一个被替换了原始代码块的函数,其对应的热修复代码块不会被执行。
本实施例中的热修复脚本文件通过使用预设解析器解析成类、函数和热修复代码块的方式,绕开了对iOS***自带JavaScriptCore.framework库的依赖,降低了被苹果公司通过代码扫描到的危险。
参见图4,图4示出了在本发明的另一个实施例的热修复设备,包括:
发送模块50,用于当符合预设触发条件时,向服务器发送脚本更新请求。
具体的,APP通过向服务器发送脚本更新请求来下载热修复脚本包,供后续的热修复。
预设触发条件可以根据实际情况设置。可选地,预设触发条件包括以下任意一种或多种:应用程序启动;应用程度处于后台运行;在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
例如:每次APP启动时就认为符合预设触发条件;或者APP处理后台状态(后台运行)时也认为符合预设触发条件;或者APP接收到HTTP接口的返回值等于预设值时认为符合预设触发条件。
每一个HTTP接口的返回信息中都会包含有头信息,在头信息中可以任意添加预设字段,通过对预设字段的值(即上述所说的返回值)进行判断,确认是否符合预设触发条件。预设值由工程师自行定义,在此不作限制。
脚本更新请求中包含了用户信息,用户信息包括以下任意一种或多种:用户的设备号(例如:UUID,即Universally Unique Identifier,通用唯一识别码)、APP的版本号、用户ID(Identification,身份标识号)等。
下载模块60,与发送模块50电连接,用于当接收到服务器根据脚本更新请求发送的下载地址时,根据下载地址下载对应的热修复脚本包。
具体的,服务器在接收到包含了用户信息的脚本更新请求后,会根据APP的版本号查询是否存在对应的热修复脚本包,若有的话,会返回下载地址给安装有此APP的客户端(相当于本实施例的热修复设备),让其下载热修复脚本包;若无的话,则忽略。
校验模块70,与下载模块60电连接,用于当热修复脚本包被校验成功时,得到热修复脚本文件。
具体的,下载了热修复脚本包后,会对其进行安全校验,保证下载的热修复脚本包为正确、可正常执行热修复的脚本包。若校验不成功,则向服务器反馈校验不成功信息。
优选地,校验模块70包括:MD5校验子模块71、解压子模块72、字符获取子模块73和字符校验子模块74。
校验模块70,用于当热修复脚本包被校验成功时,得到热修复脚本文件具体为:
MD5校验子模块71,用于对热修复脚本包进行MD5数字签名校验。
具体的,热修复脚本包中包含了MD5数字签名,对其进行校验可以先排除潜在的安全问题。MD5数字签名的校验过程为现有技术,在此不作详细描述。
解压子模块72,用于若MD5数字签名校验成功,则解压热修复脚本包;以及,若解压成功,得到解压后脚本文件。
具体的,为传输方便、快速,热修复脚本包是以压缩包的形式下载的,若下载过程中存在数据缺失等问题,会导致解压不成功,因此,若解压热修复脚本包成功,则认为解压校验成功。解压后得到的解压后脚本文件就是未压缩前的热修复脚本文件。
字符获取子模块73,用于获取解压后脚本文件中前预设数量的字符。
具体的,热修复脚本文件中包含了服务器根据客户端反馈的用户信息加密得到的字符串,定义将这些字符串作为前预设数量的字符放在热修复脚本文件中。客户端在解压得到解压后脚本文件后,提取前预设数量的字符供后续的文件内容校验,进一步提高热修复脚本文件的安全性。可选地,预设数量为50。
字符校验子模块74,用于当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为热修复脚本包被校验成功,解压后脚本文件则为热修复脚本文件。
具体的,客户端采用和服务器相同的加密方式对用户信息进行加密后得到字符串与获取的前预设数量的字符进行比较,若相同,则认为文件内容校验成功,将解压后脚本文件作为热修复脚本文件存储到预设目录下,供后续加载。
例如,若用户信息包括:用户的设备号和APP版本号,则将两者结合并加密后得到字符串。
需要注意的是,上述的三个校验是顺序校验,只有三个校验都成功,才认为热修复脚本包被校验成功;若其中一个校验出现问题,就认为热修复脚本包校验不成功。
另外,当MD5数字签名校验不成功,或,解压不成功,或,用户信息经过加密后得到的字符串与获取的前预设数量的字符不相同时,反馈校验不成功信息。
具体的,任意一个校验不成功,都认为热修复脚本包校验不成功,需要向服务器反馈校验不成功信息。
可选地,校验不成功信息中包含了校验不成功的具体信息,例如:若MD5数字签名校验时不成功,则反馈检验不成功信息中包含MD5数字签名校验不成功的信息。
存储模块80,与校验模块70电连接,用于将热修复脚本文件存储到内存中的预设目录下。
加载模块10,与存储模块80电连接,用于加载内存中预设目录下的热修复脚本文件。
解析模块20,与加载模块10电连接,用于使用预设解析器对热修复脚本文件解析,得到至少一个热修复代码块和每个热修复代码块对应的类和函数。
优选地,预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
替换模块30,与解析模块20电连接,用于根据每个热修复代码块对应的类和函数,用热修复代码块替换类和函数对应的原始代码块。
热修复模块40,与替换模块30电连接,用于当接收到热修复指令时,执行热修复指令对应的热修复代码块进行热修复。
具体的,与上述设备实施例相同部分的解释在此不作赘述,请参见上述实施例。
本发明的热修复脚本包使用多重加密方式,多方面对热修复脚本包的安全性进行控制;且使用的热修复脚本文件仅支持预设解析器进行解析,绕开iOS的审核;只在执行到的时候执行热修复,实现了用户使用过程中进行修复,与传统一次性全部完成修复相比,丰富了更新机制。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种热修复方法,其特征在于,包括:
加载内存中预设目录下的热修复脚本文件;
使用预设解析器对所述热修复脚本文件解析,得到至少一个热修复代码块和每个所述热修复代码块对应的类和函数;
根据每个所述热修复代码块对应的所述类和函数,用所述热修复代码块替换寄存器中所述类和函数对应的原始代码块;
当接收到热修复指令时,执行所述热修复指令对应的热修复代码块进行热修复。
2.如权利要求1所述的热修复方法,其特征在于,所述预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
3.如权利要求1或2所述的热修复方法,其特征在于,所述加载内存中预设目录下的热修复脚本文件之前还包括:
当符合预设触发条件时,向服务器发送脚本更新请求;
当接收到所述服务器根据所述脚本更新请求发送的下载地址时,根据所述下载地址下载对应的热修复脚本包;
当所述热修复脚本包被校验成功时,得到热修复脚本文件;
将所述热修复脚本文件存储到内存中的预设目录下。
4.如权利要求3所述的热修复方法,其特征在于,所述预设触发条件包括以下任意一种或多种:
应用程序启动;
应用程度处于后台运行;
在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
5.如权利要求3所述的热修复方法,其特征在于,所述当热修复脚本包被校验成功时,得到热修复脚本文件具体为:
对所述热修复脚本包进行MD5数字签名校验;
若所述MD5数字签名校验成功,则解压所述热修复脚本包;
若解压成功,得到解压后脚本文件;
获取所述解压后脚本文件中前预设数量的字符;
当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为所述热修复脚本包被校验成功,所述解压后脚本文件则为所述热修复脚本文件。
6.一种热修复设备,其特征在于,包括:
加载模块,用于加载内存中预设目录下的热修复脚本文件;
解析模块,用于使用预设解析器对所述热修复脚本文件解析,得到至少一个热修复代码块和每个所述热修复代码块对应的类和函数;
替换模块,用于根据每个所述热修复代码块对应的所述类和函数,用所述热修复代码块替换所述类和函数对应的原始代码块;
热修复模块,用于当接收到热修复指令时,执行所述热修复指令对应的热修复代码块进行热修复。
7.如权利要求6所述的热修复设备,其特征在于,所述预设解析器为使用Unix***自带的Yacc和Lex工具编写的语法词法解析器。
8.如权利要求6或7所述的热修复设备,其特征在于,还包括:
发送模块,用于当符合预设触发条件时,向服务器发送脚本更新请求;
下载模块,用于当接收到所述服务器根据所述脚本更新请求发送的下载地址时,根据所述下载地址下载对应的热修复脚本包;
校验模块,用于当所述热修复脚本包被校验成功时,得到热修复脚本文件;
存储模块,用于将所述热修复脚本文件存储到内存中的预设目录下。
9.如权利要求8所述的热修复设备,其特征在于,所述预设触发条件包括以下任意一种或多种:
应用程序启动;
应用程度处于后台运行;
在使用过程中调用HTTP接口,且HTTP接口的返回值等于预设值。
10.如权利要求8所述的热修复设备,其特征在于,所述校验模块,用于当所述热修复脚本包被校验成功时,得到热修复脚本文件具体为:
MD5校验子模块,用于对所述热修复脚本包进行MD5数字签名校验;
解压子模块,用于若所述MD5数字签名校验成功,则解压所述热修复脚本包;以及,若解压成功,得到解压后脚本文件;
字符获取子模块,用于获取所述解压后脚本文件中前预设数量的字符;
字符校验子模块,用于当用户信息经过加密后得到的字符串与获取的前预设数量的字符相同时,认为所述热修复脚本包被校验成功,所述解压后脚本文件则为所述热修复脚本文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810805581.4A CN109101254A (zh) | 2018-07-20 | 2018-07-20 | 一种热修复方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810805581.4A CN109101254A (zh) | 2018-07-20 | 2018-07-20 | 一种热修复方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109101254A true CN109101254A (zh) | 2018-12-28 |
Family
ID=64847104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810805581.4A Pending CN109101254A (zh) | 2018-07-20 | 2018-07-20 | 一种热修复方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109101254A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918113A (zh) * | 2019-01-17 | 2019-06-21 | 平安城市建设科技(深圳)有限公司 | Ios应用热修复/热更新方法、服务器及存储介质 |
CN110362330A (zh) * | 2019-07-18 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 应用程序更新方法、装置、终端及存储介质 |
CN110457151A (zh) * | 2019-07-10 | 2019-11-15 | 五八有限公司 | 热修复方法、装置及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN104035859A (zh) * | 2013-03-07 | 2014-09-10 | 腾讯科技(深圳)有限公司 | 一种可视化自动测试方法及其*** |
CN107239265A (zh) * | 2016-03-28 | 2017-10-10 | 阿里巴巴集团控股有限公司 | Java函数与C函数的绑定方法及装置 |
CN107943493A (zh) * | 2016-10-12 | 2018-04-20 | 北京京东尚科信息技术有限公司 | 一种基于iOS***静默修复已上线App中问题的方法和装置 |
-
2018
- 2018-07-20 CN CN201810805581.4A patent/CN109101254A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN104035859A (zh) * | 2013-03-07 | 2014-09-10 | 腾讯科技(深圳)有限公司 | 一种可视化自动测试方法及其*** |
CN107239265A (zh) * | 2016-03-28 | 2017-10-10 | 阿里巴巴集团控股有限公司 | Java函数与C函数的绑定方法及装置 |
CN107943493A (zh) * | 2016-10-12 | 2018-04-20 | 北京京东尚科信息技术有限公司 | 一种基于iOS***静默修复已上线App中问题的方法和装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918113A (zh) * | 2019-01-17 | 2019-06-21 | 平安城市建设科技(深圳)有限公司 | Ios应用热修复/热更新方法、服务器及存储介质 |
CN110457151A (zh) * | 2019-07-10 | 2019-11-15 | 五八有限公司 | 热修复方法、装置及可读存储介质 |
CN110457151B (zh) * | 2019-07-10 | 2022-01-28 | 五八有限公司 | 热修复方法、装置及可读存储介质 |
CN110362330A (zh) * | 2019-07-18 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 应用程序更新方法、装置、终端及存储介质 |
CN110362330B (zh) * | 2019-07-18 | 2023-09-01 | 腾讯科技(深圳)有限公司 | 应用程序更新方法、装置、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106131612B (zh) | 安卓app动态加载资源功能模块的方法及*** | |
CN109101254A (zh) | 一种热修复方法及设备 | |
CN104637185A (zh) | 一种智能储物柜的离线开箱方法 | |
US20220224546A1 (en) | Software integrity protection method and apparatus, and software integrity verification method and apparatus | |
CN105117651B (zh) | 一种控制单板安全启动的方法、软件包升级的方法及装置 | |
GB2582673A (en) | Security data processing device | |
CN105554091A (zh) | 一种移动终端中web应用来源安全的保障方法 | |
CN102750491A (zh) | 一种限制终端安装或升级第三方应用程序的方法及*** | |
CN106056017B (zh) | 智能卡cos加密下载*** | |
CN104516755A (zh) | 安装包生成方法和装置 | |
CN107196761B (zh) | 一种保护应用程序中的核心函数的方法 | |
US20230273782A1 (en) | Information processing method, device, apparatus and system, medium, andprogram | |
US20220083663A1 (en) | Integrity preservation for master server that updates other systems | |
CN109672553A (zh) | 网关动态配置方法、***、计算机设备及存储介质 | |
CN112632573B (zh) | 智能合约执行方法、装置、***、存储介质及电子设备 | |
CN107396188A (zh) | 一种机顶盒的升级方法及*** | |
CN112860791A (zh) | 一种跨网数据同步控制***、方法及存储介质 | |
Cairns et al. | Security analysis of the W3C web cryptography API | |
CN108322540A (zh) | 客制化数据导入方法、终端及计算机可读存储介质 | |
CN109918113A (zh) | Ios应用热修复/热更新方法、服务器及存储介质 | |
CN110231950A (zh) | 一种bios的升级方法、***及相关装置 | |
US8838955B2 (en) | Two-way, secure, data communication within critical infrastructures | |
US11227032B1 (en) | Dynamic posture assessment to mitigate reverse engineering | |
US11146961B2 (en) | Third party certificate management for native mobile apps and internet of things apps | |
CN109446785B (zh) | 一种智能卡及其个人化数据的存储管理方法 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181228 |