本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種帶殼軟件脫殼的方法及裝置。
背景技術(shù):
軟件加殼是一種常用的軟件保護(hù)技術(shù),首先對(duì)軟件的原始程序進(jìn)行加密或者以某種形式隱藏原始程序入口,之后在軟件中加入一個(gè)預(yù)啟動(dòng)程序,即殼程序。當(dāng)軟件開始運(yùn)行時(shí),首先運(yùn)行的是殼程序,殼程序?qū)υ汲绦蜻M(jìn)行解密或獲得原始程序入口,之后將運(yùn)行權(quán)交給原始程序,此時(shí),原始程序開始運(yùn)行,而殼程序運(yùn)行結(jié)束。軟件加殼技術(shù)可以有效的對(duì)原始軟件進(jìn)行保護(hù),是一種通用的,效果較好的軟件保護(hù)方法。
相比于普通軟件開發(fā)者,很多病毒、木馬程序的開發(fā)者更加傾向于使用加殼技術(shù)保護(hù)自己的惡意軟件,從而在較長的時(shí)間內(nèi)達(dá)到非法目的。對(duì)于加殼保護(hù)的惡意軟件,惡意代碼檢測系統(tǒng)往往只能檢測到殼程序的代碼,無法檢測到原始程序中被隱藏的惡意代碼,而殼程序中一般不含有惡意代碼,因此軟件加殼也成為了繞過軟件安全檢測的途徑。
目前,現(xiàn)有的脫殼方案一般是對(duì)某種殼程序的邏輯進(jìn)行破解,或通過動(dòng)態(tài)調(diào)試,跟蹤殼程序的運(yùn)行流程,跟蹤到殼程序運(yùn)行之后,從系統(tǒng)內(nèi)存中獲取開始運(yùn)行的原始程序。
然而,現(xiàn)有的脫殼方案一般具有極強(qiáng)的針對(duì)性,每種殼程序的加殼方法、運(yùn)行流程、采用的算法都存在差異。因此每種脫殼方法可能只對(duì)一種殼或一種殼的某個(gè)版本有效,通用性較差。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種帶殼軟件脫殼的方法及裝置,其目的是為了解決現(xiàn)有的軟件脫殼方案具有極強(qiáng)的針對(duì)性,而通用性較差的問題。
為了達(dá)到上述目的,本發(fā)明的實(shí)施例提供了一種帶殼軟件脫殼的方法,該方法包括:
在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;
通過加載接口獲取存儲(chǔ)信息;
根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
優(yōu)選地,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件之前,該方法還包括:
獲取原始的脫殼系統(tǒng)的源代碼;
在源代碼中增加一獲取指令,獲取指令用于將脫殼系統(tǒng)的加載接口配置具有獲取內(nèi)存地址并讀取內(nèi)存的功能;
對(duì)增加獲取指令的源代碼進(jìn)行編譯,得到編譯后的脫殼系統(tǒng)的系統(tǒng)文件,并運(yùn)行脫殼系統(tǒng)。
優(yōu)選地,通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息,包括:
若帶殼軟件的原始程序只有一次加密過程,則將帶殼軟件的原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;或
若帶殼軟件的原始程序被分段加密,則將帶殼軟件的原始程序的明文數(shù)據(jù)分段存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息以及分段數(shù)據(jù),分段數(shù)據(jù)至少包括帶殼軟件的原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳。
優(yōu)選地,根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),包括:
若帶殼軟件的原始程序只有一次加密過程,則根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),或使脫殼系統(tǒng)根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),并從脫殼系統(tǒng)中讀取帶殼軟件的原始程序的明文數(shù)據(jù);或
若帶殼軟件的原始程序被分段加密,則根據(jù)分段信息、時(shí)間戳以及存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù),并對(duì)每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù)進(jìn)行匯總,得到待脫殼軟件的原始程序的明文數(shù)據(jù)并存儲(chǔ)。
優(yōu)選地,通過加載接口獲取存儲(chǔ)信息,包括:
通過加載接口將存儲(chǔ)信息寫入文件或者實(shí)時(shí)輸出。
為了實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種帶殼軟件脫殼的裝置,該裝置包括:
存儲(chǔ)模塊,用于在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;
獲取模塊,用于通過加載接口獲取存儲(chǔ)信息;
數(shù)據(jù)讀取模塊,用于根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
優(yōu)選地,該裝置還包括:
編譯模塊,用于存儲(chǔ)模塊在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件之前,
獲取原始的脫殼系統(tǒng)的源代碼;
在源代碼中增加一獲取指令,獲取指令用于將脫殼系統(tǒng)的加載接口配置具有獲取內(nèi)存地址并讀取內(nèi)存的功能;
對(duì)增加獲取指令的源代碼進(jìn)行編譯,得到編譯后的脫殼系統(tǒng)的系統(tǒng)文件,并運(yùn)行脫殼系統(tǒng)。
優(yōu)選地,存儲(chǔ)模塊包括:
第一存儲(chǔ)子模塊,用于若帶殼軟件的原始程序只有一次加密過程時(shí),將帶殼軟件的原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;
第二存儲(chǔ)子模塊,用于若帶殼軟件的原始程序被分段加密時(shí),將帶殼軟件的原始程序的明文數(shù)據(jù)分段存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息以及分段數(shù)據(jù),分段數(shù)據(jù)至少包括帶殼軟件的原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳。
優(yōu)選地,數(shù)據(jù)讀取模塊包括:
第一讀取子模塊,用于若帶殼軟件的原始程序只有一次加密過程時(shí),根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),或使脫殼系統(tǒng)根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),并從脫殼系統(tǒng)中讀取帶殼軟件的原始程序的明文數(shù)據(jù);
第二讀取子模塊,用于若帶殼軟件的原始程序被分段加密時(shí),根據(jù)分段信息、時(shí)間戳以及存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù),并對(duì)每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù)進(jìn)行匯總,得到待脫殼軟件的原始程序的明文數(shù)據(jù)并存儲(chǔ)。
優(yōu)選地,獲取模塊用于:
通過加載接口將存儲(chǔ)信息寫入文件或者實(shí)時(shí)輸出。
本發(fā)明的上述方案至少包括以下有益效果:
本發(fā)明提供的帶殼軟件脫殼方法及裝置,直接通過加載接口獲取明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息并讀取原始程序文件的明文數(shù)據(jù),無需對(duì)每種殼程序進(jìn)行邏輯分析或者流程追蹤,脫殼效率較高;且本發(fā)明通過加載接口進(jìn)行軟件脫殼,可適用于相同接口的系統(tǒng)進(jìn)行多種帶殼軟件的脫殼,包括被分段加密的帶殼軟件,具有較強(qiáng)的通用性。
附圖說明
圖1為本發(fā)明的第一實(shí)施例提供的帶殼軟件脫殼的方法的基本步驟流程圖;
圖2為本發(fā)明的第二實(shí)施例提供的帶殼軟件脫殼的方法的基本步驟流程圖;
圖3為本發(fā)明的第三實(shí)施例提供的帶殼軟件脫殼的方法的基本步驟流程圖;
圖4為本發(fā)明的第四實(shí)施例提供的帶殼軟件脫殼的方法的基本步驟流程圖;
圖5為本發(fā)明的第五實(shí)施例提供的帶殼軟件脫殼的方法裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。
第一實(shí)施例
參見圖1,本發(fā)明的第一實(shí)施例提供了一種帶殼軟件脫殼的方法,該方法包括:
步驟101,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息。
其中,加載接口用于將原始程序的明文數(shù)據(jù)存儲(chǔ)至系統(tǒng)內(nèi)存中,并記錄相應(yīng)的存儲(chǔ)信息(內(nèi)存中的起始地址、占用內(nèi)存大小等信息)。通常情況下,帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存時(shí)都需經(jīng)過加載接口來實(shí)現(xiàn),因此,加載接口可有效地記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息。
步驟102,通過加載接口獲取存儲(chǔ)信息。
其中,通過加載接口獲取存儲(chǔ)信息,也就是使加載接口提供它所記錄的通過加載接口獲取存儲(chǔ)信息。
步驟103,根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
其中,根據(jù)加載接口獲取的存儲(chǔ)信息,直接從內(nèi)存中讀取原始程序的明文數(shù)據(jù)。
通常情況下,殼程序?qū)υ汲绦蜃龅奶幚矸桨父鞑幌嗤?,但所有的殼程序都只是在原始程序之前運(yùn)行的一段程序,殼程序最終都要調(diào)用原始程序,并保證原始程序正常運(yùn)行。
殼程序的一般流程是,找到加密壓縮后的原始程序包(此時(shí)的原始程序以文件形式存在),對(duì)其進(jìn)行解密解壓縮等操作,殼程序通過加載接口將原始程序文件的明文數(shù)據(jù)載入系統(tǒng)內(nèi)存,之后系統(tǒng)開始運(yùn)行原始程序;然而,開發(fā)者難以不通過殼程序而直接從系統(tǒng)內(nèi)存中獲得原始程序的明文數(shù)據(jù)。
因此,本發(fā)明的實(shí)施例中,為了解決上述問題,直接通過加載接口獲取明 文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息并讀取原始程序文件的明文數(shù)據(jù),無需對(duì)每種殼程序進(jìn)行邏輯分析或者流程追蹤,脫殼效率較高;且本發(fā)明通過加載接口進(jìn)行軟件脫殼,可適用于相同接口的系統(tǒng)進(jìn)行多種帶殼軟件的脫殼,具有較強(qiáng)的通用性。
本發(fā)明的上述實(shí)施例中,步驟102包括:
通過加載接口將存儲(chǔ)信息寫入文件或者實(shí)時(shí)輸出。
其中,可加載接口將明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息寫入特定的文件或者實(shí)時(shí)輸出,用于軟件脫殼。
第二實(shí)施例
參見圖2,本發(fā)明的第二實(shí)施例提供了一種帶殼軟件脫殼的方法,該方法包括:
步驟201,獲取原始的脫殼系統(tǒng)的源代碼。
其中,源碼即編寫原始的脫殼系統(tǒng)的計(jì)算機(jī)語言。
步驟202,在源代碼中增加一獲取指令,獲取指令用于將脫殼系統(tǒng)的加載接口配置具有獲取內(nèi)存地址并讀取內(nèi)存的功能。
通常情況下,加載接口只用于將原始程序的明文數(shù)據(jù)存儲(chǔ)至系統(tǒng)內(nèi)存中,而本發(fā)明的實(shí)施例中,通過在在源代碼中增加獲取指令,使加載接口在執(zhí)行原有功能的過程中,同時(shí)執(zhí)行獲取內(nèi)存地址并讀取內(nèi)存的功能,以便于脫殼系統(tǒng)得到相應(yīng)的內(nèi)存地址。
步驟203,對(duì)增加獲取指令的源代碼進(jìn)行編譯,得到編譯后的脫殼系統(tǒng)的系統(tǒng)文件,并運(yùn)行脫殼系統(tǒng)。
其中,源代碼進(jìn)行編譯后才能得到系統(tǒng)文件并運(yùn)行。
通常情況下,對(duì)源代碼進(jìn)行編譯得到的是系統(tǒng)鏡像文件(比如安卓系統(tǒng)),將系統(tǒng)鏡像文件安裝到硬件環(huán)境或者虛擬機(jī)上,便可正常運(yùn)行脫殼系統(tǒng)。
步驟204,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息。
步驟205,通過加載接口獲取存儲(chǔ)信息,
步驟206,根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù) 據(jù)。
本發(fā)明的上述實(shí)施例中,通過對(duì)脫殼系統(tǒng)的源代碼進(jìn)行修改,增加獲取指令,使加載接口具有獲取內(nèi)存地址并讀取內(nèi)存的功能,可直接在系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),無需對(duì)每種殼程序進(jìn)行邏輯分析或者流程追蹤,脫殼效率較高。
第三實(shí)施例
參見圖3,本發(fā)明的第三實(shí)施例提供了一種帶殼軟件脫殼的方法,該方法包括:
步驟301,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),若帶殼軟件的原始程序只有一次加密過程,則將帶殼軟件的原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息。
其中,若帶殼軟件的原始程序只有一次加密過程,則將原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至系統(tǒng)內(nèi)存中,并記錄一次存儲(chǔ)信息即可。
步驟302,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),若帶殼軟件的原始程序被分段加密,則將帶殼軟件的原始程序的明文數(shù)據(jù)分段存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息以及分段數(shù)據(jù),分段數(shù)據(jù)至少包括帶殼軟件的原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳。
其中,時(shí)間戳通常是一個(gè)字符序列,用于唯一地標(biāo)識(shí)某一刻的時(shí)間。
其中,若帶殼軟件的原始程序被分段加密,則明文數(shù)據(jù)可能在不同時(shí)段分別被載入系統(tǒng)內(nèi)存中,也就是說,存儲(chǔ)過程也分段進(jìn)行,并且需記錄分段信息以及時(shí)間戳,以便脫殼系統(tǒng)對(duì)被分段的明文數(shù)據(jù)進(jìn)行整合。
步驟303,通過加載接口獲取存儲(chǔ)信息;
步驟304,根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
本發(fā)明的上述實(shí)施例中,對(duì)一次性加密的帶殼軟件進(jìn)行一次性存儲(chǔ)至系統(tǒng)內(nèi)存;對(duì)分段加密的帶殼程序進(jìn)行分段存儲(chǔ),并記錄原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳,以便于對(duì)被分段的明文數(shù)據(jù)進(jìn)行整合;本發(fā)明通過對(duì)一次性加密的帶殼軟件以及分段加密的帶殼程序采用不同的處理 流程,具有較強(qiáng)的通用性。
第四實(shí)施例
參見圖4,本發(fā)明的第四實(shí)施例提供了一種帶殼軟件脫殼的方法,該方法包括:
步驟401,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),若帶殼軟件的原始程序只有一次加密過程,則將帶殼軟件的原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息。
步驟402,在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),若帶殼軟件的原始程序被分段加密,則將帶殼軟件的原始程序的明文數(shù)據(jù)分段存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息以及分段數(shù)據(jù),分段數(shù)據(jù)至少包括帶殼軟件的原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳。
步驟403,通過加載接口獲取存儲(chǔ)信息。
步驟404,若帶殼軟件的原始程序只有一次加密過程,則根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),或使脫殼系統(tǒng)根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),并從脫殼系統(tǒng)中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
其中,對(duì)于一次性加密的帶殼軟件,可直接從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù);或者待脫殼系統(tǒng)讀取之后,對(duì)系統(tǒng)的讀取結(jié)果進(jìn)行攔截(從脫殼系統(tǒng)中讀取帶殼軟件的原始程序的明文數(shù)據(jù))。
步驟405,若帶殼軟件的原始程序被分段加密,則根據(jù)分段信息、時(shí)間戳以及存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù),并對(duì)每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù)進(jìn)行匯總,得到待脫殼軟件的原始程序的明文數(shù)據(jù)并存儲(chǔ)。
其中,對(duì)于分段加密的帶殼軟件,需根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取每個(gè)分段對(duì)應(yīng)的明文數(shù),并根據(jù)分段信息、時(shí)間戳對(duì)每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù)進(jìn)行匯總,以得到完整的明文數(shù)據(jù)并存儲(chǔ)。
本發(fā)明的上述實(shí)施例中,通過對(duì)一次性加密的帶殼軟件進(jìn)行一次性讀取;對(duì)分段加密的帶殼程序進(jìn)行分段讀取并依據(jù)分段信息以及時(shí)間戳進(jìn)行匯總,最終得到完整的明文數(shù)據(jù),具有較強(qiáng)的通用性。
第五實(shí)施例
參見圖5,本發(fā)明的第五實(shí)施例提供了一種帶殼軟件脫殼的裝置,該裝置包括:
存儲(chǔ)模塊501,用于在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件時(shí),通過脫殼系統(tǒng)的加載接口將帶殼軟件的原始程序的明文數(shù)據(jù)存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;
獲取模塊502,用于通過加載接口獲取存儲(chǔ)信息;
數(shù)據(jù)讀取模塊503,用于根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù)。
本發(fā)明的上述實(shí)施例中,直接通過加載接口獲取明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息并讀取原始程序文件的明文數(shù)據(jù),無需對(duì)每種殼程序進(jìn)行邏輯分析或者流程追蹤,脫殼效率較高;且本發(fā)明通過加載接口進(jìn)行軟件脫殼,可適用于相同接口的系統(tǒng)進(jìn)行多種帶殼軟件的脫殼,具有較強(qiáng)的通用性。
優(yōu)選地,該裝置還包括:
編譯模塊,用于存儲(chǔ)模塊501在脫殼系統(tǒng)上運(yùn)行待脫殼的帶殼軟件之前,
獲取原始的脫殼系統(tǒng)的源代碼;
在源代碼中增加一獲取指令,獲取指令用于將脫殼系統(tǒng)的加載接口配置具有獲取內(nèi)存地址并讀取內(nèi)存的功能;
對(duì)增加獲取指令的源代碼進(jìn)行編譯,得到編譯后的脫殼系統(tǒng)的系統(tǒng)文件,并運(yùn)行脫殼系統(tǒng)。
優(yōu)選地,存儲(chǔ)模塊501包括:
第一存儲(chǔ)子模塊,用于若帶殼軟件的原始程序只有一次加密過程時(shí),將帶殼軟件的原始程序的明文數(shù)據(jù)一次性存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息;
第二存儲(chǔ)子模塊,用于若帶殼軟件的原始程序被分段加密時(shí),將帶殼軟件的原始程序的明文數(shù)據(jù)分段存儲(chǔ)至脫殼系統(tǒng)的系統(tǒng)內(nèi)存中,并記錄明文數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)存中的存儲(chǔ)信息以及分段數(shù)據(jù),分段數(shù)據(jù)至少包括帶殼軟件的原始程序的分段信息以及每個(gè)分段存儲(chǔ)至系統(tǒng)內(nèi)存的時(shí)間戳。
優(yōu)選地,數(shù)據(jù)讀取模塊503包括:
第一讀取子模塊,用于若帶殼軟件的原始程序只有一次加密過程時(shí),根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),或使脫殼系統(tǒng)根據(jù)存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取帶殼軟件的原始程序的明文數(shù)據(jù),并從脫殼系統(tǒng)中讀取帶殼軟件的原始程序的明文數(shù)據(jù);
第二讀取子模塊,用于若帶殼軟件的原始程序被分段加密時(shí),根據(jù)分段信息、時(shí)間戳以及存儲(chǔ)信息從系統(tǒng)內(nèi)存中讀取每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù),并對(duì)每個(gè)分段對(duì)應(yīng)的明文數(shù)據(jù)進(jìn)行匯總,得到待脫殼軟件的原始程序的明文數(shù)據(jù)并存儲(chǔ)。
優(yōu)選地,獲取模塊502用于:
通過加載接口將存儲(chǔ)信息寫入文件或者實(shí)時(shí)輸出。
需要說明的是,本發(fā)明實(shí)施例提供的帶殼軟件脫殼的裝置是應(yīng)用上述方法的裝置,即上述方法的所有實(shí)施例均適用于該裝置,且均能達(dá)到相同或相似的有益效果。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。