Android反編譯後從新打包

在android開發中常常會遇到須要反編譯競品的需求,題主也就針對反編譯apk後替換sdk後從新打包的場景進行試驗,下面一步一步來講明Android如何反編譯後從新打包。java

一個典型apk包中包含的內容

咱們知道android項目編譯成應用程序後的安裝文件是.apk文件,運行期間classloader加載的是dex文件中的class。因此咱們先來看看一個典型的apk包中具備哪些基本內容: android

apk包內容.png

方式一:使用apktool直接反編譯apk(酷市場爲例,2016.8.12更新)

配置apktool環境:

1.打開apktool官網 git

2.下載執行腳本文件和apktool.jar包

先下載腳本文件 : mac os 對應 apktool.sh windows 對應 apktool.batgithub

再下載最新的apktool.jar windows

3.配置apktool的運行環境

windows:把下載的兩個文件都copy到c:/windows目錄,或者放到本身指定的目錄下再修改系統path也行 Mac os: 把下載的兩個文件都copy到/usr/local/bin目錄下,修改權限爲可執行chmod a+x安全

在命令行終端模式下,輸入apktool驗證是否完成apktool環境配置 工具

反編譯apk包

1.命令行進入到apk包所在的文件夾路徑 ui

2.執行反編譯命令 apktool d filename
3.獲得反編譯後的文件夾

4.修改apk內容(舉例替換logo)

查看manifest.xml文件,icon對應的就是配置應用logo 命令行

logo圖片資源所在

5.從新簽名打包

1.回編譯apkapktool b files files就是對應剛剛修改的apk文件夾,執行完後會從新生成一個apk文件3d

注意:編譯後的apk是安裝不成功的,老是提示 Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION],實質是沒簽名。

2.生成簽名: keytool -genkey -keystore coolapk.keystore -keyalg RSA -validity 10000 -alias coolapk

注意:上面-keystore後面跟的是簽名文件的名字,而-alias是別名,通常狀況下-keystore後面跟-alias是同樣的,但其實二者沒有關係,這也是我故意搞成不同的緣由。

3.爲apk增長簽名: jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore coolapk.keystore -signedjar coolapk-signed.apk coolapk.apk coolapk

注意: 1.最後的」coolapk」就是-alias後面帶的,必須保持一致 2.若是不帶-digestalg SHA1 -sigalg MD5withRSA簽名後的apk安裝也會不成功,INSTALL_PARSE_FAILED_NO_CERTIFICATES的錯誤,若是不帶-tsa會報一個時間方面的警告.

方式二:使用dex2jar反編譯查看java代碼(爲例,2016.4月更新)

下載dex2jar和jd-gui

dex2jar: https://github.com/pxb1988/dex2jar jd-gui: http://jd.benow.ca/

使用dex2jar將從apk中解壓獲得的dex文件轉成jar包

使用jd-gui來查看jar包內容

jd-gui.png

將要需改的類更改代碼後複製到jar內,完成覆蓋替換

覆蓋替換類

把jar包從新轉成dex文件

將修改完成後的dex文件複製到原來的apk文件中

直接覆蓋原來的dex文件

而後就興沖沖地直接去安裝了,然而~

看來果真沒這麼簡單就能呢個搞定,繼續排查緣由。

找緣由

看看apk文件中有什麼可疑對象致使了安裝失敗,果真除了dex和資源文件之外,還發現了三個文件

原來是apk包自己的防篡改機制致使的

打開文件來一探究竟,果真裏面都是對打包時對文件進行了標識記錄,看來這是避免文件被篡改的安全機制。

Paste_Image.png

找到問題緣由就來解決,嘿咻嘿咻

想一想既然是這些文件致使的,那先試試簡單粗暴地直接把文件刪了,避免防篡改檢查

Paste_Image.png

然而,這樣的是不行的,必需要有這個文件夾才能解析apk包,可能這些至關因而讀取安裝文件列表清單,必須具備,看來此路不通,

Paste_Image.png

既然原來的清單內容對不上,但又不能不提供,那能不能咱們給它配一個新的? 想到這裏,感受能夠動手試試,嘿咻嘿咻~

這些文件既然是在編譯打包成apk時期自動生成的,那要想再生成一份新的,因此應該從新打包就能夠。但是這個自己已經就是apk文件了,怎麼再編譯打包? 停下來想了想,對啊,忽然想起來能夠給包籤個名唄,打簽名應該也會有一樣的效果纔對,繼續嘿咻嘿咻。

找個工具來簽名吧,用本身的去簽名留下點什麼不良記錄就很差了,嘿嘿~

Paste_Image.png

簽名成功後

成功安裝,破解完成

相關文章
相關標籤/搜索