一種動態(tài)鏈接庫文件加密、解密方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及軟件處理技術(shù)領(lǐng)域,更具體地說,涉及一種動態(tài)鏈接庫文件加密、解密方法及裝置。
【背景技術(shù)】
[0002]動態(tài)鏈接庫文件是一個包含可由多個程序同時使用的代碼的庫,是不可執(zhí)行文件。在安卓和Linux平臺上,開發(fā)者使用C/C++語言編寫源代碼,并通過編譯器編譯成動態(tài)鏈接庫文件。動態(tài)鏈接庫文件中的代碼按照節(jié)區(qū)進行存儲,具有固定的格式。
[0003]為了保護開發(fā)者的源碼和設(shè)計思路不被惡意竊取,需要對動態(tài)鏈接庫文件進行加密處理,增加動態(tài)鏈接庫文件反編譯的難度。傳統(tǒng)的加密方法一般是對整個動態(tài)鏈接庫文件進行加殼處理,程序運行時先運行殼,然后通過殼運行加載原庫文件。但是,現(xiàn)有的加密方式僅能夠?qū)φ麄€庫文件進行加殼,無法對用戶指定的庫文件中的部分代碼字段進行加密,不能夠滿足用戶多樣化的加密需求。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本申請?zhí)峁┝艘环N動態(tài)鏈接庫文件加密、解密方法及裝置,用于解決現(xiàn)有加密方式單一、不能夠滿足用戶多樣化加密需求的問題。
[0005]為了實現(xiàn)上述目的,現(xiàn)提出的方案如下:
[0006]—種動態(tài)鏈接庫文件加密方法,包括:
[0007]接收待處理的動態(tài)鏈接庫文件,以及用戶指定的所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中待加密代碼的起止位置;
[0008]依據(jù)所述起止位置,在所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,并利用預(yù)置的加密算法對查找到的待加密代碼進行加密,得到加密代碼;
[0009]在所述動態(tài)鏈接庫文件中添加目標節(jié)區(qū),在所述目標節(jié)區(qū)中存儲所述加密代碼的起止位置以及與所述加密算法對應(yīng)的解密算法,并隱藏所述目標節(jié)區(qū);
[0010]在所述動態(tài)鏈接庫文件的初始化節(jié)區(qū)中添加一個指向所述目標節(jié)區(qū)的指針,以供動態(tài)鏈接庫文件初始化過程中,通過該指針執(zhí)行目標節(jié)區(qū)的解密算法,對所述加密代碼進行解密。
[0011 ] 優(yōu)選地,所述加密算法包括DES數(shù)據(jù)加密算法或RSA加密算法。
[0012]一種動態(tài)鏈接庫文件解殼方法,針對上述的動態(tài)鏈接庫文件加密方法所提供的加密后的動態(tài)鏈接庫文件進行解密,解密方法包括:
[0013]接收動態(tài)鏈接庫文件;
[0014]在所述動態(tài)鏈接庫文件的初始化節(jié)區(qū)中遍歷到指向所述目標節(jié)區(qū)的指針時,利用所述目標節(jié)區(qū)中存儲的所述起止位置,在代碼節(jié)區(qū)查找對應(yīng)的加密代碼;
[0015]利用所述目標節(jié)區(qū)存儲的解密算法對查找到的加密代碼進行解密。
[0016]—種動態(tài)鏈接庫文件加殼裝置,包括:
[0017]待加密文件接收單元,用于接收待處理的動態(tài)鏈接庫文件,以及用戶指定的所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中待加密代碼的起止位置;
[0018]代碼加密單元,用于依據(jù)所述起止位置,在所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,并利用預(yù)置的加密算法對查找到的待加密代碼進行加密,得到加密代碼;
[0019]解密算法存儲單元,用于在所述動態(tài)鏈接庫文件中添加目標節(jié)區(qū),在所述目標節(jié)區(qū)中存儲所述加密代碼的起止位置以及與所述加密算法對應(yīng)的解密算法,并隱藏所述目標節(jié)區(qū);
[0020]指針添加單元,用于在所述動態(tài)鏈接庫文件的初始化節(jié)區(qū)中添加一個指向所述目標節(jié)區(qū)的指針,以供動態(tài)鏈接庫文件初始化過程中,通過該指針執(zhí)行目標節(jié)區(qū)的解密算法,對所述加密代碼進行解密。
[0021 ] 優(yōu)選地,所述代碼加密單元所使用的加密算法包括DES數(shù)據(jù)加密算法或RSA加密算法。
[0022]—種動態(tài)鏈接庫文件解密裝置,針對上述的動態(tài)鏈接庫文件加密裝置所提供的加密后的動態(tài)鏈接庫文件進行解密,解密裝置包括:
[0023]待解密文件接收單元,用于接收動態(tài)鏈接庫文件;
[0024]加密代碼查找單元,用于在所述動態(tài)鏈接庫文件的初始化節(jié)區(qū)中遍歷到指向所述目標節(jié)區(qū)的指針時,利用所述目標節(jié)區(qū)中存儲的所述起止位置,在代碼節(jié)區(qū)查找對應(yīng)的加密代碼;
[0025]代碼解密單元,用于利用所述目標節(jié)區(qū)存儲的解密算法對查找到的加密代碼進行解密。
[0026]從上述的技術(shù)方案可以看出,本申請實施例提供的動態(tài)鏈接庫文件加殼方法,在接收到待處理的動態(tài)鏈接庫文件,以及用戶指定的所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中待加密代碼的起止位置時,依據(jù)起止位置,在動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,并利用預(yù)置的加密算法對查找到的待加密代碼進行加密,得到加密代碼,同時在動態(tài)鏈接庫文件中添加目標節(jié)區(qū),在目標節(jié)區(qū)中存儲加密代碼的起止位置以及與加密算法對應(yīng)的解密算法,并隱藏目標節(jié)區(qū),進一步在動態(tài)鏈接庫文件的初始化節(jié)區(qū)中添加一個指向目標節(jié)區(qū)的指針,以供動態(tài)鏈接庫文件初始化過程中,通過該指針執(zhí)行目標節(jié)區(qū)的解密算法,對加密代碼進行解密。本申請?zhí)峁┑募用芊椒?,能夠?qū)τ脩糁付ǖ拇a字段進行加密,加密方式更加多樣化,并且通過隱藏解密算法所在的目標節(jié)區(qū),增加了動態(tài)鏈接庫文件反編譯的難度,只有當動態(tài)鏈接庫文件加載到內(nèi)存后在進行初始化時,才能夠通過初始化節(jié)區(qū)的指針找到解密算法,實現(xiàn)加密代碼的解密。
【附圖說明】
[0027]為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0028]圖1為本申請實施例公開的一種動態(tài)鏈接庫文件加密方法流程圖;
[0029]圖2為本申請實施例公開的一種動態(tài)鏈接庫文件解密方法流程圖;
[0030]圖3為本申請實施例公開的一種動態(tài)鏈接庫文件加密裝置結(jié)構(gòu)示意圖;
[0031]圖4為本申請實施例公開的一種動態(tài)鏈接庫文件解密裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0032]下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0033]參見圖1,圖1為本申請實施例公開的一種動態(tài)鏈接庫文件加密方法流程圖。
[0034]如圖1所示,該方法包括:
[0035]步驟S100、接收待處理的動態(tài)鏈接庫文件,以及用戶指定的所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中待加密代碼的起止位置;
[0036]具體地,動態(tài)鏈接庫文件的代碼節(jié)區(qū)中存儲了源代碼數(shù)據(jù)。用戶可以指定代碼節(jié)區(qū)中需要進行加密的代碼。具體指定方式可以是指定待加密代碼的起始位置與終止位置,例如待加密代碼的位置為:從第i行至第j行。
[0037]步驟S110、依據(jù)所述起止位置,在所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,并利用預(yù)置的加密算法對查找到的待加密代碼進行加密,得到加密代碼;
[0038]本申請通過用戶指定的待加密代碼的起止位置,在動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,進一步利用預(yù)置的加密算法對查找到的待加密代碼進行加密處理,得到加密代碼。
[0039]其中,加密算法可以是DES數(shù)據(jù)加密算法或RSA加密算法。其中,DES為DataEncrypt1n Algorithm的縮寫,是一種對稱加密算法。RSA加密算法是一種非對稱加密算法。
[0040]本步驟中,針對動態(tài)鏈接庫文件的代碼節(jié)區(qū)中,用戶指定部分的代碼進行加密操作,其余的用戶未指定的代碼字段不進行加密處理,實現(xiàn)了多樣化加密的目的。
[0041]步驟S120、在所述動態(tài)鏈接庫文件中添加目標節(jié)區(qū),在所述目標節(jié)區(qū)中存儲所述加密代碼的起止位置以及與所述加密算法對應(yīng)的解密算法,并隱藏所述目標節(jié)區(qū);
[0042]具體地,本步驟中首先在動態(tài)鏈接庫文件中添加一個新的節(jié)區(qū),定義為目標節(jié)區(qū)。在新創(chuàng)建的目標節(jié)區(qū)中存儲加密代碼的起止位置,以及與加密算法對應(yīng)的解密算法,進一步將目標節(jié)區(qū)進行隱藏。
[0043]步驟S130、在所述動態(tài)鏈接庫文件的初始化節(jié)區(qū)中添加一個指向所述目標節(jié)區(qū)的指針。
[0044]具體地,動態(tài)鏈接庫文件的初始化節(jié)區(qū)中存儲有多個指針,各指針分別指向?qū)?yīng)的節(jié)區(qū)。動態(tài)鏈接庫文件的初始化過程即為遍歷各個指針,執(zhí)行指針對應(yīng)節(jié)區(qū)的代碼的過程。本步驟中,在初始化節(jié)區(qū)中添加了一個指向目標節(jié)區(qū)的指針,從而在后續(xù)動態(tài)鏈接庫文件初始化過程中,通過該指針執(zhí)行目標節(jié)區(qū)的解密算法,對加密的代碼進行解密。
[0045]本申請實施例提供的動態(tài)鏈接庫文件加殼方法,在接收到待處理的動態(tài)鏈接庫文件,以及用戶指定的所述動態(tài)鏈接庫文件的代碼節(jié)區(qū)中待加密代碼的起止位置時,依據(jù)起止位置,在動態(tài)鏈接庫文件的代碼節(jié)區(qū)中查找待加密代碼,并利用預(yù)置的加密算法對查找到的待加密代碼進行加密,得到加密代碼,同時在動態(tài)鏈接庫文件中添加目標節(jié)區(qū),在目標節(jié)區(qū)中存儲加密代碼的起止位置以及與加密算法對應(yīng)的解密算法,并隱藏目標節(jié)區(qū),進一步在動態(tài)鏈接庫文件的初始化節(jié)區(qū)中添加一個指向目標節(jié)區(qū)的指針,以供動態(tài)鏈接庫文件初始化過程中,通過該指針執(zhí)行目標節(jié)區(qū)的解密算法,對加密代碼進行解密。本申請?zhí)峁┑募用芊椒ǎ軌驅(qū)τ脩糁付ǖ拇a字段進行加密,加密方式更加多樣化,并且通過隱藏解密算法所在的目標節(jié)區(qū),增加了動態(tài)鏈接庫文件反編譯的難度,只有當動態(tài)鏈接庫文件加載到內(nèi)存后在進行初始化時,才能夠通過初始化節(jié)區(qū)的指針找到解密算法,實現(xiàn)加密代碼的解密。
[0046]上述實施例中介紹了動態(tài)鏈接庫文件的加密處理過程,接下來,本實施例中介紹對上述加密處理后的動態(tài)鏈接庫文件