麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種針對(duì)Android平臺(tái)SDK包的加固方法與流程

文檔序號(hào):11199801閱讀:2365來(lái)源:國(guó)知局
一種針對(duì)Android平臺(tái)SDK包的加固方法與流程

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



背景技術(shù):

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

sdk包需對(duì)sdk包的應(yīng)用者提供某項(xiàng)服務(wù),在這個(gè)簡(jiǎn)單的運(yùn)用場(chǎng)景中卻存在很多安全問(wèn)題。如sdk包被攻擊者反編譯后查看源碼,sdk包被攻擊者篡改后二次打包等。這些安全隱患都與sdk包的源碼可讀性與可見(jiàn)性有著密切的關(guān)系。

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

sdk用于開(kāi)發(fā)者二次開(kāi)發(fā)使用,因此在對(duì)sdk中的接口進(jìn)行混淆時(shí),需要考慮到在調(diào)用時(shí)依舊使用初始接口名稱。

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



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

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

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

一種針對(duì)android平臺(tái)sdk包的加固方法,所述加固方法包括對(duì)sdk代碼加密過(guò)程、對(duì)sdk庫(kù)文件加密過(guò)程、sdk防篡改保護(hù)過(guò)程、sdk防調(diào)試過(guò)程和dump保護(hù)過(guò)程,具體包括如下步驟:

a.對(duì)sdk代碼進(jìn)行加密(混淆):

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

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

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

b.對(duì)sdk庫(kù)文件加密:

b1.分析原始sdk包中的庫(kù)文件;

b2.對(duì)sdk包中的庫(kù)文件進(jìn)行加密,可以使用自定義的加密算法或者公開(kāi)的通用加密算法實(shí)施加密操作,得到制作好的sdk包;

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

c1.對(duì)步驟b中制作好的sdk包進(jìn)行簽名;

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

d.sdk防調(diào)試:

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

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

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

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

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

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

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

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

附圖說(shuō)明

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

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

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

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

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

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

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

具體實(shí)施方式

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

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

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

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

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

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

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

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

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

b2.加載解密算法;

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

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

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

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

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

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

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

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

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

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

c8.c7中對(duì)比結(jié)果一致表示sdk源碼未被修改,否則表示被修改。

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

d1.了解od,ida等工具調(diào)試特性;

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

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

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

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

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

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
主站蜘蛛池模板: 娄底市| 若羌县| 新津县| 灵台县| 温泉县| 始兴县| 镇江市| 河北省| 武陟县| 庆阳市| 延庆县| 新余市| 盐亭县| 屯门区| 永泰县| 金堂县| 温宿县| 莫力| 安图县| 德昌县| 贵南县| 奉新县| 利川市| 绿春县| 隆德县| 张家界市| 重庆市| 平山县| 温宿县| 丽江市| 甘谷县| 葵青区| 温泉县| 瓮安县| 弥渡县| 潞西市| 京山县| 九江市| 徐闻县| 枣庄市| 肇源县|