CN106407754B - 一种生成随机布局程序的方法及装置 - Google Patents
一种生成随机布局程序的方法及装置 Download PDFInfo
- Publication number
- CN106407754B CN106407754B CN201510458402.0A CN201510458402A CN106407754B CN 106407754 B CN106407754 B CN 106407754B CN 201510458402 A CN201510458402 A CN 201510458402A CN 106407754 B CN106407754 B CN 106407754B
- Authority
- CN
- China
- Prior art keywords
- program
- variable
- information block
- function
- random number
- 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
- 238000000034 method Methods 0.000 title claims abstract description 27
- 230000006870 function Effects 0.000 claims abstract description 79
- 238000012163 sequencing technique Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 7
- 239000000872 buffer Substances 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 10
- 230000007547 defect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种生成随机布局程序的方法及装置,涉及计算机软件系统安全领域,所述方法包括:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;构建所述程序的函数信息块和/或变量信息块;利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。本发明能够使程序拥有不同的内存布局,以较小的时空性能代价,大大增强软件系统的抗攻击能力。
Description
技术领域
本发明涉及计算机软件系统安全领域,特别涉及一种生成随机布局程序的方法及装置。
背景技术
当前,计算机系统中越来越多的使用开源软件,这在降低计算机系统软件成本的同时,也引入了很多安全隐患。
软件系统都有缺陷,但开源软件的缺陷更容易成为安全漏洞,其原因在于,攻击者可以通过开放的源代码了解到程序的关键逻辑和内存布局,从程序逻辑上,攻击者可以获得缓冲区溢出等漏洞的攻击点,再根据已知的内存布局,攻击者就能够通过伪造数据来控制被攻击的系统。图1是现有技术提供的未进行布局随机化的编译过程示意图,如图1所示,代码中的变量和函数相对分布被原样体现在了生成的程序中,容易受到攻击。
修复所有漏洞是不现实的,但是通过将程序的内存布局进行随机化,可以阻断许多危险的攻击,并大大增加其余攻击的难度。
目前常见的内存布局随机化方法是通过加载器来实现的基地址随机化,这种方法虽然实现简单,但是由于程序内部的相对内存布局固定,难以对缓冲区溢出等危险攻击进行有效的阻断。
另外,对应用程序加密或进行代码混淆也可以提供一定的安全防护,但是这类技术通常具有较大的性能开销,并且在程序故障时存在难以调试和定位的问题。
发明内容
本发明的目的在于提供一种生成随机布局程序的方法及装置,能更好地解决当前随机化布局程序抗攻击能力差和性能开销大的问题。
根据本发明的一个方面,提供了一种生成随机布局程序的方法,包括:
对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;
构建所述程序的函数信息块和/或变量信息块;
利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。
优选地,通过以下步骤构建所述程序的函数信息块:
按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存。
优选地,通过以下步骤对所述函数信息块的位置进行调整:
为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。
优选地,通过以下步骤构建所述程序的变量信息块:
按照所述程序的输入顺序,从所述程序中依次获取全局变量,并将所获取的每个全局变量作为一个全局变量信息块进行缓存。
优选地,通过以下步骤对所述变量信息块的位置进行调整:
为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。
根据本发明的另一方面,提供了一种生成随机布局程序的装置,包括:
随机数生成模块,用于对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数;
输入模块,用于构建所述程序的函数信息块和/或变量信息块;
排序模块,用于利用所生成的随机数,对所述函数信息块和/或变量信息块的位置进行调整。
优选地,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存。
优选地,所述排序模块为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。
优选地,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取变量,并将所获取的每个变量作为一个变量信息块进行缓存。
优选地,所述排序模块为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。
与现有技术相比较,本发明的有益效果在于:
本发明通过将程序中的函数和/或变量按照随机数进行排序输出,使程序拥有不同的内存布局,以较小的时空性能代价,大大增强软件系统的抗攻击能力。
附图说明
图1是现有技术提供的未进行布局随机化的编译过程示意图;
图2是本发明实施例提供的生成随机布局程序的方法流程图;
图3是本发明实施例提供的进行布局随机化的编译过程示意图;
图4是本发明实施例提供的生成随机布局程序的装置的内部模块示意图;
图5是将图4所示装置嵌入到编译器中实现时的工作示意图;
图6是可实施本发明的其他位点示意图(源代码级,汇编前,汇编中)。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图2是本发明实施例提供的生成随机布局程序的方法流程图,如图2所示,步骤包括:
步骤S101:对于需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数。
步骤S102:构建所述程序的函数信息块和/或变量信息块。
具体地说,按照所述程序的输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存;和/或按照所述程序的输入顺序,从所述程序中依次获取全局变量,并将所获取的每个全局变量作为一个全局变量信息块进行缓存。
步骤S103:利用所生成的随机数,对所述函数信息块和/或所述变量信息块的位置进行调整,形成随机布局程序。
具体地说,为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序;和/或为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。
在程序编译期间,可以在编译器中采用本发明所述的方法,图3是本发明实施例提供的进行布局随机化的编译过程示意图,如图3所示,在编译器输出汇编文件之前,利用布局随机化装置(即生成随机布局程序的装置)进行布局随机化处理后,变量和函数的相对位置关系发生了变化,根据源代码无法猜测出程序运行时的变量和函数布局,从而提高了软件系统的抗攻击能力。
所述变量可以是全局变量。
图4是本发明实施例提供的生成随机布局程序的装置的内部模块示意图,如图4所示,包括随机数生成模块10、输入模块20、排序模块30、输出模块40。
随机数生成模块10用于对需要进行随机布局的程序,生成用来对所述程序进行随机布局的随机数。也就是说,随机数生成模块10负责生成无规律的随机数,实现方式包括但不限于使用纯软件方法生成随机数,根据随机事件(例如中断数、网络通信信息)软件生成随机数,直接读取特定硬件提供的随机数等。
输入模块20用于构建所述程序的函数信息块和/或变量信息块。具体地说,输入模块20接收外部顺序输入的函数和/或变量,对于需要随机化布局的函数,输入模块20按照输入顺序,从所述程序中依次获取函数,并将所获取的每个函数作为一个函数信息块进行缓存;对于需要随机化布局的变量,例如全局变量,输入模块20按照外部输入所述程序的顺序,从所述程序中依次获取变量,并将所获取的每个变量作为一个变量信息块进行缓存。
排序模块30用于利用所生成的随机数,对所述函数信息块和/或变量信息块的位置进行调整,形成随机布局程序。所述随机布局程序包含排序后的函数信息块和/或变量信息块。具体地说,对于需要随机化布局的函数,排序模块30读取输入模块20缓存的函数信息块(即关于函数的顺序分块数据),并为所缓存的每个函数信息块获取一个随机数,然后按照随机数的大小,对每个函数信息块的位置进行排序,并输出排序后的函数信息块;对于需要随机化布局的变量,例如全局变量,排序模块30读取输入模块20缓存的变量信息块(即关于变量的顺序分块数据),并为所缓存的每个变量信息块获取一个随机数,然后按照随机数的大小,对每个变量信息块的位置进行排序,并输出排序后的变量信息块。
输出模块40用于输出所述随机布局程序,即按照随机顺序输出函数和/或变量。
图5是将图4所示装置嵌入到编译器中实现时的工作示意图,如图5所示,所述装置的工作流程如下:
步骤1:在编译器内部的汇编文件输出之前,插入对输入模块20的调用。
步骤2:输入模块20判断是否需要进行随机化布局,若判断不需要进行随机化布局处理,则返回并进行汇编文件输出,若判断需要进行随机化布局处理,则对需要随机化布局的函数信息和/或全局变量信息依次进行分块缓存,对其余信息不做处理。
步骤3:在编译器完成单个源文件的全部编译动作后,调用排序模块30。
步骤4:排序模块30根据随机数生成模块10的输出,为每一个被缓存的信息块获取一个对应的随机数。
步骤5:在所有信息块都获得对应的随机数后,排序模块30依据信息块的随机数大小对信息块进行重新排序。完成排序后,排序模块30将重排后的信息块顺序传递给输出模块40。
步骤6:输出模块40顺序将信息块的内容写入汇编文件中。
上述信息块包括函数信息块和/或(全局)变量信息块。
优选在编译器内部实施的原因是,此时本发明所述装置可以获得最为完整的代码信息,保证变形过程的正确性,同时,可以与其他代码保护技术同时实施,进一步增强抗攻击能力,并且可以保证输出程序的调试信息正确。
通过新增的定制编译流程,本发明能够使得编译器每次编译生成的程序拥有不同的内存布局(包括但不限于函数和全局变量),以较小的时空性能代价,大大增强软件系统的抗攻击能力。
综上,本发明提供的方法具体包括:
1、在编译流程中加入如图4所示装置,修改函数编译后的输出顺序,将原有的按源代码顺序输出改为随机顺序输出。具体地说,在进行编译时,从随机数生成模块10中为每一个函数取得一个随机数。按照函数对应的随机数大小,排定函数输出的顺序。排列函数的实施方式包括但不限于:在实际编译前,调整输入到实际编译流程的函数顺序;在实际编译后,调整函数输出到文件的顺序。
2、在编译流程中加入如图4所示的装置,将原有的全局变量布局从按源代码顺序改为随机顺序。具体地说,在进行编译时,从随机数生成模块10中为每一个全局变量取得一个随机数。按照全局变量对应的随机数大小,排定变量的相对顺序。排列变量的实施方式包括但不限于:在实际编译前,调整进入编译流程的变量顺序;在实际编译后,调整变量输出到文件的顺序。
图6是可实施本发明的其他位点示意图,如图6所示,本发明在程序编译阶段,除了在编译器中生成随机布局程序,还可以在其它多个位点生成随机布局程序,例如在源代码预编译时,在源代码级进行程序的内存布局随机化调整;在汇编代码输入汇编器前,针对汇编文件进行内存布局随机化调整;在汇编器内部进行内存布局随机化调整等等。
在其他位点实施的装置也都具有类似的组成结构和工作原理,其核心逻辑包括分块缓存输入的顺序数据,为每一个分块(即信息块)获得对应的随机数,利用该随机数对分块数据进行排序,最后输出排序后的数据。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。
Claims (10)
1.一种生成随机布局程序的方法,其特征在于,包括:
在每次编译程序期间,为需要进行随机布局的程序生成用来对所述程序中的每个函数和/或每个变量进行随机布局的随机数;
将所述程序中的每个函数和/或每个变量构建成对应的函数信息块和/或变量信息块;
利用每个函数和/或每个变量的随机数,对对应的函数信息块和/或变量信息块的位置进行调整,以编译生成函数和变量的内存布局不同的随机布局程序。
2.根据权利要求1所述的方法,其特征在于,通过以下步骤将所述程序中的每个函数构建成对应的函数信息块:
按照所述程序的输入顺序,从所述程序中依次获取每个函数,并将所获取的每个函数作为一个函数信息块进行缓存。
3.根据权利要求2所述的方法,其特征在于,通过以下步骤对对应的函数信息块的位置进行调整:
为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。
4.根据权利要求1所述的方法,其特征在于,通过以下步骤将所述程序中的每个变量构建成对应的变量信息块:
按照所述程序的输入顺序,从所述程序中依次获取每个全局变量,并将所获取的每个全局变量作为一个全局的变量信息块进行缓存。
5.根据权利要求4所述的方法,其特征在于,通过以下步骤对对应的变量信息块的位置进行调整:
为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。
6.一种生成随机布局程序的装置,其特征在于,包括:
随机数生成模块,用于在每次编译程序期间,为需要进行随机布局的程序生成用来对所述程序中的每个函数和/或每个变量进行随机布局的随机数;
输入模块,用于将所述程序中的每个函数和/或每个变量构建成对应的函数信息块和/或变量信息块;
排序模块,用于利用每个函数和/或每个变量的随机数,对对应的函数信息块和/或变量信息块的位置进行调整,以编译生成函数和变量的内存布局不同的随机布局程序。
7.根据权利要求6所述的装置,其特征在于,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取每个函数,并将所获取的每个函数作为一个函数信息块进行缓存。
8.根据权利要求7所述的装置,其特征在于,所述排序模块为所缓存的每个函数信息块获取一个随机数,并按照随机数的大小,对每个函数信息块的位置进行排序。
9.根据权利要求6所述的装置,其特征在于,所述输入模块按照所述程序的输入顺序,从所述程序中依次获取每个变量,并将所获取的每个变量作为一个变量信息块进行缓存。
10.根据权利要求9所述的装置,其特征在于,所述排序模块为所缓存的每个变量信息块获取一个随机数,并按照随机数的大小,对每个变量信息块的位置进行排序。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510458402.0A CN106407754B (zh) | 2015-07-30 | 2015-07-30 | 一种生成随机布局程序的方法及装置 |
PCT/CN2015/093261 WO2017016087A1 (zh) | 2015-07-30 | 2015-10-29 | 一种生成随机布局程序的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510458402.0A CN106407754B (zh) | 2015-07-30 | 2015-07-30 | 一种生成随机布局程序的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106407754A CN106407754A (zh) | 2017-02-15 |
CN106407754B true CN106407754B (zh) | 2021-06-18 |
Family
ID=57884022
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510458402.0A Active CN106407754B (zh) | 2015-07-30 | 2015-07-30 | 一种生成随机布局程序的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106407754B (zh) |
WO (1) | WO2017016087A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107169348B (zh) * | 2017-05-15 | 2020-07-28 | 东信和平科技股份有限公司 | Java Card虚拟机栈的防错误注入方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013459A (zh) * | 2007-02-07 | 2007-08-08 | 北京飞天诚信科技有限公司 | 一种提高软件保护安全性的方法及装置 |
CN101304320A (zh) * | 2008-06-16 | 2008-11-12 | 华为技术有限公司 | 一种地址处理方法和装置 |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
CN102713839A (zh) * | 2009-10-08 | 2012-10-03 | 埃德图加拿大公司 | 用于动态函数调用系统中的积极自我修改的系统和方法 |
CN103729579A (zh) * | 2014-01-02 | 2014-04-16 | 北京深思数盾科技有限公司 | 函数级的软件保护方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0988591A1 (en) * | 1997-06-09 | 2000-03-29 | Intertrust, Incorporated | Obfuscation techniques for enhancing software security |
US6813679B2 (en) * | 2002-06-20 | 2004-11-02 | Purple Mountain Server Llc | Method and circuit for increasing the memory access speed of an enhanced synchronous SDRAM |
CN100461089C (zh) * | 2006-03-15 | 2009-02-11 | 中兴通讯股份有限公司 | 一种随机数的产生方法 |
CN101286191B (zh) * | 2008-05-21 | 2011-01-12 | 成都市华为赛门铁克科技有限公司 | 一种缓冲区溢出攻击的防护方法、装置及系统 |
CN101309149B (zh) * | 2008-06-30 | 2012-05-23 | 成都市华为赛门铁克科技有限公司 | 一种地址处理方法和装置 |
CN101996066B (zh) * | 2009-08-10 | 2014-03-19 | 北京多思科技发展有限公司 | 用于乱序编码指令的指令译码装置及方法 |
-
2015
- 2015-07-30 CN CN201510458402.0A patent/CN106407754B/zh active Active
- 2015-10-29 WO PCT/CN2015/093261 patent/WO2017016087A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013459A (zh) * | 2007-02-07 | 2007-08-08 | 北京飞天诚信科技有限公司 | 一种提高软件保护安全性的方法及装置 |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
CN101304320A (zh) * | 2008-06-16 | 2008-11-12 | 华为技术有限公司 | 一种地址处理方法和装置 |
CN102713839A (zh) * | 2009-10-08 | 2012-10-03 | 埃德图加拿大公司 | 用于动态函数调用系统中的积极自我修改的系统和方法 |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
CN103729579A (zh) * | 2014-01-02 | 2014-04-16 | 北京深思数盾科技有限公司 | 函数级的软件保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106407754A (zh) | 2017-02-15 |
WO2017016087A1 (zh) | 2017-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10402179B1 (en) | Application randomization mechanism | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
EP3038004A1 (en) | Method for providing security for common intermediate language-based program | |
US20180260199A1 (en) | Method and apparatus for intermediate representation of applications | |
CN107679393B (zh) | 基于可信执行环境的Android完整性验证方法和装置 | |
CN107092518A (zh) | 一种保护拟态防御系统软件层安全的编译方法 | |
EP2812832B1 (en) | Method and apparatus for program flow in software operation | |
CN105022936A (zh) | 一种类class文件加密解密方法和装置 | |
US20120260106A1 (en) | System and method for binary layout randomization | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
CN104239757A (zh) | 应用程序防止逆向的方法及装置、运行方法及终端 | |
WO2015150391A1 (en) | Software protection | |
GB2487645A (en) | Operating a JIT compiler in a randomly allocated memory for secure execution of unsigned code | |
CN104680039A (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN104866739A (zh) | 安卓系统中应用程序加密方法及系统 | |
US7908450B2 (en) | Memory management unit, code verifying apparatus, and code decrypting apparatus | |
CN105718765A (zh) | 一种利用有限自动机实现代码混淆的方法 | |
CN106682460A (zh) | 一种基于两次变换的代码混淆方法 | |
CN113673002A (zh) | 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法 | |
CN115374440A (zh) | 安全防御方法和电子装置 | |
CN105184119B (zh) | 一种软件的安全保护方法 | |
CN108875321A (zh) | 一种指令集的生成方法、装置和电子设备 | |
CN106407754B (zh) | 一种生成随机布局程序的方法及装置 | |
CN112287357B (zh) | 一种针对嵌入式裸机系统的控制流验证方法与系统 | |
CN109446751A (zh) | 生成包括多个子文件的数据集的方法、装置和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |