android apk殼


  殼對於有過pc端加解密經驗的同學來說並不陌生,android世界中的殼也是相同的存在。看下圖(exe = dex):

     

  概念清楚羅,我們就說下:殼最本質的功能就是實現加載器。你看加殼后,系統是先執行殼代碼的。但我們想要的是執行原dex,可是系統此時是不會自動來執行的需要殼去將原dex加載到系統中。ok,殼就說到這里,看android apk殼:

  Android APK加殼技術方案【1】

  Android APK加殼技術方案【2】

  APK加殼【1】初步方案實現詳解

  在看完上述的幾篇文章后,相信對apk 殼應該有一定的了解(其實apk殼和pc端的都差不多,只是在處理不同的文件格式:dex和exe中會有差別;導致不同的加殼、解殼步驟。當然我們需要了解文件的格式,才能有的放矢哦)。來看下android apk加殼中處理方法:

  1 :編寫解殼apk,得到殼的文件:UnShelldex;

  2:編寫腳本或代碼(你開心就好),對原dex進行encode變成encodeDex,並將其插入(這里有幾種姿勢哦,看你喜歡咯)到UnShelldex文件中;注意被修改后的UnShelldex必須要符合dex格式,否則android不執行艾(在上述的文章里就對修改后的UnShelldex的checksum、signature 和file_size值進行修正);

  解殼步驟:

  1 執行解殼apk的代碼,decode endcodeDex為原來的dex;

  2 模擬android系統把dex裝載,讓其順利執行;

  這里需要提及一點:殼絕對不能改變原來代碼的執行流程;又不是hook,你改是算什么意思啊!apk殼的思路講完啦,但這只是紙上談兵,還有很多細節需要我們考慮。加殼的步驟沒什么好考慮的,無非是跟文件格式打交道(當然你要做高精尖的encode是另說啦)。在解殼步驟里,decode也沒什么好分析的(主要是跟encode對應,且每個人的處理方式也不一樣);把dex裝載才是關鍵,前面說了殼本質就是裝載器。上面的文章的思路是在解殼過程中,調用dexclassloader把dex載入內存,dexclassloader需要dex文件路徑,故decode后的dex直接存在目錄下。(dalvik淺析三:類加載 ClassLoader)。什么!dex直接放在目錄下,別人不是可以直接獲取了嗎,那加殼干什么啊。是不是覺得加殼然並卵。ok,那我不把dex提取出來放在目錄下,直接在內存里裝載:

  Android4.0內存Dex數據動態加載技術

  APK加殼【2】內存加載dex實現詳解

   android4.0后有DalvikNativeFunc函數Dalvik_dalvik_system_DexFile_openDexFile_bytearray可以直接把dex對應的字節流裝載到系統中(其中相關聯到很多的知識點,已另寫文章注釋,看這里)。剛好我們在上面的解殼過程中不是得到dex嘛,這個時候不要再把dex存在目錄下了,用Dalvik_dalvik_system_DexFile_openDexFile_bytearray加載。wow,別人不就看不到dex了嘛(真的看不到了嘛;看后續脫殼文章)。

   

  上面是apk加殼的一些基本概念,加殼的實質是反編譯軟件無法得到dex代碼(即dex代碼不會靜態暴露)。一些加殼思路:

  1 java解密dex代碼,難度系數不高

  2 C++解密dex代碼,so加固+apk加殼

  3 不使用系統提供的加載dex方法,自己寫效果佳

 

  加殼的基本知識就先到了,在后面脫殼中有新的知識點再補充上來。

 

資料:

  1 Android APK加殼技術方案【1】

  2 Android APK加殼技術方案【2】

  3 APK加殼【1】初步方案實現詳解

  4 Android4.0內存Dex數據動態加載技術

  5 APK加殼【2】內存加載dex實現詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM