2.apk加殼和脫殼概念入門(筆記)

學習材料來自四哥csdn
Android中的Apk的加固(加殼)原理解析和實現

首先必然是依葫蘆畫瓢敲代(fu)碼(zhi)

首先要理解幾個概念

  • 1.什么是殼
  • 2.怎么加殼
  • 3.怎么脫殼

1.什么是殼

殼的本質實際上仍然是一個apk,不過這個apk的用途
1.解密 加殼過程中的 被加密的數據;
2.動態加載資源,使源程序能正常調起。

解密不用怎么說,解密和加密算法對應即可。
主要是動態加載資源,
http://blog.csdn.net/jiangwei0910410003/article/details/48104455

如何得到系統加載Apk的類加載器,然后我們怎么將加載進來的Apk運行起來等問題都在這篇文章中說到。


2.怎么加殼

大白話:將源Apk和殼Apk進行合并成新的.dex,然后替換原.dex
這里的重點應當是理解.dex的文件格式,重中之重又是去理解.dex文件的頭部信息
checkSum是干什么的?
signature是干什么的?
file_size是干什么的?

將源apk,殼apk準備好之后,以二進制形式讀出,計算得出新的apk大小,并按照.dex文件格式依次放好,最后計算并修改三個頭部信息,此時殼已經加好。


3.怎么脫殼

按照1的說法,其實殼并沒脫掉,而是動態的找到了源apk真正的入口application


收尾工作

因為加殼之后,會替換原.dex,所以簽名遭到破壞,一定要重新簽名。

jarsigner -verbose -keystore 簽名文件 -storepass 密碼 -keypass alias的密碼 -sigfile CERT -digestalg SHA1 -sigalg MD5withRSA 簽名后的文件 簽名前的apk alias名稱

eg:
jarsigner -verbose -keystore testKey.jks -storepass 123456 -keypass 123456 -sigfile CERT -digestalg SHA1 -sigalg MD5withRSA -signedjar srcApk_signed.apk srcApk_src.apk jiangwei

也可以用apksigner

apksigner sign --ks testKey.jks --ks-key-alias testkey --ks-pass pass:123456 --key-pass pass:123456 --out output_sign.apk source.apk

最后筆記總結

概念性東西要理解,主要是動態加載資源那里的和.dex文件格式
按照四哥的步驟來操作試一下。

我這里出了bug,加固后的apk,運行報


image.png

代碼已上傳github
https://github.com/lamster2018/DexShell

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容