一種加固SDK項目的方法及系統與流程
2023-06-20 10:14:51
本發明涉及安全技術領域,尤其涉及一種加固sdk項目的方法及系統。
背景技術:
sdk(sfotwaredevelopkit)是一種軟體開發工具包,由sdk開發者開發完成,發布到開發者平臺上,供第三方軟體開發者集成。由於sdk發布後,任意第三方軟體開發者均可以下載該sdk的jar包,並將該jar包集成進自身軟體中。目前市面上絕大多數的sdk對應的jar包僅僅只是對代碼進行了混淆,可以通過反編譯工具進行反編譯,很容易讀懂sdk中的代碼邏輯,不法分子則可以通過反編譯進行代碼篡改,輸入竊取用戶信息、注入廣告等惡意代碼,並二次打包編譯。sdk項目的安全性堪憂。
技術實現要素:
本發明所要解決的技術問題是:如何提高sdk項目的安全性。
為了解決上述技術問題,本發明採用的技術方案為:
本發明提供一種加固sdk項目的方法,包括:
s1、根據原始sdk項目生成原始dex文件;
s2、加密所述dex文件,得到dex加密文件;
s3、新建sdk項目,得到新建的sdk項目;
s4、在所述新建的sdk項目中創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;
s5、打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目。
本發明還提供一種加固sdk項目的系統,包括:
第一生成模塊,用於根據原始sdk項目生成原始dex文件;
加密模塊,用於加密所述dex文件,得到dex加密文件;
新建模塊,用於新建sdk項目,得到新建的sdk項目;
第二生成模塊,用於在所述新建的sdk項目中創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;
打包模塊,用於打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目。
本發明的有益效果在於:由於加密會破壞文件結構,若未用相應的解密邏輯進行解密,相當於一個破損的文件,無法用工具還原成對應的jar包,因此,通過將原始sdk項目轉換成dex加密文件,極大程度上增加了sdk項目的代碼安全性;此外,新建sdk項目中包含可調用原始sdk項目核心代碼的接口類,只將新建sdk項目中的接口類暴露給外部系統,外部系統通過調用新建sdk項目中的接口類達到調用原始sdk項目核心代碼的目的,使得即使破解了新建sdk項目,也無法獲取原始sdk項目中的核心代碼,提高了sdk項目的安全性。
附圖說明
圖1為本發明提供一種加固sdk項目的方法的具體實施方式的流程框圖;
圖2為本發明提供一種加固sdk項目的系統的具體實施方式的系統框圖;
標號說明:
1、第一生成模塊;2、加密模塊;3、新建模塊;4、第二生成模塊;5、打包模塊;6、創建模塊;7、加載模塊;8、解密模塊;9、設置模塊;10、混淆模塊;11、第三生成模塊。
具體實施方式
為詳細說明本發明的技術內容、所實現目的及效果,以下結合實施方式並配合附圖予以說明。
如圖1所示,本發明提供一種加固sdk項目的方法,包括:
s1、根據原始sdk項目生成原始dex文件;
s2、加密所述dex文件,得到dex加密文件;
s3、新建sdk項目,得到新建的sdk項目;
s4、在所述新建的sdk項目中創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;
s5、打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目。
進一步地,所述s2之後,還包括:
根據md5算法生成與所述dex加密文件對應的md5值。
由上述描述可知,通過md5值可在jni中驗證dex加密文件是否被篡改。
進一步地,創建與所述dex加密文件中的核心代碼對應的接口類之前,還包括:
調用預設的java本地接口驗證所述md5值,若所述md5值未通過驗證,則標記所述dex加密文件被篡改;否則解密所述dex加密文件,得到dex解密文件;
創建類加載器;
所述類加載器加載所述dex解密文件。
由上述描述可知,由於c++的反編譯難度較高,反編譯後的邏輯可讀性也較差,因此通過jni(java本地接口)解密dex加密文件,提高了解密邏輯的破解難度,從而提高了sdk項目的安全性。
進一步地,還包括:
設置所述接口類中的函數名稱為所述核心代碼中對應函數的名稱。
進一步地,所述s1之前,還包括:
混淆所述原始sdk項目中的代碼。
由上述描述可知,有利於提高sdk項目被反編譯的難度,從而提高sdk項目的安全性。
本發明還提供一種加固sdk項目的系統,包括:
第一生成模塊1,用於根據原始sdk項目生成原始dex文件;
加密模塊2,用於加密所述dex文件,得到dex加密文件;
新建模塊3,用於新建sdk項目,得到新建的sdk項目;
第二生成模塊4,用於在所述新建的sdk項目中創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;
打包模塊5,用於打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目。
進一步地,還包括:
第三生成模塊11,用於根據md5算法生成與所述dex加密文件對應的md5值。
進一步地,還包括:
解密模塊8,用於調用預設的java本地接口驗證所述md5值,若所述md5值未通過驗證,則標記所述dex加密文件被篡改;否則解密所述dex加密文件,得到dex解密文件;
創建模塊6,用於創建類加載器;
加載模塊7,用於所述類加載器加載所述dex解密文件。
進一步地,還包括:
設置模塊9,用於設置所述接口類中的函數名稱為所述核心代碼中對應函數的名稱。
進一步地,還包括:
混淆模塊10,用於混淆所述原始sdk項目中的代碼。
本發明的實施例一為:
s1、混淆所述原始sdk項目中的代碼,得到混淆的sdk項目;
其中,使用java的混淆工具proguard進行代碼混淆,proguard是一個壓縮、優化和混淆java字節碼文件的免費的工具,它可以刪除無用的類、欄位、方法和屬性。可以刪除沒用的注釋,最大限度地優化字節碼文件。它還可以使用簡短的無意義的名稱來重命名已經存在的類、欄位、方法和屬性。常常用於android開發,用於混淆最終的項目,增加項目被反編譯的難度。
其中,不混淆的代碼包括:暴露的接口類、組件類(如activity組件和service組件)和自定義控制項view。
s2、根據所述混淆的sdk項目生成原始dex文件;
其中,先打包混淆的sdk項目,得到對應的jar包;再通過androidsdkbuild-tools中的dx.bat工具將jar包轉成dex文件。
s3、加密所述dex文件,得到dex加密文件;
其中,將加密後的dex文件放入到目標應用項目的assets文件夾下。
s4、根據md5算法生成與所述dex加密文件對應的md5值;
s5、在新建sdk項目中,調用預設的java本地接口驗證所述md5值,若所述md5值未通過驗證,則標記所述dex加密文件被篡改;否則解密所述dex加密文件,得到dex解密文件;創建類加載器;所述類加載器加載所述dex解密文件;根據所述dex解密文件,創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;設置所述接口類中的函數名稱為所述核心代碼中對應函數的名稱;
其中,調用新建的類加載器dexclassloader的loadclass函數加載原始sdk項目中的接口類,並重新實現該接口類中的函數,重新實現的函數可反射調用原始sdk項目中對應的函數。
s6、打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目;
其中,打包新建sdk項目得到對應的jar包,將該jar包、jni(java本地接口)的so文件、dex加密文件和集成文檔一起提供給第三方開發者。
本發明的實施例二為:
混淆模塊10混淆所述原始sdk項目中的代碼;第一生成模塊1根據原始sdk項目生成原始dex文件;加密模塊2加密所述dex文件,得到dex加密文件;第三生成模塊11根據md5算法生成與所述dex加密文件對應的md5值;創建模塊6創建類加載器;解密模塊8調用預設的java本地接口驗證所述md5值,若所述md5值未通過驗證,則標記所述dex加密文件被篡改;否則解密所述dex加密文件,得到dex解密文件;加載模塊7所述類加載器加載所述dex解密文件;新建模塊3新建sdk項目,得到新建的sdk項目;第二生成模塊4在所述新建的sdk項目中創建與所述dex加密文件中的核心代碼對應的接口類;所述接口類可反射調用所述dex加密文件中的核心代碼;設置模塊9設置所述接口類中的函數名稱為所述核心代碼中對應函數的名稱;打包模塊5打包所述新建的sdk項目和所述dex加密文件,得到加固的sdk項目。
綜上所述,本發明提供的一種加固sdk項目的方法及系統,通過將原始sdk項目轉換成dex加密文件,極大程度上增加了sdk項目的代碼安全性;此外,新建sdk項目中包含可調用原始sdk項目核心代碼的接口類,只將新建sdk項目中的接口類暴露給外部系統,使得即使破解了新建sdk項目,也無法獲取原始sdk項目中的核心代碼,提高了sdk項目的安全性。進一步地,通過jni(java本地接口)解密dex加密文件,提高了解密邏輯的破解難度,從而提高了sdk項目的安全性。進一步地,通過混淆原始sdk項目中的代碼既能優化加密dex文件的包體大小,又有利於提高sdk項目被反編譯的難度,從而提高sdk項目的安全性。
以上所述僅為本發明的實施例,並非因此限制本發明的專利範圍,凡是利用本發明說明書及附圖內容所作的等同變換,或直接或間接運用在相關的技術領域,均同理包括在本發明的專利保護範圍內。