CN107943544B - 一种内核补丁的加载方法及装置 - Google Patents
一种内核补丁的加载方法及装置 Download PDFInfo
- Publication number
- CN107943544B CN107943544B CN201711309499.4A CN201711309499A CN107943544B CN 107943544 B CN107943544 B CN 107943544B CN 201711309499 A CN201711309499 A CN 201711309499A CN 107943544 B CN107943544 B CN 107943544B
- Authority
- CN
- China
- Prior art keywords
- kernel
- function
- code
- storage space
- space
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种内核补丁的加载方法及装置,用以实现内核补丁的动态加载和及时修补,进而保障用户的信息安全。该方法包括:获得占位函数,并将所述占位函数写入内核内存区,以占据所述内核内存区中预设大小的存储空间;获得内核补丁代码;将所述内核补丁代码写入所述存储空间中。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种内核补丁的加载方法及装置。
背景技术
传统的内核补丁修补方式一般为卸载有问题的内核模块或驱动模块,并动态加载已修补的内核模块或驱动模块,这种方式需要依赖于可加载内核模块(LKM,LoadableKernel Modules)的开启且LKM申请内存区还有足够的可用内存。
在实际应用中,基于安全考虑,终端厂商都会关闭Android手机的LKM功能。而观察发现Android每次爆出的内核漏洞,下游部件厂商的驱动相关漏洞占比很高,有时候占一半以上,通常下游厂商只能依赖于终端厂商的空中下载技术(OTA,Over-the-AirTechnology)进行升级,而OTA升级一般周期较长,对于一些高危的驱动级漏洞,如果每次都依赖OTA升级后修补,显然会很被动。黑客利用这段时间,可能已经攻破了用户终端,在终端中植入了木马或恶意程序,造成用户财产或信息的泄漏,无法保障用户的信息安全。
发明内容
鉴于上述问题,本发明提供发明以便提供一种内核补丁的加载方法及装置,以实现内核补丁的动态加载和及时修补,进而保障用户的信息安全。
第一方面,本发明实施例提供一种内核补丁的加载方法,包括:获得占位函数,并将所述占位函数写入内核内存区,以占据所述内核内存区中预设大小的存储空间;获得内核补丁代码;将所述内核补丁代码写入所述存储空间中。
第二方面,本发明实施例提供一种内核补丁的加载装置,包括:获得单元,用于获得占位函数;写入单元,用于将所述占位函数写入内核内存区,以占据所述内核内存区中预设大小的存储空间;所述获得单元,还用于获得内核补丁代码;所述写入单元,还用于将所述内核补丁代码写入所述存储空间中。
第三方面,本发明实施例一种终端,包括:存储器和处理器,其中,存储其中存储有一个或者多个程序指令,所述处理器执行所述程序指令以实现上述一个或多个技术方案所述的方法步骤。
第四方面,本发明实施例一种计算机可读存储介质,所述可读存储介质上存储有程序,其特征在于,所述程序被处理器执行时实现上述一个或多个技术方案所述的方法步骤。
本发明提供的内核补丁的加载方法及装置中,首先,获得占位函数,并将占位函数写入内核内存区,以占据内核内存区中预设大小的存储空间;获得内核补丁代码;将内核补丁代码写入存储空间中,如此,通过在内核中预埋占位函数,预先抢占部分内核空间,后期可以将内核补丁代码写入预占的内核空间中,从而实现内核补丁的动态加载和及时修补,保障用户的信息安全。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作以简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中的内核补丁的加载方法的流程示意图;
图2为本发明实施例中的内核补丁的加载装置的结构示意图;
图3为本发明实施例中的终端的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种内核补丁的加载方法,该方法应用于安装有Linux系统或基于Linux的其它系统,如Android系统的终端。
参见图1所示,该内核补丁的加载方法包括以下步骤:
S101:获得占位函数,并将占位函数写入内核内存区,以占据内核内存区中预设大小的存储空间;
S102:获得内核补丁代码;
S103:将内核补丁代码写入存储空间中。
其中,在S101中,系统自身生成占位函数,或者调用预先存储的占位函数。这里,占位函数可以为空实现的函数,且不能被编译器优化的空操作(nop)指定代码。
例如,占位函数可以为:
当然,占位函数还可以为其他很普通的函数,只要能够占据较大的空间即可。
然后,系统在获得占位函数之后,就将其写入内核存储区中,以在内核空间中占据预设大小的存储空间。
在实际应用中,占位函数并不是被写入内核内存区的任意空间,而是根据待修补代码所在的内核内存区来确定的。那么,S101可以包括:在靠近待修补代码所在内核内存区的区域内,确定出预设大小的存储空间;将占位函数写入存储空间。
需要说明的是,我们知道32位ARM指令的跳转范围在±32M空间之内,因此,对于内核补丁代码来说,必须在所修补代码的±32M空间之内,否则,对于一些跳转指令就需要改为长跳转,而编译器编译生成的二进制代码都是短跳转指令,如果改为长跳转指令,就需要在代码中预留空指令进行占位,修改起来繁琐且容易出错。而且,传统的内核kmalloc或vmalloc所申请的空间一般不能保证在待修补代码的±32M空间内,因此,可以在靠近待修补代码所在的内核内存区预留少部分内存作为未来代码存放空间,通常可以预留4K或8K空间,也就是说,在靠近待修补代码所在内核内存区的区域内,确定出4K或者8K的存储空间。然后,将占位函数写入该存储空间。
假设,待修补代码所在的内核内存区为E0008000~E0009000,那么,在这个地址段附近确定出4K的存储空间,此时,该存储空间的地址范围可以为E0007000~E0008000。
接下来执行S102,在占位函数占据预设大小的存储空间之后,如果后期有获得内核补丁代码,则可以将该内核补丁代码写入靠近其对应的待修补代码的存储空间。
在本发明其他实施例中,对于内核补丁代码的加载可以选择在中端每次开机启动时进行。那么,S102可以包括:当终端开机启动时,从指定文件中获取所述内核的补丁代码。
接下来执行S103,将内核补丁代码写入确定好的存储空间中。
在具体实施过程中,由于内核中代码段通常都是只读状态,不可写入,那么,如果占位空间在只读区域,为了写入内核补丁代码,就必须临时修改此只读区域为可写,Linux系统以前是有提供相关的接口函数,但是出于安全考虑,在最新的内核中已经删除了相关接口。对此,可以预先自定义封装内存属性修改函数,那么,S103可以为:调用内存属性修改函数,将存储空间的属性由只读修改为可写;将内核补丁代码写入存储空间。如此,实现了内核补丁代码的及时加载,去除了对LKM的依赖和内存的可用性依赖。
在实际应用中,通常来说,内核补丁代码存在于某个函数中,只需要hooking这个函数就可以实现漏洞修补,对于inline或static函数,如果找不到hook点,就需要找其调用函数的地址进行hook,通过这种方式总是能找到hook点。
本发明提供的内核补丁的加载方法中,首先,获得占位函数,并将占位函数写入内核内存区,以占据内核内存区中预设大小的存储空间;获得内核补丁代码;将内核补丁代码写入存储空间中,如此,通过在内核中预埋占位函数,预先抢占部分内核空间,后期可以将内核补丁代码写入预占的内核空间中,从而实现内核补丁的动态加载和及时修补,保障用户的信息安全。
基于同一发明构思,本发明实施例提供一种内核补丁的加载装置,如图2所示,该加载装置200,包括:获得单元201,用于获得占位函数;写入单元202,用于将占位函数写入内核内存区,以占据内核内存区中预设大小的存储空间;获得单元201,还用于获得内核补丁代码;写入单元202,还用于将内核补丁代码写入存储空间中。
在本发明其他实施例中,写入单元,用于在靠近待修补代码所在内核内存区的区域内,确定出预设大小的存储空间;将占位函数写入存储空间;相应地,获得单元,用于获取待修补代码对应的内核补丁代码。
在本发明其他实施例中,存储空间的大小为4K或者8K。
在本发明其他实施例中,占位函数为空实现的函数,且不能被编译器优化的空操作指定代码。
在本发明其他实施例中,写入单元,具体用于将调用内存属性修改函数,将存储空间的属性由只读修改为可写;将内核补丁代码写入存储空间。
在本发明其他实施例中,获得单元,具体用于当终端开机启动时,从指定文件中获取内核的补丁代码。
这里需要指出的是,以上加载装置实施例的描述,与上述加载方法实施例的描述是类似的,具有同加载方法实施例相似的有益效果。对于本发明加载装置实施例中未披露的技术细节,请参照本发明加载方法实施例的描述而理解。
基于同一发明构思,本发明实施例提供一种终端,如图3所示,该终端300包括:存储器301和处理器302,其中,存储器301中存储有一个或者多个程序指令303,处理器302执行程序指令303以实现上述一个或者多个实施例所述的内核补丁的加载方法的步骤。
基于同一发明构思,本发明实施例提供一种计算机可读存储介质,可读存储介质上存储有程序,程序被处理器执行时实现上述一个或者多个实施例所述的内核补丁的加载方法的步骤。
本发明一个或多个实施例,至少具有以下有益效果:
由于在本发明实施例中,首先,获得占位函数,并将占位函数写入内核内存区,以占据内核内存区中预设大小的存储空间;获得内核补丁代码;将内核补丁代码写入存储空间中,如此,通过在内核中预埋占位函数,预先抢占部分内核空间,后期可以将内核补丁代码写入预占的内核空间中,从而实现内核补丁的动态加载和及时修补,保障用户的信息安全。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种内核补丁的加载方法,其特征在于,包括:
获得占位函数,并将所述占位函数写入内核内存区,以占据所述内核内存区中预设大小的存储空间,所述占位函数为空实现的函数,且不能被编译器优化的空操作指定代码;
获得内核补丁代码;
将所述内核补丁代码写入所述存储空间中;
其中,所述将所述占位函数写入内核内存区,包括:在靠近待修补代码所在内核内存区的区域内,确定出预设大小的存储空间;将所述占位函数写入所述存储空间,所述存储空间的大小为4K或者8K;
相应地,所述获得内核补丁代码,包括:获取所述待修补代码对应的内核补丁代码。
2.根据权利要求1所述的方法,其特征在于,所述将所述内核补丁代码写入所述存储空间中,包括:
调用内存属性修改函数,将所述存储空间的属性由只读修改为可写;
将所述内核补丁代码写入所述存储空间。
3.根据权利要求1所述的方法,其特征在于,所述获得内核的补丁代码,包括:
当终端开机启动时,从指定文件中获取所述内核的补丁代码。
4.一种内核补丁的加载装置,其特征在于,包括:
获得单元,用于获得占位函数,所述占位函数为空实现的函数,且不能被编译器优化的空操作指定代码;
写入单元,用于将所述占位函数写入内核内存区,以占据所述内核内存区中预设大小的存储空间;
所述获得单元,还用于获得内核补丁代码;
所述写入单元,还用于将所述内核补丁代码写入所述存储空间中所述写入单元,用于在靠近待修补代码所在内核内存区的区域内,确定出预设大小的存储空间;将所述占位函数写入所述存储空间,所述存储空间的大小为4K或者8K;
相应地,所述获得单元,用于获取所述待修补代码对应的内核补丁代码。
5.一种终端,其特征在于,包括:存储器和处理器,其中,存储其中存储有一个或者多个程序指令,所述处理器执行所述程序指令以实现如权利要求1至3任一项所述的方法步骤。
6.一种计算机可读存储介质,所述可读存储介质上存储有程序,其特征在于,所述程序被处理器执行时实现如权利要求1至3任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711309499.4A CN107943544B (zh) | 2017-12-11 | 2017-12-11 | 一种内核补丁的加载方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711309499.4A CN107943544B (zh) | 2017-12-11 | 2017-12-11 | 一种内核补丁的加载方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107943544A CN107943544A (zh) | 2018-04-20 |
CN107943544B true CN107943544B (zh) | 2021-10-08 |
Family
ID=61946502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711309499.4A Active CN107943544B (zh) | 2017-12-11 | 2017-12-11 | 一种内核补丁的加载方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943544B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111913742B (zh) * | 2018-07-03 | 2022-11-11 | 武汉斗鱼网络科技有限公司 | 一种程序处理方法及相关设备 |
CN111930412A (zh) * | 2019-05-13 | 2020-11-13 | 阿里巴巴集团控股有限公司 | 差分文件生成及固件在线升级的方法和装置 |
CN111506338B (zh) * | 2020-03-03 | 2023-08-11 | 深圳震有科技股份有限公司 | 一种函数级热补丁方法、装置、智能终端及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156661A (zh) * | 2010-02-11 | 2011-08-17 | 华为技术有限公司 | 在线补丁的激活方法、装置及系统 |
US9021511B1 (en) * | 2014-03-14 | 2015-04-28 | International Business Machines Corporation | Runtime management of TOC pointer save and restore commands |
US9489286B2 (en) * | 2013-01-30 | 2016-11-08 | Nec Corporation | Method and system for computer assisted hot-tracing mechanism |
CN106708516A (zh) * | 2016-12-09 | 2017-05-24 | 北京奇虎科技有限公司 | 一种实现so文件调用外部函数的方法和装置 |
CN107437029A (zh) * | 2017-08-23 | 2017-12-05 | 北京奇虎科技有限公司 | 漏洞修复方法、漏洞修复装置及服务器 |
-
2017
- 2017-12-11 CN CN201711309499.4A patent/CN107943544B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156661A (zh) * | 2010-02-11 | 2011-08-17 | 华为技术有限公司 | 在线补丁的激活方法、装置及系统 |
US9489286B2 (en) * | 2013-01-30 | 2016-11-08 | Nec Corporation | Method and system for computer assisted hot-tracing mechanism |
US9021511B1 (en) * | 2014-03-14 | 2015-04-28 | International Business Machines Corporation | Runtime management of TOC pointer save and restore commands |
CN106708516A (zh) * | 2016-12-09 | 2017-05-24 | 北京奇虎科技有限公司 | 一种实现so文件调用外部函数的方法和装置 |
CN107437029A (zh) * | 2017-08-23 | 2017-12-05 | 北京奇虎科技有限公司 | 漏洞修复方法、漏洞修复装置及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN107943544A (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8874892B1 (en) | Assessing BIOS information prior to reversion | |
US11222118B2 (en) | Method for updating selinux security policy and terminal | |
CN109062617B (zh) | 一种支持多类型设备的平台的应用方法、移动终端 | |
US8560822B1 (en) | Pre-boot operating environment | |
US20170123783A1 (en) | Method for displaying plug-in view elements in host application page and electronic device | |
CN107943544B (zh) | 一种内核补丁的加载方法及装置 | |
US20060064576A1 (en) | Boot systems and methods | |
US20080209193A1 (en) | Manageability Extension Mechanism for System Firmware | |
CN105138382A (zh) | 一种Android系统升级的方法及终端 | |
US20060190933A1 (en) | Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework | |
WO2016119548A1 (zh) | 防软件反编译的方法、防反编译软件启动的方法和装置 | |
CN110554998B (zh) | 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质 | |
US9110678B1 (en) | Automated BIOS enhancements and upgrades | |
CN109857432B (zh) | 一种游戏应用的热更新方法和装置 | |
CN107567629A (zh) | 在可信执行环境容器中的动态固件模块加载器 | |
CN112130926B (zh) | 应用程序运行的方法、装置、终端设备及存储介质 | |
WO2022017242A1 (zh) | 在第一系统运行第二系统应用的方法、装置、设备及介质 | |
CN110515671B (zh) | 初始化方法、初始化装置、终端设备及可读存储介质 | |
CN109960511B (zh) | 基于虚拟化技术的动态库下发方法、存储介质及智能终端 | |
US10262309B1 (en) | Augmenting a BIOS with new programs | |
WO2018014687A1 (zh) | 一种参数传递方法、装置及计算机存储介质 | |
CN104298618A (zh) | 一种智能终端的命令处理方法及装置 | |
CN111694580B (zh) | 存储设备升级及初始化的方法、装置、电子设备 | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
US20060136710A1 (en) | Allowing or disallowing firmware upgrade based on comparison of firmware-related bits |
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 |