亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種防止軟件中數(shù)據(jù)和代碼被修改的加密方法

文檔序號:6459051閱讀:338來源:國知局
專利名稱:一種防止軟件中數(shù)據(jù)和代碼被修改的加密方法
技術領域
屬于軟件加密/解密領域,是一種加密方法,用于防范對軟件的破解。
背景技術
計算機軟件運行的原理
軟件是用戶需實現(xiàn)的功能的載體,其基本由兩部分組成代碼和數(shù)據(jù),代碼的形式為計算機CPU能夠 識別的指令,指令運行過程中再使用軟件中的數(shù)據(jù)。
軟件一般使用高級編程語言編寫,如〔++, JAVA等,然后編譯成CPU所能識別的指令。而其運行則由 操作系統(tǒng)協(xié)助完成。軟件的運行過程,是一個對操作系統(tǒng)的功能進行調(diào)用的過程。每個軟件運行起來后, 就是一個進程,操作系統(tǒng)將其能提供的系統(tǒng)功能,放置在進程的某地址位置,用戶軟件調(diào)用此位置使用系 統(tǒng)功能。不同的計算機、不同的進程,其系統(tǒng)調(diào)用所處的位置是不一樣的,軟件需要在運行前知道這些位 置。閃此, 一般在運行前,有一個加載的過程。此過程中,操作系統(tǒng)將軟件拷貝到內(nèi)存中,為其創(chuàng)建進程, 并告之其系統(tǒng)調(diào)用的位置。不同的操作系統(tǒng)對此過程的實現(xiàn)不一樣,但基本原理如此。
軟件的編寫一般以函數(shù)為最小的功能組織單位, 一個函數(shù)表示一小塊功能,調(diào)用l個函數(shù)就表示使用 其功能。函數(shù)運行完后,返回到調(diào)用它的位置。在函數(shù)中可以調(diào)用其他的函數(shù)。函數(shù)調(diào)用是軟件運行的基 本方式,系統(tǒng)功能也是實現(xiàn)為函數(shù)的形式,供軟件調(diào)用的。
在《軟件加密技術內(nèi)幕》中對WINDOWS環(huán)境下,軟件的格式和加載過稃進行了詳細的描述。
軟件的破解
為了維護自己的權(quán)益,軟件開發(fā)者一般會在軟件中施加某些限制。比如只能在一段時間內(nèi)能使用,必 須有License的用戶才能使用等。為了保證平衡性,有時則需限制軟件所提供的能力,如在游戲中,每個 玩家的游戲角色所擁有的能力,根他目前的等級是相關的,不提供范圍外的功能。
而破解者通過修改軟件,則可以取得開發(fā)者允許范圍外的權(quán)限。因為軟件是由指令和數(shù)據(jù)組成的,如 果明白了軟件的原理。對其表示權(quán)限的數(shù)據(jù)進行修改,或者將其進行限制的指令去掉,都可以達到想要的 功能。
破解軟件所用的手法有兩種
靜態(tài)分析,使用工具査看軟件中指令和數(shù)據(jù),了解軟件的功能是如何實現(xiàn)的,各功能的代碼位置。因 為指令可以以匯編代碼的方式進行査看,而且很多反匯編工具還能對整個軟件的指令進行分析,匯總出軟 件的函數(shù)、系統(tǒng)調(diào)用、全局變量、字符號等信息。所以對了解軟件的內(nèi)部結(jié)構(gòu)很有幫助。
動態(tài)分析,使用調(diào)試器跟蹤軟件運行的過程。由于調(diào)試器可以中斷、單步軟件的運行過程,査看軟件 運行時的寄存器、堆棧值的變化。所以對于理解軟件的原理是必不可少的。
一般破解都是靜態(tài)分析與動態(tài)分析相結(jié)合,具體破解的技術有很多,詳細關于破解手法的詳細介紹可 參考《加密與解密》 一書。
軟件破解的傳播
軟件破解有一個特點使用者不等于破解者。很多人使用破解了的軟件,但會破解的人卻是少數(shù)。需 要破解者傳播給他人,才能被大眾所使用。如果不能傳播,破解的軟件只能自己使用,那么大部分的破解 都將變得無用。
破解者傳播的方式可以'分為以下4種
1. 直接發(fā)布原軟件的破解版,如著名網(wǎng)絡聊天軟件OICQ,就出了很多替代版本,如珊蝴蟲QQ、木 子QQ,它們可以去廣告,顯IP。
2. 對于只有注冊用戶才能使用的軟件,發(fā)布根據(jù)用戶名計算注冊碼的工具, 一般稱為注冊機。要寫 出注冊機,先需分析出軟件中驗證密碼的原理,然后寫出的注冊機能根據(jù)用戶名算出注冊碼。
3. 破解補丁,它會修改原軟件的指令和代碼,使成為破解版。這需要破解者先找出所有的需修改位 置,然后將它們寫在破解被丁中。
4. 輔助工H,使用戶能擴充原軟件的功能,如網(wǎng)絡游戲的外掛,它會伴隨著網(wǎng)游客戶端一起運行, 提供給玩家原來他得不到的功能。如代替玩家游戲,提高玩家的攻擊能力等。對于特殊的加密方法,破解者會根據(jù)需要發(fā)布特殊的破解方法。但總體來說,對破解的傳播就是使用 軟件來代替破解者本人,來對其他人的軟件進行破解。 軟件的加密
為了防止對軟件的破解,開發(fā)者會對軟件進行保護,最典型的就是加"殼"。殼是一種保護程序,軟 件加殼后,原來的指令和數(shù)據(jù),會被加密存儲。而運行時先啟動的是殼的代碼,殼先進行檢査,確認沒有 被人在調(diào)試后,才對原軟件的指令進行解密后運行。這是殼的一般原理。
除了加殼以外,還有很多其他的加密技術,比如使用加密狗,將關鍵的代碼和數(shù)據(jù)存儲在"狗"中, 狗會運行其內(nèi)的指令,完成要求的功能。而"狗"中的指令很難讀出來,保護了關鍵的代碼和數(shù)據(jù)。
詳細的加密手法的詳細介紹可參考《加密與解密》、《軟件加密技術》二書。
雖然加密手法很多,但理論上講所有的加密都是可以破解的。因為軟件所有的內(nèi)容都交給了用戶,只 要耐心的跟蹤,總能找到破解所需的信息。只是時間的長短而以。 指令變形技術
軟件中相同的功能,是可以使用不同的指令,或不同的指令順序來實現(xiàn)的。舉一個簡單的例子,將數(shù) A的值賦給B,可以使用B:A這種指令,也可以使用C-A, B《這種指令。變形是指改變實現(xiàn)功能所使用的 指令,以對分析造成障礙。
指令變形可以分為兩種
1. 對已有的指令進行變形。指對已有指令進行替換,對每條指令,換用另外一條或多條指令來實現(xiàn) 相同的功能。
2. 重新生成指令, 一般需要一個類似編譯器的指令生成器,內(nèi)部存有代表功能的邏輯,可以反復的 生成實現(xiàn)這些功能的指令,而且每次生成的指令都是不一樣的。
指令生成器是指令變形的高級形式,因為它是根據(jù)邏輯來生成指令,可以在結(jié)構(gòu)層上進行變形, 可供選擇的方式遠比簡單的替換指令為多。好的指令生成器,需要人讀明白其生成的指令的內(nèi)部邏輯 后,才能判斷兩塊代碼實現(xiàn)的是相同的功能。
對指令的變形往往夾雜著往其中加入"花指令"的過程,花指令是指一些無用的指令,不實現(xiàn)任何功 能,也不會影響原來的功能。在指令中加入花指令,可以影響對指令的反匯編和對它的分析。兩種指令變 形方式中都可以夾雜上花指令,以增強變形效果。
一般變形的目的是為了欺騙對指令進行分析的軟件,因為如果指令是不變的,就可以通過搜索的方式 找到。如殺毒軟件的一個原理就是先收集病毒的代碼,然后到軟件中去搜索是否有此代碼。如果對指令做 了變形,就無法通過搜索的方式進行査找了。除非殺毒軟件具備分析指令的能力,但用用軟件去分析是很 難的,對于第一種方式的變形,由于每種指令的替換指令不會很多,還可以進行分析,對第二種方式的變 形,是無法用軟件進行分析的。
要詳細了解指令變形,需要了解指令系統(tǒng)的結(jié)構(gòu),可以閱讀《intel architecture software developer' s manual》介紹。另外還需參考其他詳細介紹指令變形的資料。
參考資料
以上介紹的背景技術是與本技術發(fā)明相關的技術,都與軟件加密解密相關,因為每項技術都內(nèi)容龐雜, 因此只做了簡單介紹??赏ㄟ^閱讀《加密與解密》、《軟件加密技術》二書來了解詳細的介紹,另外看雪認 壇bbs. pediy. com是國內(nèi)專業(yè)的軟件加密論壇,在其中可找到所有相關技術的介紹。 《加密與解密》(第二版),ISBN7505386484,段鋼編著,電子工業(yè)出版社。 《軟件加密技術內(nèi)幕》,ISBN9787121000980,看雪學院編著,電子工業(yè)出版社。 《intel architecture software developer' s manual》,Intel的開發(fā)手冊,可網(wǎng)絡下載。

發(fā)明內(nèi)容
軟件的破解需要一個較長的分析過程,但其破解方法一般比較簡單,可以歸納為3點
1. 修改某處的代碼或數(shù)據(jù)。
2. 讀取某處數(shù)據(jù)的值。有些值是動態(tài)變化的,需要在運行的過程中進行讀取。比如網(wǎng)絡程序中,在
進行加密通訊前,會先傳輸加密的密鑰,這個密鑰值就是需讀取的。3.調(diào)用原軟件的函數(shù)。這種破解一般是發(fā)布輔助工具或原軟件的代替品。在其中使用原軟件的功能 模塊。如網(wǎng)絡游戲中的外掛,就可以通過調(diào)用網(wǎng)游客戶端的發(fā)包模塊,向服務器發(fā)包。
本技術的目標是提高以上3點的強度。對于如何防范對代碼的調(diào)用,是通過在原代碼中加入檢査運行 動態(tài)特征的代碼實現(xiàn)的。先介紹什么是檢查運行動態(tài)特征。
通過背景技術介紹可知,軟件的運行是一層層的函數(shù)調(diào)用,在調(diào)用一個函數(shù)前,會先在棧中壓入返回 位置。在函數(shù)未返回前,此位置一直存在。在一個底層函數(shù)中,通過檢査上層函數(shù)的返回位置,和上層函 數(shù)的代碼,可以判斷對自己的調(diào)用是否是可法的。這就是檢査運行動態(tài)特征。具體說明如下
在軟件寫好后,對于一個函數(shù),有兩個信息是可知的
1. 他的返回位置在棧中距離棧底的偏移。調(diào)用函數(shù)前,會在棧中壓入返回位置,然后進入函數(shù),函 數(shù)再在棧中分配自己的局部變量空間,由于局部變量空間大小是固定的。因此返回位置距離棧底 的相對偏移是可知的。
2. 他會被哪些函數(shù)所調(diào)用,每個調(diào)用的返冋位置是多少。
舉例如函數(shù)A,它可能會被B、 C、 D調(diào)用,有3個返回位置B1、 Cl、 Dl。那么A檢査棧中的返回位置, 只能是B1、 Cl、 Dl其中之一。假設檢測結(jié)果為Bl,則只要保證A的代碼未被修改,它在運行完后,必會 返回到B1處。在本發(fā)明中,A的代碼是經(jīng)過變形的,它不會被修改,所以它必會返回到B1。
而函數(shù)B的返回位置的相對棧底偏移,也是可知的。則A再檢查B的返冋位置是否正確。假設檢測結(jié) 果為E1。只要B和被B調(diào)用的所有函數(shù)的代碼未被修改,就可保證B運行完后,必會返回到E1。
依次向上層遞推,在A中就可檢査向上的每一層返回, 一直到最上層的函數(shù)。檢查函數(shù)代碼是否被修 改通過檢査整個代碼區(qū)是否被修改來實現(xiàn),這樣比較簡單,不需統(tǒng)計每個函數(shù)所調(diào)用的其他函數(shù)。檢査是 否被修改可通過計算CRC校驗來實現(xiàn)。
A保證了向上會返回到正確的函數(shù)后。如果有D想非法調(diào)用A,不論它是直接調(diào)用A,還是通過調(diào)用B、 C或更上層函數(shù)來間接調(diào)用A,調(diào)用完成后,運行都不會返回到D中,軟件的運行也必然會出現(xiàn)錯誤。因 此無法進行非法調(diào)用。
檢査桟中的函數(shù)返回位置,和檢査上層函數(shù)的代碼,稱為檢查運行動態(tài)特征。要理解它的意義需要熟 悉軟件運行時棧的使用原理,可參考此方面的資料。
介紹完什么是檢查運行動態(tài)特征,返回到對本技術的介紹。
通過背景技術中軟件破解的傳播章節(jié)可知,破解分為兩步 一是破解者手工破解自己手中的軟件,二 是破解者發(fā)布的破解軟件自動破解其他用戶的軟件。
本技術主要針對第二步,使破解軟件無法修改代碼和數(shù)據(jù),無法讀取數(shù)據(jù)的值,無法調(diào)用代碼。對于 手工破解,則會增加它的難度。防范住了破解軟件的修改,可以使軟件破解無法傳播,從而最大的減小破 解造成的影響。
在背景技術中已提到,破解者發(fā)布的軟件代替了他本人(以下簡稱破解軟件),破解其他用戶的軟件。 這些破解軟件執(zhí)行的是對軟件的修改,不具備對軟件進行分析的能力。本技術的核心原理是將要破解的部 分:做成變動的,沒有固定的修改和讀取方法。每次要破解它,都需要重新分析它。而破解軟件因為不具備 分析能力,所以無法破解。手工破解也需每運行一次就重新分析一次,增大其操作的繁雜程度
發(fā)明內(nèi)容
如下
1. 將軟件中要防止他人破解的代碼和數(shù)據(jù),從軟件中提出出來,保存到另一臺安全的計算機中。如 軟件A運行在網(wǎng)絡上的一臺計算機中,它可與計算機B通訊。A運行后,連接到B,下載其所需 的代碼H,在運行時對它進行調(diào)用。
2. 代碼H有兩個特點
a) 在傳輸給A之前,H需先經(jīng)過變形處理,以隱藏代碼中的破解點。這是本技術的關鍵,因為 變形后的代碼需要重新分析,而破解軟件很難具備分析能力。根據(jù)背景技術中的介紹,如果 使用變形代碼引擎,可達到軟件無法分析的地步。
b) 變形的代碼中包括數(shù)據(jù)。并且對它們的位置和值進行了隱藏,如對它們進行加密。使破解軟 件無法找到這些數(shù)據(jù),而H可以正確的使用。這樣這些數(shù)據(jù)是無法被外部讀取和修改的。
c) 在H中會加入檢査運行動態(tài)特征的代碼,以保證只有A才能調(diào)用H。軟件的破解可歸結(jié)為3個目標,此技術可防范此3目標
1. 修改軟件的功能。通過對代碼做變形處理的,使無法修改。
2. 調(diào)用軟件的功能。通過檢査運行動態(tài)特征,使無法調(diào)用。
3. 模仿軟件的功能。通過變形,可防止對數(shù)據(jù)值的讀取,如果這些值是在下傳前新生成的。就會使 功能的模仿因缺少關鍵數(shù)據(jù)而無法實現(xiàn)。
破解軟件要破解本技術,必須具備分析變形代碼,找出其中破解位置的能力。因此變形的強度決定了 抗破解的能力。但本發(fā)明對于如何對代碼做變形不做規(guī)定,只要變形能使破解者難以找到需讀取和修改的 代碼和數(shù)據(jù)的位置,就是本發(fā)明可使用的變形技術。
本技術的實現(xiàn)難點為
1. 在代碼中攜帶數(shù)據(jù),并且使代碼能正確的找到這些數(shù)據(jù)。
2. 保證代碼變形后,依然能在A中正常運行,比如要能正確的使用A中的數(shù)據(jù),正確的調(diào)用A的系 統(tǒng)功能。這需要A為H提供一些信息,如系統(tǒng)調(diào)用的位置。
對于目前己有的指令系統(tǒng)和操作系統(tǒng),以上難點都是可以實現(xiàn)的。
代碼H可以是起任意作用的代碼,所以本技術的使用范圍很廣。如它可以是對通訊進行加密的算法, 其中帶有加密用的密鑰,使外界無法假冒、篡改通訊。也可以是檢査軟件是否正在被調(diào)試,用戶身份是否 正確的代碼。因為此塊代碼不會被破解,也可以將它作為整個軟件安全的中心,與其他安全技術相結(jié)合。
使用本發(fā)明要求用戶的計算機必須連接到另一臺安全的計算機上,所以最好在網(wǎng)絡軟件中使用本發(fā) 明。但隨著目前網(wǎng)絡技術的日益發(fā)展,不聯(lián)網(wǎng)的電腦已很少了,所以有著廣泛的應用范圍。


附圖是棧隨軟件軟件運行而變化的示例圖,用于幫助理解檢查運行動態(tài)特征的意義。在圖中軟件當前 運行在Current EIP位置,其棧的內(nèi)容如圖右邊所示。
當運行到C1位置時,函數(shù)A將要返回。此時棧底將會到達P1位置,ret指令將會取出棧底值作為返 回位置。然后將會轉(zhuǎn)到Bl位置去運行。而運行到C2時,棧底會升到P2位置,ret指令使運行轉(zhuǎn)到El位置。
此棧底位置的變化,是由函數(shù)中的代碼控制的。只要代碼未被修改,棧底就會必會如此變化。
具體實施例方式
由于本技術最好是在網(wǎng)絡軟件中使用。所以舉例在網(wǎng)絡游戲中如何使用本技術,以防范外掛。 網(wǎng)絡游戲的外掛是一種游戲輔助工具,它會增強游戲用戶的發(fā)包能力,使能發(fā)出不符合正常游戲邏輯 的包。
根據(jù)外掛發(fā)送數(shù)據(jù)包的方法,可以將其為分3類
1. 調(diào)用客戶端的發(fā)包模塊發(fā)包
2. 自行使用客戶端的SOCKET發(fā)包
3. 脫機掛,不需要客戶端,完全自己與服務器交互
要防止外掛,就需要對客戶端發(fā)往服務器的數(shù)據(jù)包進行加密,使外掛無法發(fā)包。為了保證加密的算法 無法被破解,對此加密算法使用SessionSafe加密技術。實施過程如下
1. 在網(wǎng)絡游戲服務器上構(gòu)建一個指令生成器,其中存有很多的加密邏輯。
2. 每個客戶端連接到服務器以后,服務器要求指令生成器選擇出一個加密算法,生成表示此算法的 指令,并且生成一個密鑰,攜帶在指令中一起發(fā)給客戶端。服務器上存有此連接所使用的加密算 法和密鑰。下傳的代碼稱為代碼H。
3. 客戶端在發(fā)送數(shù)據(jù)前,調(diào)用代碼H,對數(shù)據(jù)進行加密。再發(fā)送。
4. 服務器知道每個連接所用的加密算法和密鑰,可以解密數(shù)據(jù)包。
5. 代碼H在對數(shù)據(jù)加密的同時,會檢査客戶端的運行動態(tài)特征,確認代碼是在客戶端使用。 如此實施,可防范所有的3類外掛
1. 對運行動態(tài)特征的檢査,防范外掛使用代碼H。
2. 加密的算法每個連接不同,外掛難以知道此算法。密鑰也每次由服務器生成,外掛無法分析得到。 所以外掛不能自行發(fā)包。
權(quán)利要求
1. 一種防止軟件中數(shù)據(jù)和代碼被修改的加密方法是一項提高軟件會被破解部分抗破解強度的加密技術,其特征是將要防止破解的代碼和數(shù)據(jù)存儲在另外一臺安全的計算機上,在軟件運行時,先對代碼和數(shù)據(jù)進行變形處理,隱藏住其中的破解點,再傳給軟件運行。
2. 根據(jù)權(quán)利要求1所述的變形后再傳輸?shù)拇a,其特征是在其中加入了檢查軟件運行動態(tài)特征的代碼。
全文摘要
一種防止軟件中數(shù)據(jù)和代碼被修改的加密方法,主要用于限制破解者傳播它的破解。其原理是將要防破解的代碼和數(shù)據(jù)存儲在另一臺安全的計算機上,在軟件運行時,先對代碼和數(shù)據(jù)進行變形處理,隱藏住其中的破解點后,再傳給軟件運行??梢詮V泛應用于網(wǎng)絡軟件中,防止對軟件中代碼和數(shù)據(jù)的修改或讀取,解決軟件被盜版、被使用第三方修改工具等損害開發(fā)者權(quán)益的問題。
文檔編號G06F21/00GK101477608SQ20081003226
公開日2009年7月8日 申請日期2008年1月4日 優(yōu)先權(quán)日2008年1月4日
發(fā)明者敏 胡 申請人:敏 胡
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1