1. 程式人生 > >android 反編譯(dex 和 odex),非腦殘轉帖,絕對可靠

android 反編譯(dex 和 odex),非腦殘轉帖,絕對可靠

Android 反編譯 反編譯odex檔案(例如framework.odex),若是反編譯dex,直接第4步 1.由於反編譯odex的工具在D:\Develop tools\android反編譯工具\odex中,因此為了執行命令方便一點在odex資料夾裡面,將system的資料夾結構給新建一下,將反編譯的odex中所引用的所有包都放到對應的目錄下 system-----      |-------app      |-------framework 2.java -jar baksmali-2.0.3.jar -d ./system/framework -x ./system/framework/framework.odex
-d      指定bootclasspath dir -x      deodex the given odex file. This option is ignored if the input file is not an odex file -a      --api-level <API_LEVEL>,The numeric api-level of the file being disassembled. If not specified, it defaults to 15 (ICS).          網上很多人轉那個帖子都寫的是-a 12, 沒必要 3.執行完上面的命令後就會在odex目錄下生成一個out資料夾,裡面就是層次結構了,注意:在執行上面命令之前看一下之前有木有out資料夾,有舊的out資料夾的話,可能導致下面要執行的命令丟擲異常,因此要將舊的out資料夾刪除
,異常如下:
UNEXPECTED TOP-LEVEL EXCEPTION:
org.jf.util.ExceptionWithContext: Unsigned short value out of range: 78281
        at org.jf.dexlib2.writer.DexDataWriter.writeUshort(DexDataWriter.java:11
6)
        at org.jf.dexlib2.writer.InstructionWriter.write(InstructionWriter.java:
312)
        at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:980)
        at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java
:759)
        at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:214)
        at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:192)
        at org.jf.smali.main.main(main.java:229)
最後將轉為classes.dex的命令:java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex 4.最後一步就是講classes.dex反編譯為jar檔案了,用d2j-dex2jar命令:d2j-dex2jar -f classes.dex