欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種針對Android平臺SDK包的加固方法與流程

文檔序號:11199801閱讀:2324來源:國知局
一種針對Android平臺SDK包的加固方法與流程

本發(fā)明屬于信息安全技術領域,涉及一種針對androidjar(javaarchive)sdk(softwaredevelopmentkit)包的安全加固方法,能夠防止sdk被破解、逆向分析及盜版。



背景技術:

隨著移動設備的普及,android系統(tǒng)憑借其開源的優(yōu)勢,得到了國內(nèi)外諸多開發(fā)者的支持。為了方便開發(fā)者開發(fā)基于android平臺的應用,google公司提供了sdk包。sdk又名軟件開發(fā)工具包。除了google提供用于開發(fā)android應用的sdk包外,還存在第三方sdk包。第三方sdk包用于實現(xiàn)包括廣告、支付、統(tǒng)計、地圖等類別服務,是廣告商、支付公司、社交、地圖服務商等第三方服務公司為了便于應用開發(fā)人員使用其提供的服務而開發(fā)的工具包。sdk包封裝了一些復雜的邏輯實現(xiàn)以及請求,響應解析的api。

sdk包需對sdk包的應用者提供某項服務,在這個簡單的運用場景中卻存在很多安全問題。如sdk包被攻擊者反編譯后查看源碼,sdk包被攻擊者篡改后二次打包等。這些安全隱患都與sdk包的源碼可讀性與可見性有著密切的關系。

sdk包基于java語言開發(fā)。使用java語言封裝的jar包作為一種字節(jié)碼文件很容易被如jd-gui的反編譯工具,反編譯后得到源碼。為了防止攻擊者對公開的sdk進行源碼分析和二次打包,需要對sdk包進行加固。sdk包的加固需要涉及sdk代碼加密,sdk庫文件加密,sdk防篡改保護,sdk防調試及dump保護。sdk代碼加密(混淆),是對sdk源碼中的變量名稱和函數(shù)名稱修改為無實際含義的字符串,用于防止在攻擊者反編譯得到源碼后讀取源碼的業(yè)務邏輯。sdk防篡改保護,通過增加簽名機制,防止攻擊者將惡意篡改后的sdk包被使用。sdk防調試,防止攻擊者使用如od,ida等分析工具,動態(tài)調試sdk包。dump保護是在對sdk包運行在內(nèi)存中后防止被攻擊者獲取字節(jié)碼的一種保護方式。

sdk用于開發(fā)者二次開發(fā)使用,因此在對sdk中的接口進行混淆時,需要考慮到在調用時依舊使用初始接口名稱。

當前市面上對于android系統(tǒng)軟件安全的保護大多集中于apk加固,很少有人能實現(xiàn)對于sdk包的加固。由于對android應用的開發(fā)數(shù)量遠高于對androidsdk包的開發(fā)數(shù)量,因此對于apk加固的需求量遠大于對于sdk包的加固。一個sdk包可能被多個android應用使用,因此對于sdk包的安全威脅波及范圍更廣。



技術實現(xiàn)要素:

為了克服上述現(xiàn)有技術的不足,本發(fā)明提供一種對于sdk包的加固方法,包括sdk代碼加密(混淆)、sdk庫文件加密、sdk防篡改保護、sdk防調試及dump保護,使得加固后的sdk包難以被破解,逆向分析及盜版,達到保護版權或防止對軟件進行惡意篡改的目的。另外,需保證加固后的sdk包源代碼可以正常被調用,不影響程序的正常執(zhí)行。

本發(fā)明提供的技術方案如下:

一種針對android平臺sdk包的加固方法,所述加固方法包括對sdk代碼加密過程、對sdk庫文件加密過程、sdk防篡改保護過程、sdk防調試過程和dump保護過程,具體包括如下步驟:

a.對sdk代碼進行加密(混淆):

a1.分析原始提供的sdk文件,可獲取sdk包字節(jié)碼格式;

a2.分析不可修改字段:根據(jù)sdk包字節(jié)碼格式,分析得到字節(jié)碼文件中不可被混淆的變量名稱和方法名稱;

a3.更改變量名稱及方法名稱:對修改后不影響sdk包使用的、可被混淆的變量名稱和方法名稱進行修改;

b.對sdk庫文件加密:

b1.分析原始sdk包中的庫文件;

b2.對sdk包中的庫文件進行加密,可以使用自定義的加密算法或者公開的通用加密算法實施加密操作,得到制作好的sdk包;

c.sdk防篡改保護,執(zhí)行如下操作:

c1.對步驟b中制作好的sdk包進行簽名;

c2.將簽名好的sdk包與hash摘要、簽名公鑰一同發(fā)布;

d.sdk防調試:

d1.分析常用調試工具的調試特性,如od(ollydbg)、idapro等調試工具;

d2.根據(jù)調試工具的調試特性,在sdk的源代碼中添加現(xiàn)有的反調試代碼,使得在sdk源碼被調試時停止sdk所在的進程,由此防止調試工具調試;

e.dump保護過程,執(zhí)行如下操作:

e1.分析確定進程加載過程的模塊列表用來讀取進程的內(nèi)存的函數(shù);

e2.對e1中所確定的函數(shù)進行檢測和攔截,禁止所述函數(shù)對所保護的字節(jié)碼進行訪問。

步驟e2可通過創(chuàng)建程序來實現(xiàn)。對于e2中所述的方法,函數(shù)攔截可以通過找到原始函數(shù)在內(nèi)存中運行的位置,在內(nèi)存層修改函數(shù)執(zhí)行流程,達到函數(shù)攔截的目的。

與現(xiàn)有技術相比,本發(fā)明的有益效果是:

本發(fā)明提供一種針對android平臺sdk包的加固方法,包括對sdk代碼加密過程、對sdk庫文件加密過程、sdk防篡改保護過程、sdk防調試過程和dump保護過程,同時保證加固后的sdk包源代碼可以正常被調用,不影響程序的正常執(zhí)行。利用本發(fā)明提供的技術方案,可以有效地隱藏sdk包的邏輯代碼,使得加固后的sdk包難以被破解,逆向分析及盜版,從而對sdk包程序進行版權保護,防止其被逆向,篡改,二次打包。

附圖說明

圖1是本發(fā)明實施例中對sdk代碼加密的流程框圖。

圖2是本發(fā)明實施例中對sdk庫文件加密的流程框圖。

圖3是本發(fā)明實施例中sdk防篡改保護的流程框圖。

圖4是本發(fā)明實施例中sdk防調試的流程框圖。

圖5是本發(fā)明實施例中dump保護的流程框圖。

圖6是本發(fā)明提供加固模塊的整體流程框圖;

其中,(a)為sdk加固涉及的模塊;(b)為(a)中加固模塊對應的主要方法。

具體實施方式

下面結合附圖,通過實施例進一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。

本發(fā)明提供一種對于sdk包的加固方法,包括對sdk代碼加密過程、對sdk庫文件加密過程、sdk防篡改保護過程、sdk防調試過程和dump保護過程,使得加固后的sdk包難以被破解,逆向分析及盜版,達到保護版權或防止對軟件進行惡意篡改的目的。另外,需保證加固后的sdk包源代碼可以正常被調用,不影響程序的正常執(zhí)行。

以下實施例將未加固的sdk包作為輸入,利用本發(fā)明提供的加固方法,首先對sdk的字節(jié)碼格式進行分析,將修改后不影響sdk包運行的函數(shù)名稱或變量名稱進行修改,替換為加密后的字節(jié)碼;然后在sdk包加入可以預防反調試工具的代碼;再對sdk包進行簽名,并將sdk簽名包的hash摘要發(fā)布;最后輸出為加固后的sdk包。圖6是本發(fā)明提供加固方法的整體流程框圖,本實例的具體實施方式如下:

a.在對sdk代碼加密時,按如下步驟進行(如圖1所示):

a1.字節(jié)碼格式分析:分析待加固的sdk包,了解打包后sdk包的字節(jié)碼格式;

a2.不可修改字段分析:根據(jù)a1中分析的字節(jié)碼格式,結合java底層運行原理,分析不可被混淆的變量名稱和方法名稱。由于sdk包需對外開放api接口,因此對外提供的接口名稱不可做混淆;

a3.更改變量名稱及方法名稱:根據(jù)a2中的分析結果,對修改后不影響sdk包正常使用的變量名稱或方法名稱進行修改。

b.在對sdk進行解密操作時,可執(zhí)行如下流程(如圖2所示):

b1.加載加密后的字節(jié)碼文件;

b2.加載解密算法;

b3.使用解密算法解密字節(jié);

b4.生成解密后可運行的字節(jié)碼文件。

c.在sdk防篡改保護時,可執(zhí)行如下流程(如圖3所示):

c1.獲得使用過hash算法a處理后的sdk包;

c2.使用hash算法計算c1中sdk包的hash編碼;

c3.將c2中產(chǎn)生的hash編碼使用私鑰加密,生成hash表摘要;

c4.將c1中的簽名成功的sdk包,c3中產(chǎn)生的加密的hash表摘要和與c3中匹配的公鑰發(fā)布;

c5.使用者在運用c4的發(fā)布的sdk包時,首先將發(fā)布內(nèi)容解析為sdk包源碼、hash表摘要、公鑰;

c6.使用hash算法a(與c1中相同)對c5中sdk包源碼做運算,獲取到hash表1,根據(jù)c5中的hash表摘要、公鑰得到hash表2;

c7.對比hash表1和hash表2內(nèi)容是否一致;

c8.c7中對比結果一致表示sdk源碼未被修改,否則表示被修改。

d.完成sdk防調試,可執(zhí)行如下流程(如圖4所示):

d1.了解od,ida等工具調試特性;

d2.根據(jù)d1中分析的特性,在源碼中添加反調試代碼(如監(jiān)測是否有新的進程附加到當前進程),防止調試工具調試。

e.dump保護,可按如下流程操作(如圖5所示):

e1.分析進程加載的模塊列表通常要使用哪些函數(shù)來讀取進程的內(nèi)存。

e2.創(chuàng)建驅動程序,利用驅動在內(nèi)核模式下攔截這些函數(shù)并禁止,函數(shù)攔截可以通過找到原始函數(shù)在內(nèi)存中運行的位置,在內(nèi)存層修改函數(shù)執(zhí)行流程,達到函數(shù)攔截的目的。

需要注意的是,公布實施例的目的在于幫助進一步理解本發(fā)明,但是本領域的技術人員可以理解:在不脫離本發(fā)明及所附權利要求的精神和范圍內(nèi),各種替換和修改都是可能的。因此,本發(fā)明不應局限于實施例所公開的內(nèi)容,本發(fā)明要求保護的范圍以權利要求書界定的范圍為準。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
咸丰县| 呼和浩特市| 敦化市| 安泽县| 丰城市| 万宁市| 青阳县| 香河县| 高雄市| 蓬安县| 通山县| 台安县| 长葛市| 昭通市| 汉中市| 弥勒县| 延长县| 太和县| 富裕县| 专栏| 和静县| 苏尼特右旗| 潍坊市| 南宫市| 建水县| 芦山县| 库尔勒市| 儋州市| 新余市| 晴隆县| 尼勒克县| 华池县| 怀来县| 新巴尔虎右旗| 柞水县| 新沂市| 边坝县| 高阳县| 民乐县| 泾源县| 比如县|