Android的apk包,其實就是zip包,只不過后綴名換了而已!使用“好壓”等解壓縮工具解壓,就可以看到里面的內容了。簡單介紹一下吧。
以下就是解壓出來的apk的內容:
assets 對應工程目錄下的 assets目錄,存放附加資源。
lib 對應工程目錄下的 lib目錄,存放程序引用庫。
META-INF 存放apk簽名信息。
res 對應工程目錄下的res目錄,存放程序資源,如圖片等
AndroidManifest.xml 程序的聲明文件,包括SDK版本、Activity聲明,權限聲明等。
classes.dex java字節碼,即代碼文件。
resources.arsc 資源標識文件,存放字符串等內容。
關於反編譯的方法,百度一搜就一大堆,這個我就不多說了!
附上幾個鏈接吧:
1、Android APK反編譯詳解(附圖)
http://blog.csdn.net/sunboy_2050/article/details/6727581
2、真正強大的APK反編譯工具 DoAPK 1.0 發布!圖形化操作,有圖有真相
http://bbs.hiapk.com/thread-1226617-1-1.html
第1種方法,
通過使用“dex2jar”工具,
把“classes.dex”文件轉換為“classes.dex.dex2jar.jar”,
然后再使用“JD-GUI”工具直接打開“classes.dex.dex2jar.jar”文件,
就可以看到詳細的Java代碼了。
通常會有3種情況:
1、如果開發者沒有使用代碼混淆的話,那么,你將看到100%的源代碼。
2、如果開發者加入了代碼混淆的話,那么,你將看到a,b,c,d之類的名字的代碼。
3、還有一種情況是,你什么都看不到。這也是我寫這篇文章的重點所在。
針對這個問題,我在網上搜索了三天,均沒有任何相關的解決方法。
今天早上,偶爾看到有人說是系統問題,在win7下無法查看,但在xp下又可以查看。
於是,我就試着用虛擬機的windows 2003系統看看,結果,還是不行。
后來,仔細一想,懷疑是dex2jar工具版本有問題
於是在2003我安裝了新的dex2jar,版本為0.9.8
結果,真的可以看到JAVA代碼了。
下圖是使用dex2jar 0.9.8的效果:
下圖是dex2jar 0.7.0的效果:
由此可知:
有的apk無法反編譯,是因為dex2jar的版本太低了!
建議:
在使用dex2jar工具的時候,最好使用最新版,以確保反編譯的成功。
后來補充:
有些朋友喜歡使用apktool來進行反編譯,操作過程中經常會出現各種問題,無法順利反編譯。
一般來說,這種APK在發布的時候動了手腳(比如加殼、增加特殊代碼讓apktool出異常……)
解決方法是,
1、首先確保apktool用了最新版本;
2、然后看看apktool出了什么錯誤,打開apktool.jar,定位到具體代碼查看原因
這種情況比較復雜,也比較麻煩,有興趣的朋友可以去“看雪論壇”多看看。
首先說APK反編譯個人經驗,2.0之后的APKTOOL(目前任何一款反編譯工具都是基於APKTOOL)需要JDK1.8以上的兼容性。第二點,APK的路徑是否包含中文,或空格。最好在磁盤盤符根目錄下反編譯編譯。第三點,可以試着刪除錯誤提示中的字行,重新編譯。還有就是升級APKTOOL.JAR文件。 |
最新解決,apktool用的是apktool_2.0.0rc3.jar解決了這個問題,謝謝
1.Input file was not found or was not readable.