[发明专利]一种利用运行时库识别编译器的方法及系统在审
申请号: | 201611237195.7 | 申请日: | 2016-12-28 |
公开(公告)号: | CN106648676A | 公开(公告)日: | 2017-05-10 |
发明(设计)人: | 黄磊;贺磊钢;童志明;何公道 | 申请(专利权)人: | 哈尔滨安天科技股份有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/45 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150090 黑龙江省哈尔滨市*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 利用 运行 识别 编译器 方法 系统 | ||
技术领域
本发明涉及计算机网络安全领域,特别涉及一种利用运行时库识别编译器的方法及系统。
背景技术
在计算机程序设计领域,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。运行时库一般包括基本的输入输出或是内存管理等支持。运行时库由编译器决定,以面向编程语言,提供其最基本的执行时需要,比如Visual C++需要复杂的运行时库支持而C的运行时库则相对简单。
运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。因此,后续各个编译器的生产商在不同平台上都开发了对应的运行时库,但大部分实现都是与各个平台有关的。如Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此Visual C++共提供了6个运行时库。
目前对于可执行文件的编译器的识别主要依靠在可执行文件中提取一段特征,如从入口点开始提取N个字节,计算HASH,组成编译器识别特征库,利用该特征库去识别编译器,由于没有区分和考虑不同编译器编译的可执行文件的不同,仅仅只是提取一段字符串特征,在识别过程中往往只能识别编译器类型,如识别是否为VC编译器,是否为gcc编译器等,而不能识别编译器的类型、版本、编译选项 (debug/Release版,控制台/MFC/windows,ANSI/UNICODE),另外也容易出现识别错误或不能识别的情况。
发明内容
为了解决上述问题,本发明提出一种利用运行时库识别编译器的方法及系统,通过对程序入口点附近进行识别,确定编译器类型,解决了现有编译器识别方法不准确的问题。
本发明首先提出一种利用运行时库识别编译器的方法,包括:
提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;
将提取到的运行时库特征码构造成为编译器识别特征库;
获取待识别的二进制可执行文件;
检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;
判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。
所述的方法中,所述编译器识别特征库中包括:运行时库特征码、偏移位置、编译器类型、编译器版本及编译器选项。
所述的方法中,所述检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码具体为:检测待识别的二进制可执行文件中入口点偏移位置中是否包含运行时库特征码。
所述的方法中,所述输出的编译信息包括:编译器类型、编译器版本及编译器选项。
本发明还相应提出一种利用运行时库识别编译器的系统,包括:
特征码提取模块,用于提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;
特征库构造模块,用于将提取到的运行时库特征码构造成为编译器识别特征库;
文件获取模块,用于获取待识别的二进制可执行文件;
检测模块,用于检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;
加密判断模块,用于判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨安天科技股份有限公司,未经哈尔滨安天科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611237195.7/2.html,转载请声明来源钻瓜专利网。