google / google/smali

DexFileFactory.writeDexFile produces invalid files

Open
#63 10 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
400
Forks
67
Avg merge
1d 2h
Merged PRs (30d)
1

Description

Compile and run sample program that uses `DexRewriter` without any passes:

```java
import com.android.tools.smali.dexlib2.DexFileFactory;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.iface.DexFile;
import com.android.tools.smali.dexlib2.rewriter.DexRewriter;
import com.android.tools.smali.dexlib2.rewriter.RewriterModule;

public class Main {
public static void main(String[] args) {
try {
DexBackedDexFile dexFile = DexFileFactory.loadDexFile("classes_original.dex", null);
DexRewriter rewriter = new DexRewriter(new RewriterModule());
DexFile newDexFile = rewriter.getDexFileRewriter().rewrite(dexFile);
DexFileFactory.writeDexFile("classes_rewritten.dex", newDexFile);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
```
Using smali library 3.0.7:
```shell
$ ls lib
smali-3.0.7.jar smali-baksmali-3.0.7.jar smali-dexlib2-3.0.7.jar smali-util-3.0.7.jar guava-33.2.1-jre.jar jcommander-1.64.jar
```
Try to disassemble `classes_original.dex` (success):
```shell
$ java -cp "lib\*" com.android.tools.smali.baksmali.Main dis -o classes_original_out classes_original.dex
```
Try to disassemble `classes_rewritten.dex` (failure):
```shell
$ java -cp "lib\*" com.android.tools.smali.baksmali.Main dis -o classes_rewritten_out classes_rewritten.dex

Error occurred while disassembling class LFC0; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid uleb128 integer encountered at offset 0x110642
at com.android.tools.smali.dexlib2.dexbacked.DexReader.readUleb128(DexReader.java:147)
at com.android.tools.smali.dexlib2.dexbacked.DexReader.readSmallUleb128(DexReader.java:118)
...
Error occurred while disassembling class LVL1; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid string index 1237382, not in [0, 19974)
at com.android.tools.smali.util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
at com.android.tools.smali.baksmali.Adaptors.MethodDefinition.(MethodDefinition.java:168)
...
Error occurred while disassembling class Landroidx.appcompat.widget.AppCompatTextView; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid string index 157401990, not in [0, 19974)
at com.android.tools.smali.util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
at com.android.tools.smali.baksmali.Adaptors.MethodDefinition.(MethodDefinition.java:168)
...
```

Download: [classes_original.dex](https://github.com/user-attachments/files/16130928/classes_original.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.