欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法

文檔序號:6399903閱讀:248來源:國知局
專利名稱:Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種軟件防破解領(lǐng)域,尤其涉及一種Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法。
背景技術(shù)
軟件的盜版問題已經(jīng)引起了各國政府的高度關(guān)注。盜版軟件最基本的技術(shù)手段是通過逆向工程來理解程序,進而對軟件進行非法的篡改,以達到去除軟件保護的目的。軟件盜版的日益猖獗已經(jīng)嚴重擾亂了軟件市場的秩序,嚴重損害了軟件廠商的利益。比軟件盜版更可怕的是逆向分析。根據(jù)經(jīng)驗,一個熟練的逆向分析者一天可以逆向1000行C++代碼。也就是說,辛辛苦苦幾年時間開發(fā)出來的軟件,如果不加保護,就會被人以每天1000行的速度逆向全部代碼。這個問題在驅(qū)動程序方面體現(xiàn)的尤為突出。驅(qū)動程序各個短小精悍,匯集著眾多的核心技術(shù),但他往往只有幾十KB,可能在幾天的時間內(nèi)就被人逆向出全部源碼。所以往往在你的軟件發(fā)布后很短的一段時間內(nèi),就會涌現(xiàn)出無數(shù)個與你的軟件功能相同的軟件,你的競爭力也就不復(fù)存在了。由此可見軟件保護的重要性。不過由于軟件加密是一種對抗性技術(shù),所以需要開發(fā)者對解密技術(shù)有一定的了解。但是軟件加密技術(shù)的資料相對來講比較匱乏,這也就使得大多數(shù)軟件保護程序的開發(fā)者不熟悉軟件加密與解密,進而導(dǎo)致花費了大量人力物力設(shè)計出的加密方案不堪一擊。為了讓軟件開發(fā)者從軟件保護的措施中脫離出來,專心致力于自己的軟件開發(fā),專用加密軟件這個事物就應(yīng)運而生了。本專利申請?zhí)岢龅姆桨妇蛯儆谝环N用于專用加密軟件的軟件加密方案。殼技術(shù)是最早出現(xiàn)的一種專用的加密技術(shù)?,F(xiàn)在大家能夠接觸到的絕大多數(shù)軟件都經(jīng)過了加殼的保護,而殼技術(shù)也成為了現(xiàn)階段最流行的軟件加密技術(shù)。世界知名的加殼加密軟件有 ASProtect、Armadillo、EXECryptor 等等。例如,ASProtect是一款非常強大的Win32程序保護工具,具有壓縮、加密、反跟蹤代碼、CRC校檢和花指令等眾多保護措施。它使用Blowfish、Twofish、TEA等強勁的加密算法,用RSA1024作為注冊密鑰生成器。他還通過API鉤子與加殼的程序進行通信,并且ASProtect提供SDK,支持VC、VB等,實現(xiàn)加密程序內(nèi)外結(jié)合。Armadillo是一款應(yīng)用面較為廣泛的商業(yè)保護軟件,可以在提供保護的同時為你的軟件加上各種限制,包括時間、次數(shù)、啟動畫面等等。他的特點是雙進程保護。他在加殼時會掃描程序,將標(biāo)記過的跳轉(zhuǎn)指令替換成int3指令。程序在運行時,保護進程截獲int3指令,將其替換成目標(biāo)地址返回被保護進程,然后被保護進程繼續(xù)運行。EXECryptor是一款商業(yè)保護軟件,可以為目標(biāo)軟件加上注冊機制、時間限制、使用次數(shù)等功能。他的特點是Ant1-Debug功能很強大。通過加殼保護的軟件,在殼與解密后的原始程序之間有一條明顯的分界線,破解者可以在這個分割線下斷點,等待殼自己解密完成后進行內(nèi)存倒出,并利用倒出的內(nèi)存重構(gòu)exe文件,達到解密的目的。
其他已有的雙進程保護軟件僅僅針對軟件解密過程進行保護,并沒有針對軟件運行全過程進行保護,也存在解密過程與程序運行的明顯分界線,與傳統(tǒng)加殼保護存在相同的問題。還存儲一種虛擬機保護技術(shù)。虛擬機保護與虛擬機這種概念不同,他比較類似于P-C0DE,將一系列的指令解釋成字節(jié)碼,放在一個解釋引擎中執(zhí)行,以對軟件進行保護。調(diào)試者跟蹤進入到虛擬機,是非常難于理解原指令的。想要理解程序流程,就必須深入分析虛擬機引擎,完整地得到P-CODE與原始代碼的對應(yīng)關(guān)系,其復(fù)雜度可想而知。VMProtect是一款著名的虛擬機保護軟件,它以向開發(fā)者提供SDK的方式提供保護。以VMPiOtect為代表的而虛擬機保護也就成為了當(dāng)今最安全的保護方式。隨著虛擬機保護技術(shù)的日益成熟,許多基于殼技術(shù)的加密軟件也轉(zhuǎn)向虛擬機加密方式,現(xiàn)在,上述的幾種加殼保護軟件也都或多或少的包含了虛擬機加密功能??梢?,虛擬機加密保護在安全方面做得較好,但是存在過大的性能損耗,影響了這種加密機制的廣泛使用。虛擬機保護是以效率換取安全的,一條原始的匯編指令經(jīng)過VM處理后會膨脹幾十倍甚至幾百倍,執(zhí)行效率會大大下降。正因如此,VM保護一般采取提供SDK的方式。不過對于一些對執(zhí)行效率要求較高的程序,虛擬機保護就不適合了。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題之一是需要提供一種能夠較好地防破解的Windows平臺可執(zhí)行文件API (Application Programming Interface,應(yīng)用程序編程接口)延遲導(dǎo)入保護方法。為了解決上述技術(shù)問題,本發(fā)明提供了一種Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法。該方法包括:啟動調(diào)試器;由所述調(diào)試器以調(diào)試方式啟動用戶目標(biāo)程序,以生成目標(biāo)進程;所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP。其中,所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP的步驟,包括:所述調(diào)試器利用WaitForDebugEvent函數(shù)等待所述目標(biāo)進程產(chǎn)生的調(diào)試事件;所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的調(diào)試事件時,判斷該調(diào)試事件是否為斷點異常事件;在判斷為是斷點異常事件時,所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP。其中,在所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP之前,所述目標(biāo)進程注冊篩選器異常處理函數(shù),所注冊的篩選器異常處理函數(shù)用于:若檢測到所述目標(biāo)進程所觸發(fā)的斷點異常被丟棄且所述目標(biāo)進程被恢復(fù)運行,則所述目標(biāo)進程進入死循環(huán)或退出。進一步,該方法還包括:所述目標(biāo)進程注冊篩選器異常處理函數(shù)之后,產(chǎn)生第一指定異常事件;所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第一指定異常事件時,對所述用戶目標(biāo)程序進行解密操作。
其中,所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP的步驟,包括:所述目標(biāo)進程在要調(diào)用API時產(chǎn)生第二指定異常事件;所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時,加載相應(yīng)的DLL,計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址,并將該函數(shù)地址返回給所述目標(biāo)進程。其中,所述目標(biāo)進程注冊在要調(diào)用API時產(chǎn)生第二指定異常事件的步驟,包括:在所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP之前,所述目標(biāo)進程構(gòu)造一個采用int3指令的機器碼cc填充的int3表,然后修改其導(dǎo)入地址表(IAT),將其導(dǎo)入地址表中每一項按順序指向該int3表。其中,所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時、加載相應(yīng)的DLL、計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址并將該函數(shù)地址返回給所述目標(biāo)進程的步驟,包括:計算發(fā)生異常的虛擬地址與int3表表頭的偏移地址,得出調(diào)用API函數(shù)的序號;若在所述導(dǎo)入地址表中查找到該序號對應(yīng)的導(dǎo)入地址,則利用所述導(dǎo)入地址修正目標(biāo)線程的上下文以使得所述目標(biāo)線程調(diào)用該API函數(shù)。其中,所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時、加載相應(yīng)的DLL、計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址并將該函數(shù)地址返回給所述目標(biāo)進程的步驟,包括:計算發(fā)生異常的虛擬地址與int3表表頭的偏移地址,得出調(diào)用API函數(shù)的序號;若在所述導(dǎo)入地址表中未查找到該序號對應(yīng)的導(dǎo)入地址,依據(jù)該序號確定相應(yīng)的DLL名和API函數(shù)名,將確定的DLL名和API函數(shù)名寫入到目標(biāo)進程中預(yù)留的地址并修改目標(biāo)線程上下文,以使得所述目標(biāo)進程進行DLL裝載并向所述調(diào)試器返回API入口地址;所述調(diào)試器將從所述目標(biāo)進程返回API入口地址保存到導(dǎo)入地址表中,修改所述目標(biāo)線程上下文以使得所述目標(biāo)線程調(diào)用該API函數(shù)。其中,所述啟動調(diào)試器的步驟包括:用戶運行用戶目標(biāo)程序;目標(biāo)程序的進程判斷其是否正被調(diào)試,若判斷為否,則目標(biāo)程序觸發(fā)調(diào)試器后退出,反之則進入目標(biāo)程序執(zhí)行后續(xù)的程序代碼以完成用戶所要實現(xiàn)的各種功能。此外,所述調(diào)試器的進程以遠程注入的方式注入到操作系統(tǒng)的進程中。與現(xiàn)有技術(shù)相比,本發(fā)明的一個或多個實施例可以具有如下優(yōu)點:本發(fā)明通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP,可以較好地防止第三方通過調(diào)試器來跟蹤破解。本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。


附圖用來提供對本發(fā)明的進一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例共同用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:圖1示出了根據(jù)本發(fā)明實施例一的Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法的流程示意圖;圖2示出根據(jù)本發(fā)明實施例用戶通過運行用戶目標(biāo)程序來觸發(fā)啟動調(diào)試器的流程不意圖。
具體實施例方式以下將結(jié)合附圖及實施例來詳細說明本發(fā)明的實施方式,借此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達成技術(shù)效果的實現(xiàn)過程能充分理解并據(jù)以實施。需要說明的是,只要不構(gòu)成沖突,本發(fā)明中的各個實施例以及各實施例中的各個特征可以相互結(jié)合,所形成的技術(shù)方案均在本發(fā)明的保護范圍之內(nèi)。另外,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。傳統(tǒng)的思路是通過加殼或加密代碼來使得調(diào)試器無法解讀正確的代碼。然而,如前面所述加殼和加密均都有其局限性。windows 分 4 層保護結(jié)構(gòu) ringO、ringl、ring2 和 ring3,最核心的 ringO,最外面的是ring3。調(diào)試器可以是一個運行在Ring3的簡化版調(diào)試器,可以以調(diào)試狀態(tài)啟動一個目標(biāo)程序,接收該程序產(chǎn)生的調(diào)試事件,并做出相應(yīng)的處理。本發(fā)明的發(fā)明人注意到,Windows環(huán)境中的Ring3調(diào)試器與被調(diào)試程序之間的關(guān)系是一一對應(yīng)的,也就是說一個程序只能有一個調(diào)試器,而要破解一個程序的基本手段就是動態(tài)分析,也就是調(diào)試,因而創(chuàng)造性地提出了這樣一種技術(shù)路線:如果預(yù)先主動附加一個調(diào)試器在用戶目標(biāo)進程上,也就阻止了其他調(diào)試器的附加,這也就起到反調(diào)試的作用。調(diào)試器還可以分擔(dān)部分或全部的代碼解壓、變換等功能,也可以對目標(biāo)進程進行實時的監(jiān)視與控制,這使得根據(jù)本發(fā)明的可執(zhí)行文件防破解方法更加靈活,也大大增加了對可執(zhí)行文件的破解難度。此處所說的破解,主要指對軟件(可執(zhí)行程序)版權(quán)的破解和對軟件的代碼破譯。本發(fā)明中將安裝有Windows操作系統(tǒng)的系統(tǒng)稱作Windows平臺。本發(fā)明主要適應(yīng)于Windows 平臺。實施例一下面參考圖1說明本發(fā)明的實施例一。圖1示出了根據(jù)本發(fā)明實施例一的Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法的流程示意圖。步驟S110,啟動調(diào)試器。步驟S120,由調(diào)試器以調(diào)試方式啟動用戶目標(biāo)程序,以生成目標(biāo)進程。步驟S130,目標(biāo)進程注冊篩選器異常處理函數(shù),所注冊的篩選器異常處理函數(shù)用于:若檢測到所述目標(biāo)進程所觸發(fā)的斷點異常被丟棄且所述目標(biāo)進程被恢復(fù)運行,則所述目標(biāo)進程進入死循環(huán)或退出。篩選器異常處理是全局的,可以使用SetUnhandledExceptionFilter函數(shù)設(shè)置自己的異常處理回調(diào)函數(shù),這個回調(diào)函數(shù)相當(dāng)于在Windows默認的異常處理函數(shù)之前進行一些預(yù)處理,與一個過濾器的作用類似,且每一個進程只能設(shè)置一個篩選器異常處理回調(diào)函數(shù)。當(dāng)異常發(fā)生時,Windows會調(diào)用我們設(shè)置的異常處理函數(shù),并傳入如下參數(shù):_Handler proc _lpExceptionInfo_lpExceptionInfo 是一個指針,指向一個 EXCEPT 10Ν_Ρ01NTERS 結(jié)構(gòu),EXCEPT10N_POINTERS結(jié)構(gòu)定義如下:
權(quán)利要求
1.一種Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法,其特征在于,包括: 啟動調(diào)試器; 由所述調(diào)試器以調(diào)試方式啟動用戶目標(biāo)程序,以生成目標(biāo)進程; 所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP的步驟,包括: 所述調(diào)試器利用WaitForDebugEvent函數(shù)等待所述目標(biāo)進程產(chǎn)生的調(diào)試事件; 所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的調(diào)試事件時,判斷該調(diào)試事件是否為斷點異常事件; 在判斷為是斷點異常事件時,所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP之前,所述目標(biāo)進程注冊篩選器異常處理函數(shù),所注冊的篩選器異常處理函數(shù)用于:若檢測到所述目標(biāo)進程所觸發(fā)的斷點異常被丟棄且所述目標(biāo)進程被恢復(fù)運行,則所述目標(biāo)進程進入死循環(huán)或退出。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括: 所述目標(biāo)進程注冊篩選器異常處理函數(shù)之后,產(chǎn)生第一指定異常事件; 所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第一指定異常事件時,對所述用戶目標(biāo)程序進行解密操作。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP的步驟,包括: 所述目標(biāo)進程在要調(diào)用API時產(chǎn)生第二指定異常事件; 所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時,加載相應(yīng)的DLL,計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址,并將該函數(shù)地址返回給所述目標(biāo)進程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述目標(biāo)進程注冊在要調(diào)用API時產(chǎn)生第二指定異常事件的步驟,包括: 在所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改所述目標(biāo)進程的EIP之前,所述目標(biāo)進程構(gòu)造一個采用int3指令的機器碼cc填充的int3表,然后修改其導(dǎo)入地址表(IAT),將其導(dǎo)入地址表中每一項按順序指向該int3表。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時、加載相應(yīng)的DLL、計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址并將該函數(shù)地址返回給所述目標(biāo)進程的步驟,包括: 計算發(fā)生異常的虛擬地址與int3表表頭的偏移地址,得出調(diào)用API函數(shù)的序號; 若在所述導(dǎo)入地址表中查找到該序號對應(yīng)的導(dǎo)入地址,則利用所述導(dǎo)入地址修正目標(biāo)線程的上下文以使得所述目標(biāo)線程調(diào)用該API函數(shù)。
8.根據(jù)權(quán)利要求6或7所述的方法,其特征在于,所述調(diào)試器在檢測到所述目標(biāo)進程觸發(fā)的所述第二指定異常事件時、加載相應(yīng)的DLL、計算出所述目標(biāo)進程要調(diào)用的函數(shù)地址并將該函數(shù)地址返回給所述目標(biāo)進程的步驟,包括: 計算發(fā)生異常的虛擬地址與int3表表頭的偏移地址, 得出調(diào)用API函數(shù)的序號;若在所述導(dǎo)入地址表中未查找到該序號對應(yīng)的導(dǎo)入地址,依據(jù)該序號確定相應(yīng)的DLL名和API函數(shù)名,將確定的DLL名和API函數(shù)名寫入到目標(biāo)進程中預(yù)留的地址并修改目標(biāo)線程上下文,以使得所述目標(biāo)進程進行DLL裝載并向所述調(diào)試器返回API入口地址; 所述調(diào)試器將從所述目標(biāo)進程返回API入口地址保存到導(dǎo)入地址表中,修改所述目標(biāo)線程上下文以使得所述目標(biāo)線程調(diào)用該API函數(shù)。
9.根據(jù)權(quán)利要求1至7所述的方法,其特征在于,所述啟動調(diào)試器的步驟包括: 用戶運行用戶目標(biāo)程序; 目標(biāo)程序的進程判斷其是否正被調(diào)試,若判斷為否,則目標(biāo)程序觸發(fā)調(diào)試器后退出,反之則進入目標(biāo)程序執(zhí)行后續(xù)的程序代碼以完成用戶所要實現(xiàn)的各種功能。
10.根據(jù)權(quán)利要求1至7所述的方法,其特征在于,所述調(diào)試器的進程以遠程注入的方式注入到操作系統(tǒng)的進程中。
全文摘要
本發(fā)明公開了一種Windows平臺可執(zhí)行文件API延遲導(dǎo)入保護方法。該方法包括啟動調(diào)試器;由所述調(diào)試器以調(diào)試方式啟動用戶目標(biāo)程序,以生成目標(biāo)進程;所述目標(biāo)進程通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP。本發(fā)明通過觸發(fā)斷點異常的方式來通知所述調(diào)試器進行API導(dǎo)入及修改被調(diào)試程序的EIP,可以較好地防止第三方通過調(diào)試器來跟蹤破解。
文檔編號G06F21/12GK103116715SQ201310066958
公開日2013年5月22日 申請日期2013年3月1日 優(yōu)先權(quán)日2013年3月1日
發(fā)明者鄭子琛 申請人:中標(biāo)軟件有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
普安县| 太谷县| 来宾市| 宁城县| 柳江县| 汨罗市| 杨浦区| 台前县| 株洲市| 渑池县| 朝阳区| 南涧| 贡山| 大田县| 灌云县| 丰原市| 安丘市| 盐池县| 梨树县| 兴义市| 临安市| 大关县| 甘谷县| 镇宁| 旅游| 依兰县| 涿鹿县| 渭源县| 若尔盖县| 阿拉尔市| 阿克陶县| 宜章县| 方城县| 容城县| 天柱县| 怀来县| 贵定县| 双桥区| 莱阳市| 元谋县| 邵阳市|