殼的自述:我是如何保護應用軟件的。

我的自述

殼——也許我生來就是爲了保護你,我的公主(程序)。

:就像花生種子被外殼包裹,蝸牛用殼保護自己,而我則是爲了保護軟件程序不受傷害(不被非法修改或被反編譯),我像一個專屬騎士,出生就是爲了保護我的公主——“軟件程序”。我一直站在公主的前面(加殼),爲了保護她,發生任何事情的時候,我會將公主的行動權控制,而我會先於公主嘗試,爲她抵禦傷害,在我進行完之後,我會放開對公主的保護(脫殼),把行動權還給她,她可以做自己想做的,當然這其中的過程很複雜。

我們殼主要分爲倆大家族,有壓縮殼家族和加密殼家族,我們雖然都是保護公主,但是執行功能卻有所不同。

壓縮殼家族的職責就是,去壓縮公主佔用的範圍,減少開銷(可能因爲大家都比較窮)。
在沒有運行的時候進行壓縮,這樣可以減少了內存開銷,也更加難以被發現(反編譯起來也麻煩);當公主要進行活動的時候,進行解壓縮,不會很影響速度。
壓縮殼家族中人員興盛,有UPX、ASPack等。等我介紹完我自己之後,在最後放出他們的資料。

加密殼家族,現在比起壓縮殼家族更加的強盛,不但人員更多,而且實現的功能也更多,可以說是十八般武藝,可以更好地保護公主。當然他們不同的人之間,側重點也不同,有的知識保護公主,有的還可以提供一些其他的服務,例如註冊機制、使用次數、使用時間等。
常見的加密殼騎士有ASProtect、Armadillo、EXECryptor、Themida、VMProtect。

介紹完我們的倆大家族之後,我想說,其實我們殼並不是都是爲了保護軟件不受保護,其實我們當中也有一些效力不同的陣營,像是一些惡意軟件、病毒等,他們乾的是壞事,但是我們也會保護他們的公主,可是我們做的事情不分好壞,都只是在保護而已。

下面我想說說我們究竟是怎麼進行保護的。(殼的加載過程
我們的核心就是行動要先於公主,並且爲了這個目的要對公主進行一些“限制”和“打扮”,當然是先這些比較專業,下面我將用專業術語來介紹。

1)保存入口參數
加殼程序初始化時保存各個寄存器的值,外殼程序執行完畢,再恢復各個寄存器的值,通常用pushad/popad,pushfd/popfd指令來對保護與恢復現場環境

2)獲取殼所需要使用的API地址   如果用PE編輯工具查看加殼後的文件,會發現未加殼的文件和加殼後的文件的輸入表不一樣,加殼後的輸入表一般所引入的DLL和API函數很少,甚至只有Kernel32.dll以及GetProcAddress這個API函數。
  殼實際上還需要其他的API函數來完成它的工作,爲了隱藏這些API,它一般只在殼的代碼中用顯式鏈接方式動態加載這些API函數.   
3)解密原程序的各個區塊(Section)的數據   殼出於保護原程序代碼和數據的目的,一般都會加密原程序文件的各個區塊。在程序執行時外殼將會對這些區塊數據解密,以讓程序能正常運行。

殼一般是按區塊加密的,那麼在解密時也按區塊解密,並且把解密的區塊數據按照區塊的定義放在合適的內存位置。

如果加殼時用到了壓縮技術,那麼在解密之前還有一道工序,就是解壓縮。這也是一些殼的特色之一,比如說原來的程序文件未加殼時1~2M大小,加殼後反而只有幾百K。

4)重定位   文件執行時將被映像到指定內存地址中,這個初始內存地址稱爲基地址(ImageBase)。
  對於EXE的程序文件來說,Windows系統會盡量滿足。例如某EXE文件的基地址爲0x400000,而運行時Windows系統提供給程序的基地址也同樣是0x400000。在這種情況下就不需要進行地址“重定位”了。由於不需要對EXE文件進行“重定位”,所以加殼軟件把原程序文件中用於保存重定位信息的區塊乾脆也刪除了,這樣使得加殼後的文件更加小巧。有些工具提供“Wipe
Reloc”的功能,其實就是這個作用。
  不過對於DLL的動態鏈接庫文件來說,Windows系統沒有辦法保證每一次DLL運行時都提供相同的基地址。這樣“重定位”就很重要了,此時殼中也需要提供進行“重定位”的代碼,否則原程序中的代碼是無法正常運行起來的。從這點來說,加殼的DLL比加殼的EXE更難修正。

5)HOOK-API
  程序文件中的輸入表的作用是讓Windows系統在程序運行時提供API的實際地址給程序使用。在程序的第一行代碼執行之前,Windows系統就完成了這個工作。
  殼一般都修改了原程序文件的輸入表,然後自己模仿Windows系統的工作來填充輸入表中相關的數據。在填充過程中,外殼就可填充HOOK-API代碼的地址,這樣就可間接地獲得程序的控制權.

6)跳轉到程序原入口點(OEP)   從這個時候起殼就把控制權交還給原程序了,一般的殼在這裏會有明顯的一個“分界線”。但現在的猛殼己沒這界限了,殼裏有肉,肉裏有殼。

以上就是我如何保護我的公主(程序)的了,還有我們其他的介紹,我的自述也要到這裏了。

常見殼介紹:

壓縮殼
UPX:
UPX是一個以命令行方式操作的可執行文件經典免費壓縮程序,壓縮算法自己實現,速度極快。
ASPack:
AsPack是高效的Win32可執行程序壓縮工具,能對程序員開發的32位Windows可執行程序進行壓縮,使最終文件減小達70%!目前針對ASPACk所開發的脫殼工具軟件也有許多,包括ASPACK ATRIPPER 、ASPACKDIE 、ASPROTECT等 .

加密殼:
ASProtect
ASProtect 是功能非常完善的加殼、加密保護工具。能夠在對軟件加殼的同時進行各種保護。如:反調試跟蹤、自校驗及用密鑰加密保護等;還有多種限制使用措施,如:使用天數限制、次數限制及對應的註冊提醒信息等。另外,該軟件還具有密鑰生成功能。

Armadillo:(穿山甲)Armadillo 是一套強大的軟件保護系統,可以爲您的程序添加裝甲般的外殼。通過藝術性的加密、數據壓縮和其它安全特性保護您的程序不被盜版和破解。Armadillo 可以讓您在5分鐘內爲您的程序設計並添加一套完全的軟件保護和註冊系統,並且不需要您修改任何程序代碼!Armadillo 支持所有語言編寫的32位 Windows EXE 文件。有個c++線性代數庫也叫armadillo。

EXECryptor:EXECryptor 是創新性的軟件保護系統,可以有效保護您的應用程序免遭逆向工程分析、修改或破解。它使用大量新穎的保護技術,可以顯著增加軟件開發商的投資回報

Themida

Themida是一個強勁的保護系統, 專爲了那些想保護自己的程式不被先進的反向工程和黑客軟件破解的軟件開發者而開發的。開發者不需要更改任何的原代碼,和不需要程式編制的經驗使用WinLicense。

Themida使用SecureEngine®的保護技術。它能夠以最高的優先等級運行,這些保護技巧是從來都沒在電腦防禦技術領域出現過,使它最大程度地保護任何程式 。

VMProtect
(業界公認的難殼)VMProtect 是新一代的軟件保護系統,將保護後的代碼放到虛擬機中運行,這將使分析反編譯後的代碼和破解變得極爲困難。使用 MAP 文件或內建的反編譯引擎,您可以快速選擇需要保護的代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章