一种程序链接的编译方法及装置制造方法及图纸

技术编号:15437013 阅读:51 留言:0更新日期:2017-05-25 19:13
本发明专利技术提供一种程序链接的编译方法及装置,其中所述编译方法包括:获取待链接文件,依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节;对每一所述输入节随机化地分配索引值;依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中。本发明专利技术实施例程序链接的编译方法通过将待链接文件中的函数和变量符号拆分后再进行随机化处理,可以进一步提高程序内函数和变量符号的随机性,从而降低了程序被成功攻击的可能性,提高程序的安全性。

Method and device for compiling program link

The present invention provides a method and a device for compiling program links, including the compilation method: obtain the linked file according to the link to file function or variable symbols, the link to file sections split multiple input section; for each section of the input randomization distribution of index value; according to the index of every section of the input value, the corresponding function or variable symbols with a link to the output file. Compilation method of the embodiment of the invention will be linked through the program function and variable symbol split link file after randomization, can further improve the randomness of the program function and variable symbols, thereby reducing the likelihood of successful attacks by the program, improve the safety program.

【技术实现步骤摘要】
一种程序链接的编译方法及装置
本专利技术涉及计算机
,尤其涉及一种程序链接的编译方法及装置。
技术介绍
随着信息技术的高速发展,利用广泛开放的网络环境进行通信已经成为时代发展的趋势。网络在提供开发和共享资源的同时,也不可避免的存在安全风险,如果计算机软件系统(操作系统、共享库、中间件、应用程序)存在漏洞,熟悉系统的攻击者就可以通过网络利用这些漏洞来执行恶意代码,并进行非法操作。对系统进行攻击的一个前提是攻击者对系统尤其是程序的代码地址空间分布有一定的了解,然后才能通过精心构造的代码使得进程执行攻击者预先设置好的攻击代码来控制系统。应对这种攻击,一般采用地址随机化的方法来进行保护。软件代码地址随机化后,攻击者无法将程序的执行流程跳转到预期的地址来执行攻击代码,从而有效的降低攻击者攻击成功的概率。如图1所示为现有技术中随机分配程序地址的过程状态示意图,将输入文件的代码节Func1、Func2、Func3和Func4合并至输出文件的代码节,将输入文件的数据节Var1、Var2、Var3和Var4合并至输出文件的数据节。传统的地址随机化工作通常在系统层面来完成。系统在启动程序时,将程序中的各个组件(主程序、动态库、堆栈)的基地址进行随机化处理,这样的随机化过程虽然实现简单、额外开销较小,但也存在如下问题:①粒度较粗,组件内部的地址分布仍然是固定的,攻击者仍然可以调用操作系统接口,获得各组件的起始地址,结合暴力破解和相对地址来实施攻击。由于大量的开源代码在商业项目的应用,攻击者可以使用预先编译好的程序来获取这些开源代码组件内部的地址分布。②不够灵活,要么系统内所有的程序均采用地址随机化,要么都不采用地址随机化,无法根据应用程序自身的特点和安全需求来自行开启该项功能。③随机数的选取由系统决定,部分随机数的生成还与系统时间相关,攻击者在获取了系统的随机数生成规则和系统时间后较容易进行破解。
技术实现思路
本专利技术实施例的目的在于提供一种程序链接的编译方法及装置,可以进一步提高程序内函数和变量符号的随机性,从而降低了程序被成功攻击的可能性,提高程序的安全性。为了实现上述目的,本专利技术实施例提供一种程序链接的编译方法,所述编译方法包括:获取待链接文件,依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节;对每一所述输入节随机化地分配索引值;依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中。其中,所述依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节,具体包括:读取所述待链接文件中当前所处理节的符号表信息;依据所述符号表信息,查找当前所处理节的函数或变量符号,依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得与当前所处理节相对应的多个所述输入节。其中,所述依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节之后,所述方法还包括:读取所述待链接文件中所有的节信息,判断所述待链接文件中的所有节是否拆分完毕,当未拆分完毕时,则继续读取待链接文件中下一个未处理节的符号表信息,依次选定下一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节;依次选定每一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节。其中,所述对每一所述输入节随机化地分配索引值,具体包括:获取多个随机事件的数值参数,根据所述数值参数,生成随机种子,其中所述随机事件包括:当前编译主机发生中断、当前用户终端输入或者读取当前编译主机的系统时间,相应的,所述数值参数包括:当前编译主机发生中断的次数数值、当前用户终端输入的数值或者所读取的当前编译主机的系统时间数值;根据所述随机种子生成随机序列;获取所述待链接文件中拆分后的每一所述输入节,根据所述随机序列为拆分后的每一个所述输入节分配索引值。其中,所述根据所述随机序列为拆分后的每一个所述输入节分配索引值,具体包括:为当前所述输入节选定一索引值;检测为当前所述输入节所选定的索引值是否已经被使用,如果已被使用,再次调用所述随机序列为所述输入节分配一新索引值;若为当前所述输入节所选定的索引值未被使用,则标记选定的索引值已被使用,并将选定的索引值赋予相应的所述输入节。其中,所述依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中,具体为:根据所述输入节的索引值确定所述输入节在链接输出文件中的偏移地址,根据所述偏移地址将所述输入节合并至链接输出文件中的一确定位置。本专利技术实施例还提供一种程序链接的编译装置,所述编译装置包括:处理模块,用于获取待链接文件,依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节;分配模块,用于对每一所述输入节随机化地分配索引值;合并模块,用于依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中。其中,所述处理模块包括:读取子模块,用于读取所述待链接文件中当前所处理节的符号表信息;创建子模块,用于依据所述符号表信息,查找当前所处理节的函数或变量符号,依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得与当前所处理节相对应的多个所述输入节。其中,所述处理模块还包括:第一处理子模块,用于在所述创建子模块依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节之后,读取所述待链接文件中所有的节信息,判断所述待链接文件中的所有节是否拆分完毕,当未拆分完毕时,则继续读取待链接文件中下一个未处理节的符号表信息,依次选定下一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节;第二处理子模块,用于依次选定每一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节。其中,所述分配模块包括:第一生成子模块,用于获取多个随机事件的数值参数,根据所述数值参数,生成随机种子,其中所述随机事件包括:当前编译主机发生中断、当前用户终端输入或者读取当前编译主机的系统时间,相应的,所述数值参数包括:当前编译主机发生中断的次数数值、当前用户终端输入的数值或者所读取的当前编译主机的系统时间数值;第二生成子模块,用于根据所述随机种子生成随机序列;分配子模块,用于获取所述待链接文件中拆分后的每一所述输入节,根据所述随机序列为拆分后的每一个所述输入节分配索引值。其中,所述分配子模块包括:选定子单元,用于为当前所述输入节选定一索引值;第一处理子单元,用于检测为当前所述输入节所选定的索引值是否已经被使用,如果已被使用,再次调用所述随机序列为所述输入节分配一新索引值;第二处理子单元,用于若为当前所述输入节所选定的索引值未被使用,则标记选定的索引值已被使用,并将选定的索引值赋予相应的所述输入节。其中,所述合并模块进一步用于:根据所述输入节的索引值确定所述输入节在链接输出文件中的偏移地址,根据所述偏移地址将所述输入节合并至链接输出文件中的一确定位置。本专利技术实施例的上述技术方案的有益效果如下:通过在待链接文件的各个节中依次选定预设数量的函数或变量符号作为一组,本文档来自技高网
...
一种程序链接的编译方法及装置

【技术保护点】
一种程序链接的编译方法,其特征在于,所述编译方法包括:获取待链接文件,依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节;对每一所述输入节随机化地分配索引值;依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中。

【技术特征摘要】
1.一种程序链接的编译方法,其特征在于,所述编译方法包括:获取待链接文件,依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节;对每一所述输入节随机化地分配索引值;依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中。2.如权利要求1所述的方法,其特征在于,所述依据所述待链接文件中的函数或变量符号,将所述待链接文件中的节进行拆分,获得多个输入节,具体包括:读取所述待链接文件中当前所处理节的符号表信息;依据所述符号表信息,查找当前所处理节的函数或变量符号,依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得与当前所处理节相对应的多个所述输入节。3.如权利要求2所述的方法,其特征在于,所述依次选定当前所处理节中预设数量的函数或变量符号作为一组,为每一组创建新节之后,所述方法还包括:读取所述待链接文件中所有的节信息,判断所述待链接文件中的所有节是否拆分完毕,当未拆分完毕时,则继续读取待链接文件中下一个未处理节的符号表信息,依次选定下一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节;依次选定每一个未处理节中预设数量的函数或变量符号作为一组,为每一组创建新节,获得多个所述输入节。4.如权利要求1所述的方法,其特征在于,所述对每一所述输入节随机化地分配索引值,具体包括:获取多个随机事件的数值参数,根据所述数值参数,生成随机种子,其中所述随机事件包括:当前编译主机发生中断、当前用户终端输入或者读取当前编译主机的系统时间,相应的,所述数值参数包括:当前编译主机发生中断的次数数值、当前用户终端输入的数值或者所读取的当前编译主机的系统时间数值;根据所述随机种子生成随机序列;获取所述待链接文件中拆分后的每一所述输入节,根据所述随机序列为拆分后的每一个所述输入节分配索引值。5.如权利要求4所述的方法,其特征在于,所述根据所述随机序列为拆分后的每一个所述输入节分配索引值,具体包括:为当前所述输入节选定一索引值;检测为当前所述输入节所选定的索引值是否已经被使用,如果已被使用,再次调用所述随机序列为所述输入节分配一新索引值;若为当前所述输入节所选定的索引值未被使用,则标记选定的索引值已被使用,并将选定的索引值赋予相应的所述输入节。6.如权利要求1所述的方法,其特征在于,所述依据每一所述输入节的所述索引值,将相应的函数或变量符号合并至一链接输出文件中,具体为:根据所述输入节的索引值确定所述输入节在链接输出文件中的偏移地址,根据所述偏移地址将所述输入节合并至链接输出文件中的一确定位置。7.一种程...

【专利技术属性】
技术研发人员:谢宝友王德强
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1