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

基于動態(tài)恢復so文件的Android應用加固方法與流程

文檔序號:11156075閱讀:569來源:國知局
本發(fā)明涉及信息安全
技術領域
:,尤其涉及一種針對動態(tài)恢復Android系統(tǒng)應用程序動態(tài)鏈接庫so文件的Android應用加固方法。
背景技術
::2007年,Google公司推出了開源智能手機操作系統(tǒng)安卓(Android)操作系統(tǒng),由于其豐富的功能和強大的定制能力,在短短幾年內它便躍居為智能手機操作系統(tǒng)市場份額的首位。與此同時,基于Android平臺的應用程序數(shù)目飛速增長。2013年7月,Google公司宣布在GooglePlay商店上架的應用程序超過一百萬,GooglePlay商店成為全球最大的應用商店。隨著Android系統(tǒng)的興起,諸多潛在的安全問題逐漸暴露出來,信息泄露、惡意扣費、系統(tǒng)被破壞的事件屢見不鮮。Android安全性的研究也開始受到人們的關注。因為Android平臺應用軟件使用的語言是Java,傳統(tǒng)的Java語言編寫的程序很容易遭到逆向破解,導致Android應用程序其破解難度遠小于其他使用編譯性語言編寫的程序。由此得知,Android系統(tǒng)在應用加固方面所面臨的主要問題是應用二次打包和惡意代碼插入。應用二次打包技術使得盜版應用大量普及,大大損害了開發(fā)者的利益和積極性,而惡意代碼的植入使得Android用戶面臨隱私數(shù)據(jù)的泄漏和財產(chǎn)損失的風險。Android應用的黑色產(chǎn)業(yè)鏈正是因此產(chǎn)生,通過二次打包植入廣告降低用戶的體驗獲取利潤,又或者插入惡意代碼綁定設備上的私密數(shù)據(jù)進行敲詐勒索。目前,Android應用加固多數(shù)情況還執(zhí)著于靜態(tài)處理dex文件,也就是對dex文件進行一些細微修改來提升攻擊的難度。這一類加固方法增加了可代碼的閱讀難度,但實質上并沒有起到多少防護效果。這是因為Android平臺誕生時間較短,軟件保護方面的研究尚處于起步階段,難以保護應用開發(fā)者的軟件著作權與利益和廣大用戶的隱私安全。技術實現(xiàn)要素:為了克服上述現(xiàn)有技術的不足,本發(fā)明提供一種針對動態(tài)恢復Android系統(tǒng)應用程序動態(tài)鏈接庫so文件的Android應用加固方法,該方法基于Android系統(tǒng)利用二進制流加密方法進行加固,對so文件中的關鍵代碼進行加密,以達到保護Android應用程序的目的。本發(fā)明提供的技術方案是:一種基于動態(tài)恢復so文件的Android應用加固方法,針對動態(tài)恢復Android系統(tǒng)應用程序動態(tài)鏈接庫so文件,通過二進制流加密方法對so文件中的關鍵方法(關鍵代碼)進行加固,使得Android應用程序代碼得到保護;所述加固方法包括加密過程和解密過程,具體包括如下步驟:A.針對需要保護的Android應用程序的so文件,具體設定需要加密的特定節(jié)的關鍵方法,對關鍵代碼所在的節(jié)(section)進行加密,執(zhí)行如下操作:A1.首先對需要保護的Android應用程序解壓,獲得Android應用程序中的so文件,對所述so文件進行解析;A2.讀取elf文件頭,根據(jù)e_shoff定位到節(jié)區(qū)頭部表;A3.根據(jù)elf文件頭中的e_shnum得到節(jié)區(qū)數(shù)量;A4.根據(jù)e_shoff和e_shnum讀取節(jié)區(qū)頭部表中的所有項;A5.通過elf文件頭中的e_shstrndx項得到節(jié)表字符串表在節(jié)表中的索引,然后找到節(jié)表字符串表的偏移;A6.讀取節(jié)表字符串表中的字符串將每一個節(jié)的名字保存起來;A7.比較每一個節(jié)的名字和自定義節(jié)的名字,如果匹配則通過shdr->sh_offest和shdr->sh_zie得到目標節(jié)的內容,并保存到content中;A8.設定密鑰key1,使用密鑰key1對步驟A7所述content進行第一次加密,得到第一次加密后的中間數(shù)據(jù);A9.設定密鑰key2,使用密鑰key2對步驟A8所述中間數(shù)據(jù)進行第二次加密;A10.將二次加密后得到數(shù)據(jù)更新到so文件中,得到新的so文件;A11.壓縮重新生成apk,即完成加密過程;所述重新生成的apk中包含原有的dex文件以及包含解密過程中需要用的密鑰和第二次加密后的得到的數(shù)據(jù)so文件;B.開始執(zhí)行Android應用程序時,對加密的so文件進行動態(tài)恢復得到關鍵代碼,執(zhí)行如下操作:B1.Android應用程序被載入內存后,執(zhí)行so文件中.init_array段中的程序;B2.在內存中找到so文件在進程中的地址;B3.在so文件中查找待解密節(jié)的地址;B4.得到待解密節(jié)占用的頁的大小,修改占用頁的讀寫權限;B5.執(zhí)行關鍵代碼時,從so文件中取得密鑰key2,對待解密節(jié)進行解密,得到中間代碼;B6.針對步驟B5得到的中間代碼,從so文件中取得密鑰key1,進行第二次解密,得到最終的關鍵代碼;B7.進行關鍵代碼的方法調用。上述Android系統(tǒng)的應用程序的so文件加固方法,進一步地,所述設定節(jié)的關鍵代碼的方法,具體包括重要算法方法、驗證登陸方法、系統(tǒng)關鍵流程方法中的一個或多個。上述Android系統(tǒng)的應用程序的so文件加固方法,進一步地,步驟A8所述第一次加密或步驟A9所述第二次加密均可采用AES加密方法,所述AES加密方法包括采用使用AES通用加密標準的代碼或使用AES的加密工具,可采用自編寫的AES或現(xiàn)有的AES加密工具。上述Android系統(tǒng)的應用程序的so文件加固方法,進一步地,步驟B1所述執(zhí)行so文件中的程序,具體為通過JNI調用機制調用so文件中的方法。與現(xiàn)有技術相比,本發(fā)明的有益效果是:現(xiàn)有Android應用加固多數(shù)情況還執(zhí)著于靜態(tài)處理dex文件,也就是對dex文件進行一些細微修改來提升攻擊的難度。這一類加固方法不過是增加可代碼的閱讀難度,但實質上并沒有其多少防護效果。利用本發(fā)明提供的技術方案,可以動態(tài)地解密so文件,將Android保護的方向由dex文件轉移到了so文件。本發(fā)明提供的加固方法對關鍵函數(shù)進行雙層加密保護,并增加了攻擊者逆向分析的難度,攻擊者無法拿到程序的核心代碼,修改的程序也不能正常運行,可以實現(xiàn)對代碼的完整性進行保護,有效地抵抗了靜態(tài)分析,防止so文件的代碼被篡改和劫持,并使得黑客不能通過反編譯等工具查看Android源碼,而且只對關鍵代碼進行加密保護,保證了程序的運行效率。附圖說明圖1是本發(fā)明提供方法的流程框圖。圖2是Android應用程序中的so文件的文件組成結構圖。具體實施方式下面結合附圖,通過實施例進一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。本發(fā)明提供一種針對動態(tài)恢復Android系統(tǒng)應用程序動態(tài)鏈接庫so文件的加固方法,針對動態(tài)恢復Android系統(tǒng)應用程序動態(tài)鏈接庫so文件,通過二進制流加密方法對so文件中的關鍵代碼進行加固,使得Android應用程序代碼得到保護;本發(fā)明提供的加固方法包括加密過程和解密過程,圖1是本發(fā)明提供方法的流程框圖,包括如下步驟:A.對關鍵代碼所在節(jié)進行加密,執(zhí)行如下操作:A1.解析so文件;A2.定位到特定方法所在節(jié);A3.使用密鑰key1進行第一次加密;A4.使用密鑰key2進行第二次加密;A5.更新so文件;A6.計算so文件的Hash值并對Hash值進行加密,存放到dex文件中;B.對加密的代碼進行解密,執(zhí)行如下操作:B1.找到so文件在內存中的起始地址;B2.對so文件進行Hash值運算,將得到的結果進行加密,和dex文件中保存的值進行比較;B3.使用密鑰key1進行第一次解密;B4.使用密鑰key2進行第二次解密;B5進行關鍵代碼的方法調用。本發(fā)明提供的基于Android系統(tǒng)二進制流加密技術的加固方法包括加密過程和解密過程;以下通過實施例說明本發(fā)明方法的具體實施:加密過程:對于需要保護的Android應用程序(apk),首先解壓獲得apk中的so文件,然后對so文件進行解析;開發(fā)者設定需要加密的JNI關鍵方法(需要加密的JNI關鍵方法根據(jù)開發(fā)者的需求進行判斷設定,例如,某些重要算法方法,或者驗證登陸方法,或者某一個系統(tǒng)關鍵流程),然后定位到需要加密的JNI的關鍵方法所在的自定義節(jié);由加固者設定密鑰key1(加固者需要保密,在解密的時候需要用這個密鑰對密文進行解密),先使用密鑰key1對關鍵方法的指令進行第一次加密(采用AES加密,可采用自行編寫的AES加密程序,也可以使用AES的加密工具),得到第一次加密后的中間數(shù)據(jù);然后設定密鑰key2,使用密鑰key2對中間數(shù)據(jù)進行第二次加密(也采用AES加密);連續(xù)兩次AES加密,可增加安全性;更新so文件:將二次加密后得到數(shù)據(jù)更新到so文件中,得到新的so文件;計算新的so文件的Hash值,該值用于校驗so的完整性;對Hash值進行加密(MD5加密)后存入到dex文件中;即在dex文件中加入了對so文件的校驗參數(shù);壓縮重新生成apk,即完成加密過程。重新生成的apk中,包含已添加so文件的校驗hash的dex文件、部分關鍵代碼加密的so文件(是加固者提供的一段程序C程序,默認是安全的),so文件中還包含解密過程和對自身的校驗過程。解密過程:開始執(zhí)行程序(AES加密的apk程序),首先執(zhí)行so文件中的靜態(tài)段:具體地,AES加密程序被載入內存后,在程序開始執(zhí)行的時候先通過JNI(JavaNativeInterface)調用機制,執(zhí)行so文件中的校驗和解密以及恢復代碼,具體是通過Java代碼調用so文件(so庫)中的方法,先搜索程序內存,找到經(jīng)過加密處理后需要還原的相應的類和方法。尋找時可預制一些標簽在程序中,來幫助尋找需要解密的部分;然后,在內存中尋找加密代碼所在節(jié):so文件的組成結構如圖2所示,so文件即ELF文件主要包括分別是ELF頭(ELFheader)、程序頭表(Programheadertable)、節(jié)(Section,包括.text和.rodata)和節(jié)頭表(Sectionheadertable)。實際上,一個文件中不一定包含全部內容,而且位置也未必與說明順序相同,只有ELF頭的位置是固定的,其余各部分的位置、大小等信息由ELF頭中的各項值來決定。尋找方法具體是:將指針跳回到so文件的起始位置,讀取so文件的文件頭,根據(jù)e_shoff定位到節(jié)區(qū)頭部表,根據(jù)elf_shnum得到節(jié)區(qū)的數(shù)量size。從節(jié)區(qū)頭部表讀取size個節(jié)區(qū)項。通過elf文件頭中的e_shstrndx項得到節(jié)表字符串表在節(jié)表中的索引,然后找到節(jié)表字符串表的偏移string_off。將每一個節(jié)區(qū)地址和它的字符串對應,查找和自定義加密節(jié)字符串相同的節(jié),如果匹配則通過shdr->sh_offest和shdr->sh_zie定位得到該節(jié)的內容。Elf文件頭記錄了so文件其他部分在so文件中的偏移,從而可以定位到so文件其他部分所在的區(qū)域,以供進一步解析。ELF文件頭部(Elf文件頭)主要包括校驗和以及其他結構的偏移地址和長度信息,具體見表1:表1Elf文件頭記錄的信息和相應含義對于so文件,計算so文件的Hash值,然后對Hash進行加密((MD5加密)),和dex文件中保存的值進行比較,如果一致,則說明程序未被修改,否則返回錯誤碼,程序停止運行。當執(zhí)行關鍵代碼時,從so文件中取得密鑰key2,對關鍵代碼進行解密,得到中間代碼。對于得到的中間代碼,從so文件中取得密鑰key1,進行第二次解密得到最終的關鍵代碼;兩次解密過程分別對應兩次加密過程,以確保應用程序的安全。最后,實現(xiàn)正確安全地調用關鍵代碼的方法。需要注意的是,公布實施例的目的在于幫助進一步理解本發(fā)明,但是本領域的技術人員可以理解:在不脫離本發(fā)明及所附權利要求的精神和范圍內,各種替換和修改都是可能的。因此,本發(fā)明不應局限于實施例所公開的內容,本發(fā)明要求保護的范圍以權利要求書界定的范圍為準。當前第1頁1 2 3 當前第1頁1 2 3 
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
台中县| 岳池县| 京山县| 绩溪县| 永昌县| 白水县| 宝丰县| 清水县| 奈曼旗| 永城市| 神农架林区| 无棣县| 晴隆县| 沙田区| 富源县| 麻江县| 庆云县| 乌拉特中旗| 阜宁县| 万全县| 汶川县| 老河口市| 军事| 黎平县| 茌平县| 米脂县| 萝北县| 南华县| 丹寨县| 邹城市| 正宁县| 察哈| 长子县| 鄂尔多斯市| 衡东县| 阳高县| 宝清县| 安徽省| 封丘县| 高安市| 龙山县|