一种利用运行时库识别编译器的方法及系统技术方案

技术编号:15297537 阅读:92 留言:0更新日期:2017-05-11 20:01
本发明专利技术提出一种利用运行时库识别编译器的方法及系统,提取已知不同类型及版本编译器编译的二进制文件的运行时库特征码,并构造成为编译器识别特征库;获取待识别的二进制可执行文件;检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则待识别的二进制可执行文件可能为压缩加密类型,如果是加密类型,则对待识别的二进制可执行文件解密处理后,再进行编译器识别;否则待识别的二进制可执行文件的编译器无法识别。本发明专利技术不需要对二进制可执行文件进行详细分析,只需查看程序入口点,即可确认详细的编译器类型及版本等信息。

Method and system for identifying compiler using run-time library

The invention provides a method and a system using the runtime compiler identification, extraction of known binary files of different types and versions of the compiler runtime code, and the compiler structure become recognition database; access to identify the binary executable file; binary detection to identify the executable file is near the entrance point contains the compiler identifies the feature database runtime code, if it is, then the input binary executable file for the compiler type recognition of the output of a compiler to identify information; otherwise the binary executable file may be compressed if the type of encryption, encryption type, is to identify a binary executable file decryption after the treatment, then the compiler or recognition; to identify the binary executable file compiler does not recognize. The invention does not need to carry out a detailed analysis of the binary executable file, and only need to look at the entry point of the program, so as to confirm the detailed compiler type and version information.

【技术实现步骤摘要】

本专利技术涉及计算机网络安全领域,特别涉及一种利用运行时库识别编译器的方法及系统
技术介绍
在计算机程序设计领域,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。运行时库一般包括基本的输入输出或是内存管理等支持。运行时库由编译器决定,以面向编程语言,提供其最基本的执行时需要,比如VisualC++需要复杂的运行时库支持而C的运行时库则相对简单。运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。因此,后续各个编译器的生产商在不同平台上都开发了对应的运行时库,但大部分实现都是与各个平台有关的。如VisualC++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。VisualC++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此VisualC++共提供了6个运行时库。目前对于可执行文件的编译器的识别主要依靠在可执行文件中提取一段特征,如从入口点开始提取N个字节,计算HASH,组成编译器识别特征库,利用该特征库去识别编译器,由于没有区分和考虑不同编译器编译的可执行文件的不同,仅仅只是提取一段字符串特征,在识别过程中往往只能识别编译器类型,如识别是否为VC编译器,是否为gcc编译器等,而不能识别编译器的类型、版本、编译选项(debug/Release版,控制台/MFC/windows,ANSI/UNICODE),另外也容易出现识别错误或不能识别的情况。
技术实现思路
为了解决上述问题,本专利技术提出一种利用运行时库识别编译器的方法及系统,通过对程序入口点附近进行识别,确定编译器类型,解决了现有编译器识别方法不准确的问题。本专利技术首先提出一种利用运行时库识别编译器的方法,包括:提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;将提取到的运行时库特征码构造成为编译器识别特征库;获取待识别的二进制可执行文件;检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。所述的方法中,所述编译器识别特征库中包括:运行时库特征码、偏移位置、编译器类型、编译器版本及编译器选项。所述的方法中,所述检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码具体为:检测待识别的二进制可执行文件中入口点偏移位置中是否包含运行时库特征码。所述的方法中,所述输出的编译信息包括:编译器类型、编译器版本及编译器选项。本专利技术还相应提出一种利用运行时库识别编译器的系统,包括:特征码提取模块,用于提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;特征库构造模块,用于将提取到的运行时库特征码构造成为编译器识别特征库;文件获取模块,用于获取待识别的二进制可执行文件;检测模块,用于检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;加密判断模块,用于判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。所述的系统中,所述编译器识别特征库包括:运行时库特征码、偏移位置、编译器类型、编译器版本及编译器选项。所述的系统中,所述检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码具体为:检测待识别的二进制可执行文件中入口点偏移位置中是否包含运行时库特征码。所述的系统中,所述输出的编译信息包括:编译器类型、编译器版本及编译器选项。利用各种不同编译器编译的可执行文件的入口点一般包含运行时库提供的启动代码,其主要功能是对程序进行初始化、对全局变量进行赋初值、加载用户程序的真实入口main函数,因此不同编译器编译的可执行程序的入口点附近一定包含特有的运行时库代码特征。因此本专利技术通过提取不同类型不同版本编译器编译的二进制文件所包含的独有的运行时库特征码,组成编译器识别特征库,利用该特征库对可执行文件的编译器类型和版本进行精确识别。针对可执行文件的编译器识别,不再仅仅依靠在可执行文件的某个位置随机提取一段特特征码,而是结合可执行文件包含编译器运行时库特征这一特性,在可执行文件的特定位置提取运行时库特征码来精确识别编译器类型和编译器版本。本专利技术的优势在于,能够快速识别二进制可执行文件的编译器类型,无需详细分析二进制可执行文件的内容,并且还能够精确识别编译器的版本、编译选项等信息。且本专利技术方法适用面广,对所有类型的编译器均适用,包括MicrosoftVISUALC++编译器、MicrosoftVISUALBASIC编译器、MicrosoftFORTRAN编译器、mingw(gcc)编译器等各种类型的编译器。附图说明为了更清楚地说明本专利技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术一种利用运行时库识别编译器的方法实施例流程图;图2为本专利技术一种利用运行时库识别编译器的系统实施例结构示意图。具体实施方式为了使本
的人员更好地理解本专利技术实施例中的技术方案,并使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图对本专利技术中技术方案作进一步详细的说明。为了解决上述问题,本专利技术提出一种利用运行时库识别编译器的方法及系统,通过对程序入口点附近进行识别,确定编译器类型,解决了现有编译器识别方法不准确的问题。首先给出一种利用运行时库识别编译器的方法实施例,如图1所示,包括:S101:提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;S102:将提取到的运行时库特征码构造成为编译器识别特征库;不同编译器编译的二进制可执行程序的入口点附近一定包含特有的运行时库代码特征,因此提取不同类型不同版本编译器的运行时库特征码行程编译器识别特征库;S103:获取待识别的二进制可执行文件;加本文档来自技高网
...
一种利用运行时库识别编译器的方法及系统

【技术保护点】
一种利用运行时库识别编译器的方法,其特征在于,包括:提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;将提取到的运行时库特征码构造成为编译器识别特征库;获取待识别的二进制可执行文件;检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。

【技术特征摘要】
1.一种利用运行时库识别编译器的方法,其特征在于,包括:提取已知不同类型及版本编译器编译出的二进制文件的运行时库特征码;将提取到的运行时库特征码构造成为编译器识别特征库;获取待识别的二进制可执行文件;检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码,如果是,则所述待识别的二进制可执行文件编译器类型为可识别的,输出编译器信息;否则判断所述待识别的二进制可执行文件是否为压缩加密类型;判断所述待识别的二进制可执行文件是否为压缩加密类型;如果是,则对待识别的二进制可执行文件进行解密处理后,再进行编译器识别;否则所述待识别的二进制可执行文件的编译器无法识别。2.如权利要求1所述的方法,其特征在于,所述编译器识别特征库中包括:运行时库特征码、偏移位置、编译器类型、编译器版本及编译器选项。3.如权利要求2所述的方法,其特征在于,所述检测待识别的二进制可执行文件入口点附近是否包含编译器识别特征库中的运行时库特征码具体为:检测待识别的二进制可执行文件中入口点偏移位置中是否包含运行时库特征码。4.如权利要求1所述的方法,其特征在于,所述输出的编译信息包括:编译器类型、编译器版本及编译器选项。5.一种利用运行时库识别编译器的系统,其特征...

【专利技术属性】
技术研发人员:黄磊贺磊钢童志明何公道
申请(专利权)人:哈尔滨安天科技股份有限公司
类型:发明
国别省市:黑龙江;23

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

1