CN105279429A - 一种got表写保护的保护方法 - Google Patents
一种got表写保护的保护方法 Download PDFInfo
- Publication number
- CN105279429A CN105279429A CN201510826917.1A CN201510826917A CN105279429A CN 105279429 A CN105279429 A CN 105279429A CN 201510826917 A CN201510826917 A CN 201510826917A CN 105279429 A CN105279429 A CN 105279429A
- Authority
- CN
- China
- Prior art keywords
- write
- read
- functional dependence
- attribute
- function
- 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
Classifications
-
- 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
Abstract
本发明提供了一种GOT表写保护的保护方法,包括:并且将初始化后的GOT表的读写操作属性设置为只读;在第一次调用GOT表中包含的函数相关表格项所对应的函数时,进行地址解析,以得到入口地址;先将GOT表的读写操作属性设置为读写,然后将解析后得到的所述入口地址写入所述函数相关表格项中;在将解析后得到的所述入口地址写入所述函数相关表格项中之后,将所述GOT表的读写操作属性再次设置为只读。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种GOT(GlobalOffsetTable,全局偏移表)写保护的保护方法。
背景技术
GOT作为程序动态链接重定位的一个重要表项,它直接关系着程序控制流的流向。在ELF(ExecutableandLinkableFormat,可执行与可链接格式)文件的进程空间中GOT表存放着所有全局变量指针的全局偏移表,其能够把位置无关的地址定位到绝对地址。GOT表对全局变量的引用和重定位起着举足轻重的作用。GOT表在链接全过程中是可写的。如果GOT表内容被篡改,则函数和变量的引用也将跳转到未知的地址上去。GOT表作为一个指针数组,针对该指针的保护目前主要有的方法是数据随机化加密、GOT表备份等。
然而现有的GOT保护技术有如下缺陷:一方面数据随机化加密方法并不能阻止缓冲区溢出的发生,不能从根源上解决溢出覆盖GOT表的问题。且对指针和数组的随机化设计很可能导致变量混淆的问题,且其对程序的时间性能损失基本在10%以上;另一方面GOT表备份的工作可以很大程度上保证GOT表的内容不被篡改,在安全性上有了很大的提升。但是该方法对程序的性能损失太大,每次函数调用都要做备份值与GOT表中的值的比较操作,对于一些同时要求安全和性能的程序,无法满足要求。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种便捷高效的GOT保护方案,保证程序执行控制流的正确性。
根据本发明,提供了一种GOT表写保护的保护方法,包括:建立GOT表,并且将建立的GOT表的读写操作属性设置为只读;在第一次调用GOT表中包含的函数相关表格项所对应的函数时,进行地址解析,以得到入口地址;先将GOT表的读写操作属性设置为读写,然后将解析后得到的所述入口地址写入所述函数相关表格项中;在将解析后得到的所述入口地址写入所述函数相关表格项中之后,将所述GOT表的读写操作属性再次设置为只读。
优选地,在建立GOT表时,所述GOT表中的函数相关表格项中未填入有效的入口地址。
优选地,GOT表中包含多个函数相关表格项。
优选地,所述GOT表的读写操作属性不会由于GOT表中包含的函数相关表格项所对应的函数的再次调用而发生变化。
优选地,所述GOT表的读写操作属性不会由于GOT表中包含的函数相关表格项所对应的函数的再次调用而从只读变为读写。
本发明可以保证恶意程序不能对GOT表做篡改工作,而当有恶意篡改GOT表时,其可能会警告或者退出程序,从而在一定程度上起到了监控程序的作用,对程序的控制流保护起到了防范作用。对于性能损失方面,假如一个GOT表中总共包含N个函数对应的项,则对于每个项其只需要做一次GOT表属性由“不可写->可写->不可写”的变更操作。所以总共只需要做N次这样的操作即可,不会带来太多的性能损失。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了根据本发明优选实施例的GOT表写保护的保护方法的流程图。
图2示意性地示出了根据本发明优选实施例的GOT表写保护的保护方法采用的GOT表写保护设计方案。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
根据现有技术,每个函数对应的GOT表在整个函数调用过程中只需要修改一次即可。分析得到每个函数对应的GOT项,在程序执行过程中最多可能会被修改一次,且这个修改点是在函数第一次调用时候发生的。除了该修改外,在其他地方修改GOT表的项,必然是一些非法的修改行为。
分析GOT表的特性,本发明提出控制GOT表读写属性的方法将原来的GOT默认的可写属性修改为不可写,在做地址解析后需要回填GOT内容的时候再将其设计为可写,回填完成后再将其修改为不可写,如图2所示。
下面将结合附图来具体描述本发明的实施例。
图1示意性地示出了根据本发明优选实施例的GOT表写保护的保护方法的流程图。
如图1所示,根据本发明优选实施例的GOT表写保护的保护方法包括:
第一步骤S1:建立GOT表,并且将建立的GOT表的读写操作属性设置为只读(Read-Only);在建立GOT表时,所述GOT表中的与函数相关的表格项(函数相关表格项)中未填入真正的有效的入口地址;
第二步骤S2:在第一次调用GOT表中包含的某个函数相关表格项所对应的函数时,进行地址解析,以得到入口地址;此时,需要将解析后得到的入口地址写入所述函数相关表格项;由此可以执行下述第三步骤S3。
第三步骤S3:先将GOT表的读写操作属性设置为读写(Read/Write),然后将解析后得到的所述入口地址写入所述函数相关表格项中;
第四步骤S4:在将解析后得到的所述入口地址写入所述函数相关表格项中之后,将所述GOT表的读写操作属性再次设置为只读(Read-Only)。
优选地,可以进行这样的设置,所述GOT表的读写操作属性不会由于GOT表中包含的某个函数相关表格项所对应的函数的再次调用而发生变化(具体地说,从只读变为读写)。
具体分析来说,程序在加载初始化时并没有将程序的真正入口地址写入GOT对应项中,而是在第一次调用的时候才将解析后得到的地址写入GOT对应的项。一旦解析完毕,当再次调用该函数时,其可以直接给出真正的地址,而不需要再去做解析工作,自然也不会再去回填和修改该函数在GOT中对应的项的内容了。所以对于每个被调用执行的函数,其GOT表在函数执行过程中会被修改一次,这个修改点就是在函数第一次被调用做地址解析结束时候。
目前的GOT表全程可读写的属性,考虑对其读写权限做一定的限制。如果将GOT表全过程改成默认不可写的,势必会导致错误。因为这样会导致函数在解析完成后写回GOT表被拒绝从而发生异常。故将GOT表改写为完全不可写是不可取的,还需要在合法写回GOT表时将其置为可写的。GOT表写回是在第一次调用地址解析完毕后,在写完之后将其在此设置为不可写属性。在地址写回时允许其对GOT做操作,当写回完毕时则再设置为不可写即可。
本发明提出了通过控制GOT表读写属性来保护GOT内容。而且本发明在链接过程中对GOT表的读写属性做了变换,在开始某一个时间点将GOT设置为不可写,在GOT表需要写回的时候,将其再设置为可写并写回后再次设置为不可写。
本发明可以保证恶意程序不能对GOT表做篡改工作,而当有恶意篡改GOT表时,其可能会警告或者退出程序,从而在一定程度上起到了监控程序的作用,对程序的控制流保护起到了防范作用。对于性能损失方面,假如一个GOT表中总共包含N个函数对应的项,则对于每个项其只需要做一次GOT表属性由“不可写->可写->不可写”的变更操作。所以总共只需要做N次这样的操作即可,不会带来太多的性能损失。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (5)
1.一种GOT表写保护的保护方法,其特征在于包括:
建立GOT表,并且将建立的GOT表的读写操作属性设置为只读;
在第一次调用GOT表中包含的函数相关表格项所对应的函数时,进行地址解析,以得到入口地址;
先将GOT表的读写操作属性设置为读写,然后将解析后得到的所述入口地址写入所述函数相关表格项中;
在将解析后得到的所述入口地址写入所述函数相关表格项中之后,将所述GOT表的读写操作属性再次设置为只读。
2.根据权利要求1所述的GOT表写保护的保护方法,其特征在于,在建立GOT表时,所述GOT表中的函数相关表格项中未填入有效的入口地址。
3.根据权利要求1或2所述的GOT表写保护的保护方法,其特征在于,GOT表中包含多个函数相关表格项。
4.根据权利要求1或2所述的GOT表写保护的保护方法,其特征在于,所述GOT表的读写操作属性不会由于GOT表中包含的函数相关表格项所对应的函数的再次调用而发生变化。
5.根据权利要求1或2所述的GOT表写保护的保护方法,其特征在于,所述GOT表的读写操作属性不会由于GOT表中包含的函数相关表格项所对应的函数的再次调用而从只读变为读写。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510826917.1A CN105279429B (zh) | 2015-11-24 | 2015-11-24 | 一种got表写保护的保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510826917.1A CN105279429B (zh) | 2015-11-24 | 2015-11-24 | 一种got表写保护的保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105279429A true CN105279429A (zh) | 2016-01-27 |
CN105279429B CN105279429B (zh) | 2018-01-19 |
Family
ID=55148426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510826917.1A Active CN105279429B (zh) | 2015-11-24 | 2015-11-24 | 一种got表写保护的保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105279429B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502650A (zh) * | 2016-09-28 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种只读属性修改方法、装置 |
WO2022097020A1 (en) * | 2020-11-05 | 2022-05-12 | International Business Machines Corporation | Updated shared library reloading without stopping execution of an application |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101286191A (zh) * | 2008-05-21 | 2008-10-15 | 华为技术有限公司 | 一种缓冲区溢出攻击的防护方法、装置及系统 |
US20130061058A1 (en) * | 2011-09-06 | 2013-03-07 | International Business Machines Corporation | Protecting application programs from malicious software or malware |
CN104766015A (zh) * | 2015-04-10 | 2015-07-08 | 北京理工大学 | 一种基于函数调用的缓冲区溢出漏洞动态检测方法 |
-
2015
- 2015-11-24 CN CN201510826917.1A patent/CN105279429B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101286191A (zh) * | 2008-05-21 | 2008-10-15 | 华为技术有限公司 | 一种缓冲区溢出攻击的防护方法、装置及系统 |
US20130061058A1 (en) * | 2011-09-06 | 2013-03-07 | International Business Machines Corporation | Protecting application programs from malicious software or malware |
CN104766015A (zh) * | 2015-04-10 | 2015-07-08 | 北京理工大学 | 一种基于函数调用的缓冲区溢出漏洞动态检测方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502650A (zh) * | 2016-09-28 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种只读属性修改方法、装置 |
WO2022097020A1 (en) * | 2020-11-05 | 2022-05-12 | International Business Machines Corporation | Updated shared library reloading without stopping execution of an application |
US11347523B2 (en) | 2020-11-05 | 2022-05-31 | International Business Machines Corporation | Updated shared library reloading without stopping the execution of an application |
GB2614864A (en) * | 2020-11-05 | 2023-07-19 | Ibm | Updated shared library reloading without stopping execution of application |
Also Published As
Publication number | Publication date |
---|---|
CN105279429B (zh) | 2018-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7293213B1 (en) | Method for detecting software errors and vulnerabilities | |
CN108537012B (zh) | 基于变量和代码执行顺序的源代码混淆方法及装置 | |
CN104408366A (zh) | 基于插装技术的安卓应用程序权限使用行为跟踪方法 | |
US20150067279A1 (en) | Data processing system and method for operating a data processing system | |
JP2008276763A (ja) | メモリエラーの検出法 | |
CN103488482A (zh) | 一种生成测试用例的方法和装置 | |
CN102422299A (zh) | 信息设备、程序、防止执行不正当程序代码的方法、及计算机能够读取的记录介质 | |
CN104866734A (zh) | 一种dex文件的保护方法及装置 | |
CN107704436A (zh) | 数据抽样方法、终端、设备以及计算机可读存储介质 | |
CN105653906A (zh) | 基于地址随机的反内核挂钩方法 | |
Kowalczyk et al. | Configurations in Android testing: they matter | |
CN103617120A (zh) | 一种单元测试方法和装置 | |
CN114372006A (zh) | 测试用例自动生成方法、系统、计算机设备和存储介质 | |
US10572369B2 (en) | Method for testing a control program of a control device in a simulation environment on a computer | |
JP2017174418A (ja) | モデルチェックのためのデータ構造抽象化 | |
CN103198244B (zh) | 保护动态链接库的方法 | |
CN106155832A (zh) | 一种数据恢复的方法、装置及Android设备 | |
US20090249021A1 (en) | Method And Systems For Invoking An Advice Operation Associated With A Joinpoint | |
CN105279429A (zh) | 一种got表写保护的保护方法 | |
US9047403B2 (en) | Debugger with previous version feature | |
CN103164335A (zh) | 检查单元测试质量的方法和系统 | |
US9171168B2 (en) | Determine anomalies in web application code based on authorization checks | |
Lin et al. | A study and toolkit of CHECK‐THEN‐ACT idioms of Java concurrent collections | |
CN109409037B (zh) | 一种数据混淆规则的生成方法、装置及设备 | |
CN101650688B (zh) | 一种访问vm_io地址空间的方法和用户态调试器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |