日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種利用運行時庫識別編譯器的方法及系統(tǒng)與流程

文檔序號:11154424閱讀:368來源:國知局
一種利用運行時庫識別編譯器的方法及系統(tǒng)與制造工藝

本發(fā)明涉及計算機網(wǎng)絡(luò)安全領(lǐng)域,特別涉及一種利用運行時庫識別編譯器的方法及系統(tǒng)。



背景技術(shù):

在計算機程序設(shè)計領(lǐng)域,運行時庫是一種被編譯器用來實現(xiàn)編程語言內(nèi)置函數(shù),以提供該語言程序運行時(執(zhí)行)支持的一種特殊的計算機程序庫。運行時庫一般包括基本的輸入輸出或是內(nèi)存管理等支持。運行時庫由編譯器決定,以面向編程語言,提供其最基本的執(zhí)行時需要,比如Visual C++需要復(fù)雜的運行時庫支持而C的運行時庫則相對簡單。

運行時庫是程序在運行時所需要的庫文件,通常運行時庫是以LIB或DLL形式提供的。C運行時庫誕生于20世紀70年代,當時的程序世界還很單純,應(yīng)用程序都是單線程的,多任務(wù)或多線程機制在此時還屬于新觀念。所以這個時期的C運行時庫都是單線程的。隨著操作系統(tǒng)多線程技術(shù)的發(fā)展,最初的C運行時庫無法滿足程序的需求,出現(xiàn)了嚴重的問題。C運行時庫使用了多個全局變量(例如errno)和靜態(tài)變量,這可能在多線程程序中引起沖突。假設(shè)兩個線程都同時設(shè)置errno,其結(jié)果是后設(shè)置的errno會將先前的覆蓋,用戶得不到正確的錯誤信息。因此,后續(xù)各個編譯器的生產(chǎn)商在不同平臺上都開發(fā)了對應(yīng)的運行時庫,但大部分實現(xiàn)都是與各個平臺有關(guān)的。如Visual C++提供了兩種版本的C運行時庫。一個版本供單線程應(yīng)用程序調(diào)用,另一個版本供多線程應(yīng)用程序調(diào)用。Visual C++提供的多線程運行時庫又分為靜態(tài)鏈接庫和動態(tài)鏈接庫兩類,而每一類運行時庫又可再分為debug版和release版,因此Visual C++共提供了6個運行時庫。

目前對于可執(zhí)行文件的編譯器的識別主要依靠在可執(zhí)行文件中提取一段特征,如從入口點開始提取N個字節(jié),計算HASH,組成編譯器識別特征庫,利用該特征庫去識別編譯器,由于沒有區(qū)分和考慮不同編譯器編譯的可執(zhí)行文件的不同,僅僅只是提取一段字符串特征,在識別過程中往往只能識別編譯器類型,如識別是否為VC編譯器,是否為gcc編譯器等,而不能識別編譯器的類型、版本、編譯選項 (debug/Release版,控制臺/MFC/windows,ANSI/UNICODE),另外也容易出現(xiàn)識別錯誤或不能識別的情況。



技術(shù)實現(xiàn)要素:

為了解決上述問題,本發(fā)明提出一種利用運行時庫識別編譯器的方法及系統(tǒng),通過對程序入口點附近進行識別,確定編譯器類型,解決了現(xiàn)有編譯器識別方法不準確的問題。

本發(fā)明首先提出一種利用運行時庫識別編譯器的方法,包括:

提取已知不同類型及版本編譯器編譯出的二進制文件的運行時庫特征碼;

將提取到的運行時庫特征碼構(gòu)造成為編譯器識別特征庫;

獲取待識別的二進制可執(zhí)行文件;

檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼,如果是,則所述待識別的二進制可執(zhí)行文件編譯器類型為可識別的,輸出編譯器信息;否則判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;

判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;如果是,則對待識別的二進制可執(zhí)行文件進行解密處理后,再進行編譯器識別;否則所述待識別的二進制可執(zhí)行文件的編譯器無法識別。

所述的方法中,所述編譯器識別特征庫中包括:運行時庫特征碼、偏移位置、編譯器類型、編譯器版本及編譯器選項。

所述的方法中,所述檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼具體為:檢測待識別的二進制可執(zhí)行文件中入口點偏移位置中是否包含運行時庫特征碼。

所述的方法中,所述輸出的編譯信息包括:編譯器類型、編譯器版本及編譯器選項。

本發(fā)明還相應(yīng)提出一種利用運行時庫識別編譯器的系統(tǒng),包括:

特征碼提取模塊,用于提取已知不同類型及版本編譯器編譯出的二進制文件的運行時庫特征碼;

特征庫構(gòu)造模塊,用于將提取到的運行時庫特征碼構(gòu)造成為編譯器識別特征庫;

文件獲取模塊,用于獲取待識別的二進制可執(zhí)行文件;

檢測模塊,用于檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼,如果是,則所述待識別的二進制可執(zhí)行文件編譯器類型為可識別的,輸出編譯器信息;否則判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;

加密判斷模塊,用于判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;如果是,則對待識別的二進制可執(zhí)行文件進行解密處理后,再進行編譯器識別;否則所述待識別的二進制可執(zhí)行文件的編譯器無法識別。

所述的系統(tǒng)中,所述編譯器識別特征庫包括:運行時庫特征碼、偏移位置、編譯器類型、編譯器版本及編譯器選項。

所述的系統(tǒng)中,所述檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼具體為:檢測待識別的二進制可執(zhí)行文件中入口點偏移位置中是否包含運行時庫特征碼。

所述的系統(tǒng)中,所述輸出的編譯信息包括:編譯器類型、編譯器版本及編譯器選項。

利用各種不同編譯器編譯的可執(zhí)行文件的入口點一般包含運行時庫提供的啟動代碼,其主要功能是對程序進行初始化、對全局變量進行賦初值、加載用戶程序的真實入口main函數(shù),因此不同編譯器編譯的可執(zhí)行程序的入口點附近一定包含特有的運行時庫代碼特征。因此本發(fā)明通過提取不同類型不同版本編譯器編譯的二進制文件所包含的獨有的運行時庫特征碼,組成編譯器識別特征庫,利用該特征庫對可執(zhí)行文件的編譯器類型和版本進行精確識別。針對可執(zhí)行文件的編譯器識別,不再僅僅依靠在可執(zhí)行文件的某個位置隨機提取一段特特征碼,而是結(jié)合可執(zhí)行文件包含編譯器運行時庫特征這一特性,在可執(zhí)行文件的特定位置提取運行時庫特征碼來精確識別編譯器類型和編譯器版本。

本發(fā)明的優(yōu)勢在于,能夠快速識別二進制可執(zhí)行文件的編譯器類型,無需詳細分析二進制可執(zhí)行文件的內(nèi)容,并且還能夠精確識別編譯器的版本、編譯選項等信息。且本發(fā)明方法適用面廣,對所有類型的編譯器均適用,包括Microsoft VISUAL C++編譯器、Microsoft VISUAL BASIC編譯器、Microsoft FORTRAN編譯器、mingw(gcc)編譯器等各種類型的編譯器。

附圖說明

為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明一種利用運行時庫識別編譯器的方法實施例流程圖;

圖2為本發(fā)明一種利用運行時庫識別編譯器的系統(tǒng)實施例結(jié)構(gòu)示意圖。

具體實施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進一步詳細的說明。

為了解決上述問題,本發(fā)明提出一種利用運行時庫識別編譯器的方法及系統(tǒng),通過對程序入口點附近進行識別,確定編譯器類型,解決了現(xiàn)有編譯器識別方法不準確的問題。

首先給出一種利用運行時庫識別編譯器的方法實施例,如圖1所示,包括:

S101:提取已知不同類型及版本編譯器編譯出的二進制文件的運行時庫特征碼;

S102:將提取到的運行時庫特征碼構(gòu)造成為編譯器識別特征庫;不同編譯器編譯的二進制可執(zhí)行程序的入口點附近一定包含特有的運行時庫代碼特征,因此提取不同類型不同版本編譯器的運行時庫特征碼行程編譯器識別特征庫;

S103:獲取待識別的二進制可執(zhí)行文件;加載待識別的二進制可執(zhí)行文件,快速定位程序入口點地址;

S104:檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼,如果是,則所述待識別的二進制可執(zhí)行文件編譯器類型為可識別的,輸出編譯器信息;否則執(zhí)行S105;輸出的編譯器信息包括該運行時庫特征碼對應(yīng)的編譯器類型、編譯器版本、編譯器選項;

S105:判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;如果是,則執(zhí)行S106;否則所述待識別的二進制可執(zhí)行文件的編譯器無法識別;如果待識別的二進制可執(zhí)行文件入口點附近不包含編譯器識別特征庫中的任何特征,則該文件可能經(jīng)過壓縮加密處理,用于隱藏程序真正入口點,防止軟件被破解,因此需要對該文件進行壓縮加密類型識別處理;

S106:對待識別的二進制可執(zhí)行文件進行解密處理后,再進行編譯器識別。即對解壓解密出的二進制可執(zhí)行文件進行如上所述的編譯器識別。

所述的方法中,所述編譯器識別特征庫中包括:運行時庫特征碼、偏移位置、編譯器類型、編譯器版本及編譯器選項。所述偏移位置是指運行時庫特征碼在可執(zhí)行文件中的入口點的偏移位置。

所述的方法中,所述檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼具體為:檢測待識別的二進制可執(zhí)行文件中入口點偏移位置中是否包含運行時庫特征碼。假設(shè)編譯器識別特征庫中的運行時庫特征碼包含運行時庫特征碼A和運行時庫特征碼在可執(zhí)行文件中的入口點偏移位置B,檢查二進制可執(zhí)行文件中入口點偏移位置B中是否包含運行時庫特征碼A;

所述的方法中,所述輸出的編譯信息包括:編譯器類型、編譯器版本及編譯器選項。

本發(fā)明還相應(yīng)提出一種利用運行時庫識別編譯器的系統(tǒng)實施例,如圖2所示,包括:

特征碼提取模塊201,用于提取已知不同類型及版本編譯器編譯出的二進制文件的運行時庫特征碼;

特征庫構(gòu)造模塊202,用于將提取到的運行時庫特征碼構(gòu)造成為編譯器識別特征庫;

文件獲取模塊203,用于獲取待識別的二進制可執(zhí)行文件;

檢測模塊204,用于檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼,如果是,則所述待識別的二進制可執(zhí)行文件編譯器類型為可識別的,輸出編譯器信息;否則判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;

加密判斷模塊205,用于判斷所述待識別的二進制可執(zhí)行文件是否為壓縮加密類型;如果是,則對待識別的二進制可執(zhí)行文件進行解密處理后,再進行編譯器識別;否則所述待識別的二進制可執(zhí)行文件的編譯器無法識別。

所述的系統(tǒng)中,所述編譯器識別特征庫包括:運行時庫特征碼、偏移位置、編譯器類型、編譯器版本及編譯器選項。

所述的系統(tǒng)中,所述檢測待識別的二進制可執(zhí)行文件入口點附近是否包含編譯器識別特征庫中的運行時庫特征碼具體為:檢測待識別的二進制可執(zhí)行文件中入口點偏移位置中是否包含運行時庫特征碼。

所述的系統(tǒng)中,所述輸出的編譯信息包括:編譯器類型、編譯器版本及編譯器選項。

利用各種不同編譯器編譯的可執(zhí)行文件的入口點一般包含運行時庫提供的啟動代碼,其主要功能是對程序進行初始化、對全局變量進行賦初值、加載用戶程序的真實入口main函數(shù),因此不同編譯器編譯的可執(zhí)行程序的入口點附近一定包含特有的運行時庫代碼特征。因此本發(fā)明通過提取不同類型不同版本編譯器編譯的二進制文件所包含的獨有的運行時庫特征碼,組成編譯器識別特征庫,利用該特征庫對可執(zhí)行文件的編譯器類型和版本進行精確識別。針對可執(zhí)行文件的編譯器識別,不再僅僅依靠在可執(zhí)行文件的某個位置隨機提取一段特特征碼,而是結(jié)合可執(zhí)行文件包含編譯器運行時庫特征這一特性,在可執(zhí)行文件的特定位置提取運行時庫特征碼來精確識別編譯器類型和編譯器版本。

本發(fā)明的優(yōu)勢在于,能夠快速識別二進制可執(zhí)行文件的編譯器類型,無需詳細分析二進制可執(zhí)行文件的內(nèi)容,并且還能夠精確識別編譯器的版本、編譯選項等信息。且本發(fā)明方法適用面廣,對所有類型的編譯器均適用,包括Microsoft VISUAL C++編譯器、Microsoft VISUAL BASIC編譯器、Microsoft FORTRAN編譯器、mingw(gcc)編譯器等各種類型的編譯器。

雖然通過實施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1