CN107895115B - 防止栈溢出的方法、装置及终端设备 - Google Patents

防止栈溢出的方法、装置及终端设备 Download PDF

Info

Publication number
CN107895115B
CN107895115B CN201711262338.4A CN201711262338A CN107895115B CN 107895115 B CN107895115 B CN 107895115B CN 201711262338 A CN201711262338 A CN 201711262338A CN 107895115 B CN107895115 B CN 107895115B
Authority
CN
China
Prior art keywords
variables
variable
compiled program
compiler
type
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
CN201711262338.4A
Other languages
English (en)
Other versions
CN107895115A (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.)
Beijing Yuanxin Junsheng Technology Co ltd
Original Assignee
Yuanxin Technology
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 Yuanxin Technology filed Critical Yuanxin Technology
Priority to CN201711262338.4A priority Critical patent/CN107895115B/zh
Publication of CN107895115A publication Critical patent/CN107895115A/zh
Application granted granted Critical
Publication of CN107895115B publication Critical patent/CN107895115B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供了一种防止栈溢出的方法、装置及终端设备,其中,防止栈溢出的方法:获取被编译程序中的变量;判断获取到的变量中是否存在预设类型的变量;如果存在,执行相应的告警操作。本发明实施例提供的方法,获取被编译程序中的变量,为后续判断编译程序中的变量是否为预设类型的变量提供了前提保障;判断获取到的变量中是否存在预设类型的变量,从而有效定位程序中是否存在潜在的导致栈溢出的预设类型的变量;若存在预设类型的变量,说明存在潜在的导致栈溢出的缺陷,执行相应的告警操作,从而及时通知用户,便于用户对潜在的缺陷采取相应的补救措施,最终达到有效防止栈溢出的目的。

Description

防止栈溢出的方法、装置及终端设备
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种防止栈溢出的方法、装置及终端设备。
背景技术
计算机应用已经深入到航天、金融、制造、通信、能源、医疗、教育等各领域,人们的工作与生活越来越多地依赖计算机软件。人们不仅需要计算机实现更多的功能,对计算机系统的安全性也提出了更高的要求。虽然操作系统本身都会具备基本的安全防护能力,比如:基本的权限管理、用户管理、设备管理等,而且随着安全问题的积累,目前的安全界的防护手段也越来越完善,显而易见的攻击手段往往不会奏效,需要更深层次的挖掘和利用系统中的漏洞才能达到攻击成功的目的。在这种情况下,缓冲区溢出攻击成为严重威胁计算机系统安全的一种攻击手段,缓冲区溢出被攻击者广泛利用开展种类繁多的攻击,甚至无需插入代码即可执行任意行为,或者安装rootkit隐蔽自身踪迹。其中,栈溢出是最为常见的缓冲区溢出攻击模式,攻击者利用函数局部缓冲区,输入长度超出缓冲区长度界限的源操作数改写栈返回地址,即函数返回的跳转地址,截获程序控制流达到执行非法行为的目的。
目前,业界也提出了一些防止栈溢出的方法,例如:修改编译器、利用带有零值字节的数据填写返回地址;其中,修改编译器是指在保存返回地址时,刻意同时增加校验字节,如果返回前发现校验错误,则说明返回地址曾经被篡改,拒绝继续运行;而利用带有零值字节的数据填写返回地址,是利用输入参数是字符串且零值字节表示字符串结束的特点,把程序运行代码放在含有零值字节的地址段中(如0-0x00FFFFFF),这样一旦程序执行空间跑到了“非零区”,可以立刻得到被攻击的结论。
然而,修改编译器的方法,虽然可以在一定程度上解决问题,但是,既然可以改写返回地址,那自然也可以改写校验字节,从而检查机制可能被绕过,无法有效防止栈溢出;利用带有零值字节的数据填写返回地址的方法,则由于内存中的返回地址不连续,且每一段的大小有限,当程序尺寸太大时转载必须分块,额外增加了很多不便。于是,如何有效防止栈溢出成为本领域技术人员亟待解决的重要问题。
发明内容
本发明的目的旨在至少能解决上述的技术缺陷之一,特别是无法有效防止栈溢出的技术缺陷。
本发明的实施例根据一个方面,提供了一种防止栈溢出的方法,包括:
获取被编译程序中的变量;
判断获取到的变量中是否存在预设类型的变量;
所述预设类型包括栈上数组类型;
如果存在,执行相应的告警操作;
检测所述编译器是否为修正模式;
其中,所述获取被编译程序中的变量,包括:
通过编译器对被编译程序进行语法分析,以识别语义元素;
基于识别到的所述语义元素,获取所述被编译程序中的变量;
所述执行相应的告警操作,包括:
如果所述编译器是修正模式,则根据预设修正方式修正所述预设类型的变量,并再次编译经修正后的所述被编译程序;
所述执行相应的告警操作,还包括:生成并显示告警信息;
如果所述编译器是非修正模式,所述告警信息还包括修改建议。
优选地,在获取所述被编译程序中的变量之后,还包括:识别所述变量的类型;
其中,所述判断获取到的变量中是否存在预设类型的变量,具体包括:
判断识别到的变量的类型是否为所述预设类型。
优选的,所述告警信息包括以下至少一项:错误发生位置,错误类型,错误原因。
本发明的实施例根据另一个方面,还提供了一种防止栈溢出的装置,包括:
获取模块,用于获取被编译程序中的变量;
所述获取模块包括分析子模块与变量获取子模块;
所述分析子模块,用于通过编译器对被编译程序进行语法分析,以识别语义元素;
所述变量获取子模块,用于基于识别到的语义元素,获取所述被编译程序中的变量;
判断模块,用于判断获取到的变量中是否存在预设类型的变量;
所述预设类型包括栈上数组类型;
执行模块,用于当存在预设类型的变量时,执行相应的告警操作;
还包括:检测模块,用于检测所述编译器是否为修正模式;
其中,所述执行模块具体用于当所述编译器是修正模式时,根据预设修正方式修正所述预设类型的变量,并再次编译经修正后的所述被编译程序;
所述执行模块具体用于生成并显示告警信息;
当所述编译器是非修正模式时,所述告警信息还包括修改建议。
优选地,还包括:识别模块;
所述识别模块用于识别所述变量的类型;
其中,所述判断模块具体用于判断识别到的变量的类型是否为所述预设类型。
优选地,所述告警信息包括以下至少一项:错误发生位置,错误类型,错误原因。
本发明的实施例根据另一个方面,还提供了一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的防止栈溢出的方法。
本发明实施例提供的方法,获取被编译程序中的变量,为后续判断编译程序中的变量是否为预设类型的变量提供了前提保障;判断获取到的变量中是否存在预设类型的变量,从而有效定位程序中是否存在潜在的导致栈溢出的预设类型的变量;若存在预设类型的变量,说明存在潜在的导致栈溢出的缺陷,执行相应的告警操作,从而及时通知用户,便于用户对潜在的缺陷采取相应的补救措施,最终达到有效防止栈溢出的目的。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明一个实施例的防止栈溢出的方法的流程示意图;
图2为本发明实施例的栈帧在内存中的结构示意图;
图3为本发明另一个实施例的防止栈溢出的装置的基本结构示意图;
图4为本发明另一个实施例的防止栈溢出的装置的详细结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本发明第一实施例提供了一种防止栈溢出的方法,具体流程如图1所示,包括:
步骤110,获取被编译程序中的变量;步骤120,判断获取到的变量中是否存在预设类型的变量;步骤130,执行相应的告警操作。
本发明第一实施例提供的防止栈溢出的方法,与现有技术相比,获取被编译程序中的变量,为后续判断编译程序中的变量是否为预设类型的变量提供了前提保障;判断获取到的变量中是否存在预设类型的变量,从而有效定位程序中是否存在潜在的导致栈溢出的预设类型的变量;若存在预设类型的变量,说明存在潜在的导致栈溢出的缺陷,执行相应的告警操作,从而及时通知用户,便于用户对潜在的缺陷采取相应的补救措施,最终达到有效防止栈溢出的目的。
在具体介绍本发明实施例的方法之前,先大体阐述一下栈:在C/C++等编程语言中是存在栈的,从而每次函数调用都会产生一层新的栈帧(利用优化选项的情况除外),并且会把本次调用(例如handleMsg函数调用receiveMsg函数)要返回的地址存在新产生的栈帧中,等本次函数调用结束(即handleMsg函数结束调用receiveMsg函数),会取出保存在本栈帧中的返回地址,并且到跳转到该返回地址继续执行,栈帧在内存中的结构图如图2所示。
另外,栈是由高地址向低地址增长的,也即每次函数调用产生的一层新栈帧都是向低地址方向增长的,而且,栈帧中除了保存返回地址,还要保存本次运行函数调用所需要的局部变量,例如,局部变量message就是位于receiveMsg函数的栈帧中。假如局部变量message的定义为:char message[1024],于是,当向局部变量message中拷贝用户的输入量(例如msg)而不检查该输入量的长度时,也即执行strcpy(message,msg)操作时,极有可能造成输入量覆盖已经保存好的返回地址(例如图2中所示的返回地址1)的情况,甚至造成不仅覆盖本次函数调用的返回地址,而且还覆盖先前函数调用的返回地址(例如图2中所示的返回地址2)的严重情况,可见,当用户的输入量msg是经过攻击者精心设计时,返回地址就可以被覆盖成攻击者精心设计定的值,从而严重威胁计算机的安全。例如,当执行完receiveMsg函数而需要返回时,本来应该返回到其调用者handleMsg内继续向下执行,但是,由于返回地址被篡改成了其他地址值,比如0x12345678,那么执行完receiveMsg函数后程序就会跑到0x12345678地址处继续执行,如果0x12345678地址处存放的是攻击者事先设定好的攻击性的程序代码,那么程序就会按攻击者事先设定好的攻击程序代码继续执行,由于攻击者通过栈溢出方式设定的程序代码往往具有很大的权限,从而导致整个计算机系统被攻击者挟持。
通过上述介绍,可以清楚地了解:栈溢出攻击主要是由程序编写过程中向定义的栈上数组类型变量写数据导致的,因此,需要在编写程序过程中尽量避免使用导致栈溢出的栈上数组类型变量,其中,本发明实施例着重介绍了如何避免使用导致栈溢出的栈上数组类型变量。
下面,对本发明实施例提供的防止栈溢出的方法进行详细介绍,具体如下:
在步骤110中,获取被编译程序中的变量。
优选地,获取被编译程序中的变量,包括:通过编译器对被编译程序进行语法分析,以识别语义元素;基于识别到的语义元素,获取被编译程序中的变量。
具体地,编译器在执行编译的过程中,也即将高级语言翻译成机器语言的过程中,会对被编译程序做语法分析,并在语法分析过程中识别语义元素,其中,在语法分析的过程中,很多符号的优先级和含义也被确定下来,另外也会对有多重含义的某些符号进行区分,如果出现表达式不合法,比如括号不匹配、缺少操作符等,编译器就会报告语法分析阶段的错误。需要注意的是,语法分析是指对表达式语法层的分析,而并不了解这个语句是否真正有意义。
进一步地,编译器根据语法分析过程中识别的语义元素,获取被编译程序中的变量。由于编译器在进行语法分析的过程中,会将符号的含义确定下来,从而识别语义元素,于是可以根据识别的语义元素(例如某个符号为变量、某个符号为常量等),获取被编译程序中存在的变量。
在步骤120中,判断获取到的变量中是否存在预设类型的变量,如果存在预设类型的变量,则执行步骤130,执行相应的告警操作。
优选地,预设类型包括栈上数组类型。
具体地,在判断获取到的变量中是否存在预设类型的变量之前,可以通过修改编译器或其它可行方式,将栈上数组类型的相关信息更新至编译器中,以便于编译器能够基于该栈上数组类型为基准对获取到的变量进行判断。
进一步地,编译器在执行判断的过程中,只要获取到的多个变量中,有任意一个变量是栈上数组类型的变量,则说明被编译程序中存在潜在的导致栈溢出的预设类型的变量,从而准确、有效定位程序中是否存在潜在的导致栈溢出的缺陷。
在步骤130中,执行相应的告警操作。
优选地,执行相应的告警操作,包括:生成并显示告警信息;告警信息包括以下至少一项:错误发生位置,错误类型,错误原因。
优选地,还包括:检测编译器是否为修正模式;其中,执行相应的告警操作,包括:如果编译器是修正模式,则根据预设修正方式修正预设类型的变量,并再次编译经修正后的所述被编译程序。
优选地,如果编译器是非修正模式,告警信息还包括修改建议。
具体地,当判定获取到的变量中存在预设类型的变量,则编译器执行相应的告警操作,例如生成并显示告警信息,该告警信息中可以包括错误发生位置、错误类型、错误原因等等,也可以包括其它的提示信息,在此不一一列举,从而及时告知用户被编译程序中存在栈溢出风险,便于用户对潜在的风险采取相应的补救措施,最终达到有效防止栈溢出的目的。
进一步地,在执行相应的告警操作的过程中,即生成并显示告警信息的过程中,还可以检测编译器是否为修正模块,如果检测到编译器为修正模式时的编译器,则当出现栈上类型数组变量时,自动根据用户事先设定好的修正方式或修正模板(例如修正为堆上申请形式的数组类型)修正检测到的被编译程序中的栈上类型数组变量,并在完成修正后自动再次编译经过修正后的被编译程序。需要说明的是,用户需要事先将预定好的修正方式或修正模板存储于所述编译器中,或者存储于所述编译器能够调用的其它位置,如果编译器在自动修正过程中发现修正方式或修正模板缺失或者找不到匹配的修正方式或修正模板,则会报错并退出编译。
进一步地,如果检测到编译器为非修正模式时的编译器,则当出现栈上类型数组变量时,可以在告警信息中包括修改建议,例如,建议用户修改为全局变量或修改为堆上申请形式的数组变量等。
进一步地,上述建议用户修改为堆上申请形式的数组变量,具体可以为:建议用户将栈上类型数组变量message,例如:char message[1024]的定义方式,修改为堆上申请形式的数组类型变量message,例如:char*message=malloc(1024);……free(message)的定义方式;当修正为堆上申请形式的数组类型后,即使发生溢出,那覆盖的也是堆上的内容而非返回地址,在堆随机化等传统防护手段下,基于溢出的攻击带来的后果就是程序崩溃,而不是被攻击者挟持,从而大大提高系统安全防御能力。
另外,在本发明实施例的优选方式中,在步骤110之后还包括步骤111(图中未示出):识别变量的类型。
具体地,编译器在语法分析过程中识别语义元素后,也即识别出哪些符号代表着变量后,还可以进一步识别该符号是什么类型的变量,也即识别出变量的类型。
进一步地,当编译器识别出变量的类型后,可以通过判断识别到的变量的类型是否为预设类型,来判断获取到的变量中是否存在预设类型的变量。从而编译器在执行判断的过程中,只要获取到的多个变量中,有任意一个变量的类型是栈上数组类型,则说明被编译程序中存在潜在的导致栈溢出的风险,从而准确、有效定位程序中是否存在潜在的导致栈溢出的缺陷。
通过本发明实施例的方法,不仅极大提高了系统安全防御能力,而且可以准确无误的查找出程序中所有的栈上数组类型变量,从而消除所有潜在的栈溢出攻击点,并避免了手工查找的局限性。
本发明另一实施例提供了一种防止栈溢出的装置,如图3所示,包括:获取模块31、判断模块32与执行模块33。
具体地,获取模块31,用于获取被编译程序中的变量。
判断模块32,用于判断获取到的变量中是否存在预设类型的变量。
执行模块33,用于当存在预设类型的变量时,执行相应的告警操作。
进一步地,获取模块31包括分析子模块311与变量获取子模块312,如图4所示;分析子模块311,用于通过编译器对被编译程序进行语法分析,以识别语义元素;变量获取子模块312,用于基于识别到的语义元素,获取被编译程序中的变量。
进一步地,该装置还包括识别模块34,如图4所示,识别模块34用于识别变量的类型;相应的,判断模块32具体用于判断识别到的变量的类型是否为预设类型。
进一步地,执行模块33具体用于生成并显示告警信息;告警信息包括以下至少一项:错误发生位置,错误类型,错误原因。
进一步地,该装置还包括检测模块35,如图4所示,检测模块35用于检测编译器是否为修正模式;相应的,执行模块具体用于当编译器是修正模式时,根据预设修正方式修正预设类型的变量,并再次编译经修正后的被编译程序。
进一步地,当编译器是非修正模式,告警信息还包括修改建议。
进一步地,预设类型包括栈上数组类型。
本发明实施例,获取被编译程序中的变量,为后续判断编译程序中的变量是否为预设类型的变量提供了前提保障;判断获取到的变量中是否存在预设类型的变量,从而有效定位程序中是否存在潜在的导致栈溢出的预设类型的变量;若存在预设类型的变量,说明存在潜在的导致栈溢出的缺陷,执行相应的告警操作,从而及时通知用户,便于用户对潜在的缺陷采取相应的补救措施,最终达到有效防止栈溢出的目的。
另外,通过本发明实施例的方法,不仅极大提高了系统安全防御能力,而且可以准确无误的查找出程序中所有的栈上数组类型变量,从而消除所有潜在的栈溢出攻击点,并避免了手工查找的局限性。
本发明另一实施例提供了一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述的防止栈溢出的方法。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (5)

1.一种防止栈溢出的方法,其特征在于,包括:
获取被编译程序中的变量;
判断获取到的变量中是否存在预设类型的变量;所述预设类型包括栈上数组类型;
如果存在,执行相应的告警操作;
所述获取被编译程序中的变量,包括:通过编译器对被编译程序进行语法分析,以识别语义元素;基于识别到的所述语义元素,获取所述被编译程序中的变量;
其中,检测所述编译器是否为修正模式;
所述执行相应的告警操作,包括:
如果所述编译器是修正模式,则根据预设修正方式修正所述预设类型的变量,并再次编译经修正后的所述被编译程序;
所述执行相应的告警操作,还包括:生成并显示告警信息;
如果所述编译器是非修正模式,所述告警信息还包括修改建议。
2.根据权利要求1所述的方法,其特征在于,在获取所述被编译程序中的变量之后,还包括:识别所述变量的类型;
其中,所述判断获取到的变量中是否存在预设类型的变量,具体包括:
判断识别到的变量的类型是否为所述预设类型。
3.根据权利要求1-2任一项所述的方法,其特征在于,还包括:
所述告警信息包括以下至少一项:错误发生位置,错误类型,错误原因。
4.一种防止栈溢出的装置,其特征在于,包括:
获取模块,用于获取被编译程序中的变量;
所述获取模块包括分析子模块与变量获取子模块;
所述分析子模块,用于通过编译器对被编译程序进行语法分析,以识别语义元素;
所述变量获取子模块,用于基于识别到的语义元素,获取所述被编译程序中的变量;
判断模块,用于判断获取到的变量中是否存在预设类型的变量;所述预设类型包括栈上数组类型;
执行模块,用于当存在预设类型的变量时,执行相应的告警操作;
所述执行模块用于当编译器为修正模式时,自动根据预设修正方式或预设修正模板修正所述预设类型的变量,并再次编译经修正后的所述被编译程序;所述执行相应的告警操作,还包括:生成并显示告警信息;所述编译器是非修正模式时,所述告警信息还包括修改建议。
5.一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-3任一项所述的防止栈溢出的方法。
CN201711262338.4A 2017-12-04 2017-12-04 防止栈溢出的方法、装置及终端设备 Active CN107895115B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711262338.4A CN107895115B (zh) 2017-12-04 2017-12-04 防止栈溢出的方法、装置及终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711262338.4A CN107895115B (zh) 2017-12-04 2017-12-04 防止栈溢出的方法、装置及终端设备

Publications (2)

Publication Number Publication Date
CN107895115A CN107895115A (zh) 2018-04-10
CN107895115B true CN107895115B (zh) 2021-01-29

Family

ID=61806912

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711262338.4A Active CN107895115B (zh) 2017-12-04 2017-12-04 防止栈溢出的方法、装置及终端设备

Country Status (1)

Country Link
CN (1) CN107895115B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112286684B (zh) * 2020-10-29 2022-08-02 苏州浪潮智能科技有限公司 一种内存使用量控制方法、装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN104503793A (zh) * 2014-12-24 2015-04-08 风腾科技(北京)有限公司 代码练习软件中代码的运行和图形化的解析方法
CN104714885A (zh) * 2015-02-13 2015-06-17 小米科技有限责任公司 栈溢出位置的检测方法及装置
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101241532A (zh) * 2008-02-15 2008-08-13 北京邮电大学 面向源代码的基于不等式组求解的缓冲区溢出检测方法
FR2977694A1 (fr) * 2011-07-08 2013-01-11 St Microelectronics Rousset Microprocesseur protege contre un debordement de pile
US9329844B2 (en) * 2014-05-30 2016-05-03 Apple Inc. Programming system and language for application development
CN104657190B (zh) * 2015-02-14 2018-05-11 南威软件股份有限公司 一种基于c语言家族的增强开关语句功能的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN104503793A (zh) * 2014-12-24 2015-04-08 风腾科技(北京)有限公司 代码练习软件中代码的运行和图形化的解析方法
CN104714885A (zh) * 2015-02-13 2015-06-17 小米科技有限责任公司 栈溢出位置的检测方法及装置
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法

Also Published As

Publication number Publication date
CN107895115A (zh) 2018-04-10

Similar Documents

Publication Publication Date Title
US9432400B2 (en) Method and system for protecting against unknown malicious activities by detecting a heap spray attack on an electronic device
US10176327B2 (en) Method and device for preventing application in an operating system from being uninstalled
CN107330328B (zh) 防御病毒攻击的方法、装置及服务器
US11347865B2 (en) Determining security risks in binary software code
US8281290B2 (en) Software diversity using context-free grammar transformations
CN104239757A (zh) 应用程序防止逆向的方法及装置、运行方法及终端
US9392011B2 (en) Web vulnerability repair apparatus, web server, web vulnerability repair method, and program
CN101901184B (zh) 检查应用程序漏洞的方法、装置和系统
WO2017095727A1 (en) Systems and methods for software security scanning employing a scan quality index
CN105678168A (zh) 一种基于栈异常的shellcode检测方法及装置
CN110414218B (zh) 内核检测方法、装置、电子设备及存储介质
CN112016096A (zh) 一种xss漏洞的审计方法、装置
CN107895115B (zh) 防止栈溢出的方法、装置及终端设备
US11868465B2 (en) Binary image stack cookie protection
CN110502900B (zh) 一种检测方法、终端、服务器及计算机存储介质
CN104077528A (zh) 病毒检测方法、装置以及终端
US11283836B2 (en) Automatic decoy derivation through patch transformation
CN113934507A (zh) 基于污点标志跟踪检测jQuery库隐私泄露的方法和装置
CN111475168A (zh) 一种代码编译方法及装置
CN114416108B (zh) 基于Android资源文件索引表对抗反编译的方法、系统及装置
US10200401B1 (en) Evaluating results of multiple virtual machines that use application randomization mechanism
CN110147238B (zh) 一种程序编译方法、装置及系统
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
CN116049823B (zh) 一种内存马检测方法、装置、计算机设备及存储介质
CN104239800B (zh) Pdf中触发漏洞威胁的检测方法及装置

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210721

Address after: 100080 room 401-3, 4th floor, building 1, yard 1, Danling street, Haidian District, Beijing

Patentee after: Beijing Yuanxin Junsheng Technology Co.,Ltd.

Address before: 100176 room 2222, building D, building 33, 99 Kechuang 14th Street, Beijing Economic and Technological Development Zone, Beijing

Patentee before: BEIJING YUANXIN SCIENCE & TECHNOLOGY Co.,Ltd.

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20180410

Assignee: Yuanxin Information Technology Group Co.,Ltd.

Assignor: Beijing Yuanxin Junsheng Technology Co.,Ltd.

Contract record no.: X2021110000024

Denomination of invention: Method, device and terminal device for preventing stack overflow

Granted publication date: 20210129

License type: Common License

Record date: 20210804