freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)設(shè)計-pe格式程序加殼軟件(編輯修改稿)

2024-12-13 22:48 本頁面
 

【文章內(nèi)容簡介】 列號的過程,其實(shí)就是驗(yàn)證用戶名和序 列號之間的數(shù)學(xué)映射關(guān)系。這個映射關(guān)系是由軟件的設(shè)計者制定的,所以各個軟件生成序列號的算法是不同的。這是最常見的一種保護(hù)方式。 4 警告( NAG)窗口 Nag 的本義是煩人的意思。 Nag 窗口是軟件設(shè)計者用來不時提醒用戶購買正式版本的窗口。 時間限制 這類保護(hù)的軟件一般都有時間段的限制,例如試用 30天等。當(dāng)過了共享軟件的試用期后,就不予運(yùn)行。只有向軟件作者付費(fèi)注冊之后才能得到一個無時間限制的注冊版本。 Key File 保護(hù) Key File(注冊文件)是一種利用文件 來注冊軟件的保護(hù)方式。 Key File 一般是一個小文件,可以是純文本文件,也可以是包含不可顯示字符的二進(jìn)制文件,其內(nèi)容是一些加密過或未加密的數(shù)據(jù),其中可能有用戶名、注冊碼等信息。文件格式則由軟件作者自己定義。試用版軟件沒有注冊文件,當(dāng)用戶向作者付費(fèi)注冊之后,會收到作者寄來的注冊文件,其中可能包含用戶的個人信息。用戶只要將該文件放入指定的目錄,就可以讓軟件成為正式版。該文件一般是放在軟件的安裝目錄中或系統(tǒng)目錄下。軟件每次啟動時,從該文件中讀取數(shù)據(jù),然后利用某種算法進(jìn)行處理,根據(jù)處理的結(jié)果判斷是否為正確的注冊文 件,如果正確則以注冊版模式來運(yùn)行。 功能限制的程序 這種程序一般是 DEMO 版或菜單中部分選項(xiàng)是灰色。有些 DEMO 版本的部分功能里面根本就沒有。而有些程序功能全有,只要注冊后就正常了。 CDcheck 最簡單也最常見的光盤保護(hù)就是程序在啟動時判斷光驅(qū)中的光盤上是否存在特定的文件,如果不存在則認(rèn)為用戶沒有正版光盤,拒絕運(yùn)行。在程序運(yùn)行的過程當(dāng)中一般不再檢查光盤的存在與否 。 5 3 軟件加殼脫殼介紹 什么是殼 自然界中,植物用殼來保護(hù)種子,動物用殼來保護(hù)身體等。同樣, 在一些計算機(jī)軟件里也有一段專門負(fù)責(zé)保護(hù)軟件不被非法修改或反編譯的程序。它們附加在原程序上通過 windows 加載器載入內(nèi)存后,先于原始程序執(zhí)行,得到控制權(quán)。執(zhí)行過程中對原始程序進(jìn)行解密,還原,還原完成后再把控制權(quán)交還給原始程序,執(zhí)行原因來的代碼的部分。加上外殼后,原始程序代碼在磁盤文件中一般是以加密后的形式存在的。只在執(zhí)行時在內(nèi)容存中還原,這樣就可以比較有效地防止破解者對程序文件的非法 修改,同時也可防止程序被靜態(tài)反編譯。由于這段程序和自然界的殼在功能上有很多相同的地方,基于命名的規(guī)則,就把這樣的程序稱為“殼 ”了。 ( 圖 ) 加殼軟件一般都有良好的操作界面,使用也比較簡單。除了一些商業(yè)殼,還有一些個人開發(fā)的殼,種類較多。殼對軟件提供了良好保護(hù)的同時,也帶來了兼容性的問題。選擇一款殼保護(hù)軟件后,要在不同硬件和系統(tǒng)上多測試。由于殼能保護(hù)自身代碼,因此許多木馬或者病毒都用殼來保護(hù)和隱藏自己。對于一些流行的殼,殺毒引擎能對目標(biāo)軟件脫殼,再進(jìn)行病毒檢查。而大多數(shù)私人殼,殺毒軟件不會專門開發(fā)解壓引擎,而是直接把殼當(dāng)成木馬或者病毒處理。 有加殼就一定有脫殼。一般的脫殼軟件多是專門針對某加殼軟件而編寫的,雖然針對性強(qiáng) ,效果好,但收集麻煩。 6 殼的種類 壓縮殼 不同的外殼所側(cè)重方面不一樣,有的側(cè)重于壓縮,有的則側(cè)重于加密。壓縮殼的特點(diǎn)是減小軟件體積,加密保護(hù)不是重點(diǎn)。常見的壓縮殼有: UPX, ASPack, PECompact 等 . 加密殼 加密殼和類多 ,一些加密殼單純保護(hù)程序 ,另一些殼還提供額外的功能 .側(cè)重于軟件的保護(hù) , 使軟件不容易被分析 , 反匯編 . 常見的加密殼有 :ASProtect,Armadillo,EXECryptor,Themida 等 脫殼技術(shù) 任何事物都有兩面 性 ,有加殼 ,就必有脫殼 .加殼與脫殼有著緊密的聯(lián)系 .一些脫殼技術(shù)是針對加殼而產(chǎn)生的 ,脫殼的進(jìn)步 ,又迫使加殼軟件不斷創(chuàng)新發(fā)展 . 脫殼一般分手動和自動兩種,手動就是用 TRW20 TR、 SOFTICE 等調(diào)試工具對付,對脫殼者有一定水平要求,涉及到很多匯編語言和 軟件調(diào)試 方面的知識。而自動就是用專門的脫殼 工具來脫,最常用某種 壓縮軟件 都有他人寫的反壓縮工具對應(yīng),有些壓縮工具自身能解壓,如 UPX;有些不提供這功能,如: ASPACK,就需要 UNASPACK 對付,好處是簡單,缺點(diǎn)是版本更新了就沒用了。另外脫殼就是用專門的脫殼工具來對付,最流行的是 PROCDUMP ,可對付目前各種 壓縮軟件 的壓 縮檔。知道文件的加密方式,就可以使用不同的工具、不同的方法進(jìn)行脫殼。 7 4 PE 文件結(jié)構(gòu) 簡介 PE文件被稱為可移植的執(zhí)行體是 Portable Execute 的全稱,常見的 EXE、 DLL、 OCX、SYS、 COM 都是 PE 文件, PE 文件是 微軟 Windows 操作系統(tǒng) 上的 程序文件 (可能是間接被執(zhí)行,如 DLL) 認(rèn)識可執(zhí)行文件的結(jié)構(gòu)非常重要,在 DOS 下是這樣,在 Windows 系統(tǒng)下更是如此。了解了這種結(jié)構(gòu)后就可以對可執(zhí)行程序進(jìn)行加密、加殼和修改等,一些黑客也利用了這些技術(shù)。對于一切的加殼脫殼 ,都是對 PE文件進(jìn)行加殼脫殼。所以了解 PE文件對加殼及脫殼是必不可少的。 PE 文件結(jié)構(gòu)布局 PE文件的數(shù)據(jù)結(jié)構(gòu)在磁盤中和內(nèi)存中一樣這個是它的最大特點(diǎn)。加載一個可執(zhí)行文件到內(nèi)存主要是把 PE 文件中的某個部分映 射到地址空間中。那么不僅要問編寫好的代碼怎樣變成了可執(zhí)行文件,這個過程就是編譯器的主要工作,它將其編譯稱為目標(biāo)文件 OBJ,這樣連接器就將 OBJ 文件和涉及到的庫文件以及資源文件連接起來,生成最后的 EXE 文件保存在磁盤中,當(dāng)我們運(yùn)行其文件時 Windows 加載器就負(fù)責(zé)把 EXE 文件按照 PE 文件格式映射到內(nèi)存的線性地址空間,最終表現(xiàn)為一個進(jìn)程。當(dāng)然這只是一個簡單的介紹,這里面還涉及到操作系統(tǒng)的很多內(nèi)容,這里我們關(guān)系與 PE文件格式相關(guān)的內(nèi)容有:相對虛擬地址、導(dǎo)入表、重定位表等內(nèi)容。 8 (圖 ) 重 要的 PE 結(jié)構(gòu) 輸入表 輸入表是 PE 文件結(jié)構(gòu)中不可或缺的部分,輸入表也稱之為“導(dǎo)入表” 。 要想了解輸入表,首先還得先從 DLL 文件入手。日常生活中我們會看見一些大型軟件有很多的 DLL格式的文件,它們是“ 動態(tài)鏈接庫文件 ”,這些文件中有很多的導(dǎo)入函數(shù),這些函數(shù)不會直接被執(zhí)行,當(dāng)一個程序( EXE)運(yùn)行時,導(dǎo)入函數(shù)是被程序調(diào)用執(zhí)行的,其執(zhí)行的代碼 9 是不在主程序( EXE)中的一小部分函數(shù),其真正的代碼卻在 DLL 文件中。這時我們就會想,那么 EXE 主程序是如何找到這些需要導(dǎo)入的函數(shù)呢,這就要?dú)w結(jié)于“輸入表”了,輸入表就相當(dāng)于 EXE 文件與 DLL 文件溝通的鑰匙,形象的可以比喻成兩個城市之間交流的高速公路,所有的導(dǎo)入函數(shù)信息都會寫入輸入表中,在 PE 文件映射到內(nèi)存后, windows將相應(yīng)的 DLL 文件裝入, EXE 文件通過“輸入表”找到相應(yīng)的 DLL 中的導(dǎo)入函數(shù),從而完成程序的正常運(yùn)行,這一動態(tài)連接的過程都是由“輸入表”參與的。 輸入表的結(jié)構(gòu):輸入表是以一個 IMAGE_IMPORT_DESCRIPTOR(IID)數(shù)組開始,一個程 序 要調(diào)用幾個 dll 就會有幾個 IID 項(xiàng),即每個 IID 對應(yīng)于一個 dll IID 結(jié)構(gòu): IMAGE_IMPORT_DESCRIPTOR struct union{ DWORD Characteristics 。 。00h DWORD originalFirstThunk。 }。 TimeDateStamp DWORD 。04h ForwarderChain DWORD 。08h Name DWORD 。0Ch FirstThunk DWORD 。10h IMAGE_IMPORT_DESCRIPTOR ends 當(dāng) pe 文件被裝載 器裝入之后, OriginalFirstThunk 還指向原來的數(shù)組( INT 輸入名字表: Import Name Table), 而 FirstThunk 則用調(diào)用的輸入函數(shù)在內(nèi)存的虛擬地址來代替表中的內(nèi)容,即指向的是一張指向輸入函數(shù)地址的表,稱為: IAT(輸入地址表: Import Address Table) IMAGE_THUNK_DATA 結(jié)構(gòu): typedef struct IMAGE_THUNK_DATA{ union{ PBYTE ForwarderString。 //當(dāng)該結(jié)構(gòu)雙字最高位為 1 時,表示函數(shù)以序號方式輸入,此時雙字低位為函數(shù)序號 PDWORD Function。 10 //當(dāng)最高位為 0時,表示函數(shù)以字符串類型的函數(shù)名方式輸入,此時整個雙字的值是 DWORD ordinal。 //一個 RVA,指向一個 MAGE_IMPORT_BY_NAME 結(jié)構(gòu)(如下定義) PIMAGE_IMPORT_BY_NAME AddressOfData。 // }ul。 } IMAGE_IMPORT_BY_NAME 結(jié)構(gòu): MAGE_IMPORT_BY_NAME STRUCT Hint WORD ? //指示本函數(shù)在所駐留 dll 中的輸出表中的序號(不是必須的) Name BYTE ? //含有輸入函數(shù)的函數(shù)名,一個 ASCII 碼字符串,以 NULL 結(jié)尾(可變尺寸 ) MAGE_IMPORT_BY_NAME ENDS 輸入表的結(jié)構(gòu)如下圖所示 (圖 ) 11 輸出表 當(dāng) PE 文件被執(zhí)行的時候, windows 裝載器將文件裝入內(nèi)存并將 輸入表 中登記的 DLL 文件一并裝入,再根據(jù) DLL 文件中的函數(shù)輸出信息對被執(zhí)行文件的 IAT 表進(jìn)行修正。在這些包含輸出函數(shù)的 DLL 文件中,輸出信息被保存在輸出表中,通過輸出表, DLL 文件向系統(tǒng)提供輸出函數(shù)的名 稱,序號和入口地址等信息。以便 windows 裝載器通過這些信息來完成 動態(tài)鏈接 的過程。一般來說, exe 文件不存在輸出表, DLL 文件大部分都包含輸出表,不過這不是絕對的。 一個 Windows 程序,它所實(shí)現(xiàn)的所有功能最終幾乎都是調(diào)用系統(tǒng) DLL 提供的 API 函數(shù)。通過我先前文章手寫的 Hello World 程序可以看出,要使用任何一個 DLL 所提供的函數(shù),我們需要將它導(dǎo)入,也就是用到了導(dǎo)入表。然而對于那些提供了被導(dǎo)出 的函數(shù)的 DLL 程序來說,他們必須使用導(dǎo)出表將函數(shù)導(dǎo)出,之后別的程序才可以使用。無論是系統(tǒng)提供的標(biāo)準(zhǔn) DLL 還是個人編寫的 DLL,只要想提供自己的函數(shù)給別人使用就必須建立導(dǎo)出表。一般使用任何開發(fā)環(huán)境編寫具有導(dǎo)出功能的程序,導(dǎo)出表都是由鏈接器自動建立的。程序員只需指定被導(dǎo)出的函數(shù)名稱或序號即可。 以下是輸出表的定義: typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics。 DWORD TimeDateStamp。 WORD MajorVersion。 WORD MinorVersion。 DWORD Name。 DWORD Base。 DWORD NumberOfFunctions。 DWORD NumberOfNames。 DWORD AddressOfFunctions。 // RVA from base of image DWORD AddressOfNames。 // RVA from base of image DWORD AddressOfNameOrdinals。 // RVA from base of image } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY。 12 第一個成員( Characteristics)是個 DWORD 類型,占四個字節(jié)。通常該值為零。 第二個成員( TimeDateStamp) DWORD 類型,表示輸出表創(chuàng)建的時間,該時間是自 1970年 1 月 1 日至今的秒數(shù)。這個值通常不會影響程序執(zhí)行,可以是
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1