Android APK反編譯02

轉:http://blog.csdn.net/qq435757399/article/details/17765437

apk反編譯:


第一類:
首先將apk文件後綴改爲zip並解壓,得到其中的classes.dex


第二類:
按照第一類沒有得到classes.dex文件;獲取apk文件和odex文件;


1.首先配java環境,下載所需工具smali-1.3.3.jar 和 baksmali-1.3.3.jar;
2.將手機/system/framework 裏面也一併複製出來放在與兩個工具同一目錄(即與smali-1.3.3.jar、baksmali-1.3.3.jar);
  注意:framework下的只要.odex文件,不需要jar和apk文件;
3.將要反編譯應用的apk文件和.odex文件放在與smali-1.3.3.jar、baksmali-1.3.3.jar同一目錄;
4.開始運行分解 odex 文件爲 classes.dex 文件的命令:
   A.java -jar baksmali-1.3.3.jar -x **.odex  注:**即要反編譯的應用文件名;
此命令完成之後,會生成一個 out 文件夾在smali-1.3.3.jar、baksmali-1.3.3.jar同一目錄下,裏面就是所有的 class文件,後綴名爲.smali;
   B.運行 class 生成爲 classes.dex 文件的命令:
     java -Xmx512M -jar smali-1.3.3.jar out -o classes.dex
此命令完成之後,會生成classes.dex文件在smali-1.3.3.jar、baksmali-1.3.3.jar同一目錄下;

執行A命令後可能出現的錯誤日誌:
Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Util.ExceptionWithContext: Cannot locate boot class path file core.odex
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:237)
    at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145)
    at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    at org.jf.baksmali.main.main(main.java:297)

此錯誤爲/system/framework沒有複製出來放在工具目錄;

Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Util.ExceptionWithContext: error in opening zip file
    at org.jf.dexlib.Util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:220)
    at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145)
    at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    at org.jf.baksmali.main.main(main.java:297)
Caused by: java.util.zip.ZipException: error in opening zip file
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:127)
    at java.util.zip.ZipFile.<init>(ZipFile.java:144)
    at org.jf.dexlib.DexFile.<init>(DexFile.java:295)
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:216)
    ... 4 more
Error while reading boot class path entry "services.odex".

此錯誤爲/system/framework複製出來放在工具目錄下了,但是將其中的jar文件也放進去了,要刪除jar文件;

*************************此時已拿到classes.dex文件*********************************

反編譯過程(linux):
把classes.dex複製到dex2jar.sh所在目錄,在命令行下進入這個目錄,執行:./dex2jar.sh classes.dex,生成一個jar文件

反編譯過程(windows):
將classes.dex複製到dex2jar.bat所在目錄dex2jar-x.x.x.x文件夾。
在命令行下進入dex2jar.bat所在目錄,

運行
dex2jar.bat classes.dex

即可生成
classes_dex2jar.jar


************************此時已拿到classes_dex2jar.jar文件*****************************


進入jdgui文件夾雙擊jd-gui.exe,打開上面生成的jar包classes_dex2jar.jar,即可看到源代碼了,另存爲之後可以生成一個zip文件,解壓此zip文件,即可得到源代碼,然後就可以使用eclipse或者source insight進行查看。

************************此時源碼獲取成功************************************************
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章