想app更安全?給apk加個殼吧(上)

一、什麼是加殼?

       加殼是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。PC EXE文件加殼的過程如下:


     


二、加殼作用

       加殼的程序可以有效阻止對程序的反彙編分析,以達到它不可告人的目的。這種技術也常用來保護軟件版權,防止被軟件破解。


三、Android Dex文件加殼原理

       PC平臺現在已存在大量的標準的加殼和解殼工具,但是Android作爲新興平臺還未出現APK加殼工具。Android Dex文件大量使用引用給加殼帶來了一定的難度,但是從理論上講,Android APK加殼也是可行的。

       在這個過程中,牽扯到三個角色:

           1、加殼程序:加密源程序爲解殼數據、組裝解殼程序和解殼數據

           2、解殼程序:解密解殼數據,並運行時通過DexClassLoader動態加載

           3、源程序:需要加殼處理的被保護代碼

       閱讀該文章,需要您對DEX文件結構有所瞭解,您可以通過以下網址瞭解相關信息:

        http://blog.csdn.net/by317966834/article/details/8880073


       根據解殼數據在解殼程序DEX文件中的不同分佈,本文將提出兩種Android Dex加殼的實現方案。


    (一)解殼數據位於解殼程序文件尾部


              該種方式簡單實用,合併後的DEX文件結構如下。




          加殼程序工作流程:

                  1、加密源程序APK文件爲解殼數據

                  2、把解殼數據寫入解殼程序Dex文件末尾,並在文件尾部添加解殼數據的大小。

                  3、修改解殼程序DEX頭中checksum、signature 和file_size頭信息。

                  4、修改源程序AndroidMainfest.xml文件並覆蓋解殼程序AndroidMainfest.xml文件。


          解殼DEX程序工作流程:

                  1、讀取DEX文件末尾數據獲取借殼數據長度。

                  2、從DEX文件讀取解殼數據,解密解殼數據。以文件形式保存解密數據到a.APK文件

                  3、通過DexClassLoader動態加載a.apk。


(二)解殼數據位於解殼程序文件頭


          該種方式相對比較複雜, 合併後DEX文件結構如下:




          加殼程序工作流程:

                  1、加密源程序APK文件爲解殼數據

                  2、計算解殼數據長度,並添加該長度到解殼DEX文件頭末尾,並繼續解殼數據到文件頭末尾。

                       (插入數據的位置爲0x70處

                  3、修改解殼程序DEX頭中checksum、signature、file_size、header_size、string_ids_off、type_ids_off、proto_ids_off、field_ids_off、

              method_ids_off、class_defs_off和data_off相關項。  分析map_off 數據,修改相關的數據偏移量。  

                  4、修改源程序AndroidMainfest.xml文件並覆蓋解殼程序AndroidMainfest.xml文件。


          解殼DEX程序工作流程:

                  1、從0x70處讀取解殼數據長度。

                  2、從DEX文件讀取解殼數據,解密解殼數據。以文件形式保存解密數據到a.APK

                  3、通過DexClassLoader動態加載a.APK。


   四、加殼及脫殼代碼實現


http://blog.csdn.net/by317966834/article/details/8880050
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章