一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法、裝置和系統(tǒng),屬于軟件應(yīng)用領(lǐng)域。
【背景技術(shù)】
[0002]傳統(tǒng)的基于Windows平臺開發(fā)的軟件,在發(fā)布前往往需要先對程序進行加殼處理。加殼的全稱是可執(zhí)行程序資源壓縮,即利用特殊的算法,對EXE、DLL等文件里的數(shù)據(jù)進行壓縮、加密處理,并且把解壓算、解密算法作為程序的殼附加到被保護的程序中。加殼后的程序執(zhí)行時,殼先于原程序得到控制權(quán),對原始程序解密、還原,之再把控制權(quán)交還給原程序,執(zhí)行原程序的代碼部分。經(jīng)加殼后的軟件可以獨立運行,但不能直接查看其源代碼,可以有效保護軟件不被非法修改或反編譯,因此被廣泛用來保護軟件版權(quán),防止軟件免遭破解。
[0003]在軟件調(diào)試領(lǐng)域,通常使用轉(zhuǎn)存文件模擬錯誤發(fā)生時的程序狀態(tài)。轉(zhuǎn)存文件是進程的內(nèi)存鏡像。可以把程序的執(zhí)行狀態(tài)通過調(diào)試器保存到轉(zhuǎn)存文件中。用戶在使用軟件時,一旦出現(xiàn)系統(tǒng)異?;蛘弑罎ⅲ到y(tǒng)就自動會生成轉(zhuǎn)存文件,供軟件測試人員調(diào)試。但經(jīng)加殼后的軟件崩潰后,生成的轉(zhuǎn)存文件經(jīng)過了改寫,無法在調(diào)試錯誤時直接定位到出錯的代碼位置。這就給軟件檢錯工作帶來了極大的不便。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)存在的上述問題,本發(fā)明提供了一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法、裝置和系統(tǒng)的技術(shù)方案,以便解決加殼后的軟件生成的轉(zhuǎn)存文件無法用于調(diào)試的技術(shù)問題。
[0005]基于本發(fā)明的一個方面,提供一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法,包括以下步驟: 步驟S10,獲取原可執(zhí)行文件;
步驟S20,提取所述原可執(zhí)行文件中表示映像大小和校驗和的值;
步驟S30,獲取加殼后可執(zhí)行文件生成的原轉(zhuǎn)存文件;
步驟S40,根據(jù)提取的所述表示映像大小和校驗和的對應(yīng)值替換所述轉(zhuǎn)存文件的對應(yīng)值;
步驟S50,保存修改后的轉(zhuǎn)存文件。
[0006]優(yōu)選地,步驟S20和S30之間包括:
步驟S21,提取所述原可執(zhí)行文件的文件名;
步驟S30和S40之間還包括:
步驟S31,查找所述轉(zhuǎn)存文件中表示所述加殼后可執(zhí)行文件的文件名的位置;
步驟S32,用所述原可執(zhí)行文件的文件名替換所述加殼后可執(zhí)行文件的文件名。
[0007]優(yōu)選地,步驟S31包括以下子步驟:
步驟S311,讀取原轉(zhuǎn)存文件;
步驟S312,以遍歷每個流的方式,查找加殼后可執(zhí)行文件的文件名的位置。
[0008]優(yōu)選地,所述轉(zhuǎn)存文件為Windows系統(tǒng)平臺定義的dump文件。
[0009]優(yōu)選地,所述加殼方式為通過Themida軟件實施的加殼處理。
[0010]基于本發(fā)明的另一個方面,提供了一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換裝置,包括:
可執(zhí)行文件獲取模塊,用于獲取原可執(zhí)行文件;
指定值提取模塊,用于提取所述原可執(zhí)行文件中表示映像大小和校驗和的值;
轉(zhuǎn)存文件獲取模塊,用于獲取加殼后可執(zhí)行文件生成的原轉(zhuǎn)存文件;
替換模塊,用于根據(jù)提取的所述表示映像大小和校驗和的對應(yīng)值替換所述轉(zhuǎn)存文件的對應(yīng)值;
轉(zhuǎn)存文件保存模塊,用于保存修改后的轉(zhuǎn)存文件。
[0011]基于本發(fā)明的第三個方面,提供了一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換系統(tǒng),包括: 存儲器,用于存儲應(yīng)用程序;
處理器,執(zhí)行所述應(yīng)用程序以用于實施以下步驟:
獲取原可執(zhí)行文件;
提取所述原可執(zhí)行文件中表示映像大小和校驗和的值;
獲取加殼后可執(zhí)行文件生成的原轉(zhuǎn)存文件;
根據(jù)提取的所述表示映像大小和校驗和的對應(yīng)值替換所述轉(zhuǎn)存文件的對應(yīng)值;
保存修改后的轉(zhuǎn)存文件。
[0012]本發(fā)明的有益效果:通過對加殼后的軟件生成的轉(zhuǎn)存文件一鍵式的轉(zhuǎn)換,簡化了調(diào)試步驟,可以在保護軟件的同時,也可以收集用戶報告的軟件崩潰信息,進行調(diào)試。大大降低了調(diào)試的難度,方便開發(fā)人員進行查找bug。本發(fā)明利于未加殼的原可執(zhí)行文件,對上述轉(zhuǎn)存文件進行轉(zhuǎn)換,相對于一般的脫殼技術(shù),操作簡單正確率高,避免了脫殼失敗的風(fēng)險。
【附圖說明】
[0013]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細(xì)描述。
[0014]圖1所示為直接使用加殼軟件生成的轉(zhuǎn)存文件進行調(diào)試的圖像;
圖2所示為根據(jù)本發(fā)明第一實施例的一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法的示意圖;
圖3所示為根據(jù)本發(fā)明第一實施例的一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法的流程圖;
圖4所示為根據(jù)本發(fā)明第二實施例的一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法的詳細(xì)流程圖;
圖5所示為根據(jù)本發(fā)明第三實施例的一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換系統(tǒng)的示意圖。
【具體實施方式】
[0015]為了便于調(diào)試,軟件常常設(shè)定為在發(fā)生異常時,將內(nèi)存中的程序鏡像轉(zhuǎn)存為非易失性存儲器上的轉(zhuǎn)存文件,以便開發(fā)測試人員調(diào)試。例如Windows系統(tǒng)平臺定義了用戶態(tài)轉(zhuǎn)出文件的格式(即轉(zhuǎn)存文件,例如dump文件),并提供了 API來創(chuàng)建和讀取用戶態(tài)文件。原可執(zhí)行文件被配置為在出現(xiàn)異?;蛘弑罎r,調(diào)用MS DbgHelp.dll的API接口MinidumpWritedump從而生成記錄了程序的執(zhí)行狀態(tài)的dump文件。
[0016]在軟件開發(fā)測試工作中,軟件開發(fā)人員將含有可執(zhí)行文件的軟件分發(fā)給用戶或者測試人員使用。用戶或者測試人員在使用軟件的過程中遇到異常,軟件將自動生成包含了錯誤發(fā)生時的軟件狀態(tài)轉(zhuǎn)存文件(例如dump文件)供開發(fā)者分析調(diào)試。當(dāng)可執(zhí)行文件未經(jīng)過加殼處理時,開發(fā)者只需將dump文件與軟件的可執(zhí)行文件和編譯軟件工程時生成的PCB文件放在同一文件夾內(nèi),即可使用軟件開發(fā)工具進行調(diào)試;當(dāng)可執(zhí)行文件經(jīng)過加殼處理時,由于dump文件內(nèi)的部分?jǐn)?shù)值發(fā)生了改變,在調(diào)試時軟件開發(fā)工具將無法正常打開dump文件。以經(jīng)過常見的加殼軟件Themida加殼為例,參考圖1,加殼軟件生成的dump文件在調(diào)試時顯示為匯編代碼,可讀性差,無法調(diào)試。
[0017]參考圖2-3,根據(jù)本發(fā)明的第一實施例的一種加殼軟件轉(zhuǎn)存文件的轉(zhuǎn)換方法,利用轉(zhuǎn)換系統(tǒng),將讀取原可執(zhí)行文件(即加殼前的可執(zhí)行文件)中表示映像大小和校驗和的值,將上述值覆寫在的加殼后可執(zhí)行文件生成的原轉(zhuǎn)存文件(以dump文件為例,即原dump文件)對應(yīng)值上,經(jīng)過修改后的dump文件可以直接用于對原軟件進行調(diào)試,操作方法與未經(jīng)過加殼處理時相同,大大降低了調(diào)試的難度,方便開發(fā)人員進行查找bug。其【具體實施方式】包括以下步驟:首先用二進制的方式將未經(jīng)過加殼處理的原可執(zhí)行文件讀入內(nèi)存,獲取指定位置的表示映像大小和校驗和的字段,記錄其對應(yīng)值。然后讀取原dump文件的文件頭到MINIDUMP_HEADER pMdpHeader,dump文件的模塊信息如下(參考MSDN):
typedef struct _MINIDUMP_MODULE {
UL0NG64 BaseOfImage;
UL0NG32 SizeOfImage;
UL0NG32 Checksum;
UL0NG32 TimeDateSta