JesusFreke / smali

smali/baksmali
6.26k stars 1.07k forks source link

ArrayIndexOutOfBoundsException when using baksmali to deodex a big odex file (odex version 036) #856

Closed ghost closed 1 year ago

ghost commented 1 year ago

apk and odex file framework folder (Android kitkat) When I trying to deodex odex file, it throw error:

$ java -jar baksmali-2.5.2.jar de -d framework XunAppStore_v2.odex
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2783984 out of bounds for length 2621400
        at org.jf.dexlib2.dexbacked.DexBuffer.readSmallUint(DexBuffer.java:54)
        at org.jf.dexlib2.dexbacked.DexBackedDexFile.getMapItems(DexBackedDexFile.java:266)
        at org.jf.dexlib2.dexbacked.DexBackedDexFile.getMapItemForSection(DexBackedDexFile.java:283)
        at org.jf.dexlib2.dexbacked.DexBackedDexFile.<init>(DexBackedDexFile.java:103)
        at org.jf.dexlib2.dexbacked.DexBackedDexFile.<init>(DexBackedDexFile.java:184)
        at org.jf.dexlib2.dexbacked.DexBackedOdexFile.<init>(DexBackedOdexFile.java:53)
        at org.jf.dexlib2.dexbacked.DexBackedOdexFile.fromInputStream(DexBackedOdexFile.java:98)
        at org.jf.dexlib2.DexFileFactory.loadDexContainer(DexFileFactory.java:255)
        at org.jf.baksmali.DexInputCommand.loadDexFile(DexInputCommand.java:153)
        at org.jf.baksmali.DisassembleCommand.run(DisassembleCommand.java:162)
        at org.jf.baksmali.Main.main(Main.java:102)

Tried baksmali v2.1.1, v2.3, v2.5.2, all the same.

ghost commented 1 year ago

Is need split it to multi dex file?

ghost commented 1 year ago

It isn't a bug in smali, it just caused by incomplete odex file.