android逆向基礎:apk 反編譯 重打包 重簽名


apk 反編譯大家都比較熟悉,這里只做一個筆記。

1 反編譯 apk

apktool d perfect.apk

這樣就把資源文件解壓縮了, classes.dex 也反編譯成了 smali 文件

2 修改 smali 文件

得到 smali 文件,現在就可以對 smali 文件進行修改和添加自己的代碼了。 

當然可以進一步用  dex2jar (或者 enjarify) 處理將  dex 轉成 java class 文件, 再用  jd-jui 等反編譯成 java 代碼。

現在 apk 基本都做了混淆, 但仔細讀還是基本能夠明白意思的。

修改 smali 是考驗你 smali 匯編的基礎, 這個就是孰能生巧,多讀多練了, 比 arm 匯編要簡單多了。

3 重新打包

apktool b perfect

4 重簽名

重新打包后沒有簽名信息, 還需要重新簽名,因為 apk 沒有簽名是不能安裝的。

有2種簽名方法一是通過 jarsigner ,  jarsigner 和 keytool 其實都是 jdk 中的工具, 在 java 安裝目錄下可找到, 本來就是給 jar 文件簽名的

jarsigner -verbose -keystore leslie.keystore -storepass 123456 -keypass 123456 -signedjar  perfect-hack-signed.apk  perfect-hack.apk lesliekeystore

也可以用默認的 debug key 簽名,  debug.keystore 一般位於  ~/.android 目錄下

jarsigner -verbose -keystore debug.keystore -storepass android -keypass android -signedjar  perfect_signed.apk  perfect.apk androiddebugkey

如果沒有 keystore 可以用 keytool 生成一個

 另外一種簽名方式是通過 signapk.jar 對 apk 進行簽名

java -jar signapk.jar .testkey.x509.pem testkey.pk8 my.apk my_signed.apk

這是基礎中的基礎了,看着很簡單,但自己第一次在 smali 中成功注入一行彈 toast 的代碼還是用了一天的時間。

 

對一個已經簽名的 apk 重新進行簽名
第一步刪除原來的簽名文件
zip -d foo.apk META-INF/\*
第二步重新簽名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore leslie.keystore -storepass 123456 -keypass 123456 -signedjar wing_signed.apk wing.apk lesliekeystore

 

keystore 文件和 .pem .pk8 是可以相互轉化的

 


免責聲明!

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



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