smali
smali copied to clipboard
Corrupted .smali files
Application One of corrupted files (~397 total errors):
\android\support\v4\app\FragmentManagerImpl$6.smali[67,0] mismatched input '' expecting END_METHOD_DIRECTIVE
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file: android/support/v4/app/FragmentManagerImpl$6.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:75)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:59)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:36)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:412)
at brut.androlib.Androlib.buildSources(Androlib.java:343)
at brut.androlib.Androlib.build(Androlib.java:299)
at brut.androlib.Androlib.build(Androlib.java:270)
at brut.apktool.Main.cmdBuild(Main.java:224)
at brut.apktool.Main.main(Main.java:75)
File content:
.class public Landroid/support/v4/app/FragmentManagerImpl$6;
.super Ljava/lang/Object;
.source "FragmentManagerImpl.java"
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 3
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public 62ZyzUTrxrHFKPpPsokFHx9Cvt5qlEnr4VDhCkrmTpAKAYuZo4KCivEXc8h7z1yXgWJ3hdJl1fMH14bvyrbXThmKRKMLwutVPQo5IHAX1pb0iAD87K1a1LGGwJ60b7PfEJZBW6Om6GN7BaFnUwEHNG2puEQFndJUgqw4FNDOElSZ5f3GxXpD()Ljava/lang/String;
.locals 1
.prologue
.line 12
#unknown opcode: 0x1d00
nop
#Type index out of bounds: 41313
#filled-new-array {}, type@41313
nop
or-int/2addr p10, v0
iget-byte p4, p4, Lcom/google/android/gms/games/internal/ConnectionInfo;->mVersionCode:I
#invalid payload reference
#fill-array-data p171, :array_0
nop
#String index out of bounds: 324097064
#const-string/jumbo p116, string@324097064
nop
rem-long p43, p179, p43
iget p4, p10, Lcom/google/android/gms/tagmanager/zzbz;->zzbjN:Lcom/google/android/gms/internal/zzag$zza;
:array_0
.end method
.method public fqCjXACnySI13Fm5O6640Z0VdgspMKN87Pecxjbk77v9tbRoxwuACBbOhY05ANgc7MG3l6Yz1M47nNFmKfEjWUsL5fIeIGFxdgZg6CGYiGWJJD6ameCtn62lB3svGy4LxaSikDxP9MnFGyNAFhEM7wvCmfBMX1eKQUFcXG7SDEEsBz0IM6KL()I
.locals 1
.prologue
.line 7
#unknown opcode: 0x1c00
nop
invoke-static {}, Lcom/igaworks/adbrix/cpe/common/CirclePageIndicator;->onSaveInstanceState()Landroid/os/Parcelable;
shr-int/2addr p9, p9
iget-wide p6, p4, Lcom/google/android/gms/common/data/zzd;->zzajg:[Ljava/lang/String;
double-to-float p3, p10
int-to-char p12, p3
What happens when you directly run baksmali to disassemble the apk? Does it generate any errors?
Sure! :)
org.jf.util.ExceptionWithContext: Encountered small uint that is out of range at offset 0x8a2da2
at org.jf.dexlib2.dexbacked.BaseDexBuffer.readSmallUint(BaseDexBuffer.java:58)
at org.jf.dexlib2.dexbacked.instruction.DexBackedInstruction31c.getReference(DexBackedInstruction31c.java:55)
at org.jf.baksmali.Adaptors.Format.InstructionMethodItem.writeTo(InstructionMethodItem.java:118)
at org.jf.baksmali.Adaptors.MethodDefinition.writeTo(MethodDefinition.java:240)
at org.jf.baksmali.Adaptors.ClassDefinition.writeVirtualMethods(ClassDefinition.java:326)
at org.jf.baksmali.Adaptors.ClassDefinition.writeTo(ClassDefinition.java:112)
at org.jf.baksmali.Baksmali.disassembleClass(Baksmali.java:152)
at org.jf.baksmali.Baksmali.access$000(Baksmali.java:46)
at org.jf.baksmali.Baksmali$1.call(Baksmali.java:76)
at org.jf.baksmali.Baksmali$1.call(Baksmali.java:74)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
org.jf.util.ExceptionWithContext: The last instruction in method Luk/d3dioMtplCj5tmVNYyeRpjPK1nVKeGTUsBPRfeQE6FXE9GRuBijvw05C66NWPi5uhUlWJVeMKq9Qm8OFXPL60W1WN7Gkm77oZB50s48JjMpSft4B7bLOlKS7qwNmSlxINoptF2DtqUXgkp8D
YqKIifinUytt4Xm5qDxr1QafyngMvN128pOG;->CstStfrCQWSLJntNqbEHzZxBWflVgl5ojSsaBRBUvfZbdzbvpdawJvWCgSLdd0byhZgr9tu2Elk0Q3wUKhoHC1SnK6x3PxMtBhr8f9nxGbGoU1GMtzZQIfN670rbv8bl3ULZLf3WFZo6bzF7bemBOBOWlBE8UaUtPvM4N7SyIGdpPd
3vRAqh()Ljava/lang/String; is truncated
at org.jf.dexlib2.dexbacked.DexBackedMethodImplementation$1$1.readNextItem(DexBackedMethodImplementation.java:88)
at org.jf.dexlib2.dexbacked.DexBackedMethodImplementation$1$1.readNextItem(DexBackedMethodImplementation.java:76)
at org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator.computeNext(VariableSizeLookaheadIterator.java:60)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:300)
at com.google.common.collect.ImmutableList$Builder.addAll(ImmutableList.java:691)
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:275)
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:226)
at org.jf.baksmali.Adaptors.MethodDefinition.<init>(MethodDefinition.java:92)
at org.jf.baksmali.Adaptors.ClassDefinition.writeVirtualMethods(ClassDefinition.java:325)
at org.jf.baksmali.Adaptors.ClassDefinition.writeTo(ClassDefinition.java:112)
at org.jf.baksmali.Baksmali.disassembleClass(Baksmali.java:152)
at org.jf.baksmali.Baksmali.access$000(Baksmali.java:46)
at org.jf.baksmali.Baksmali$1.call(Baksmali.java:76)
at org.jf.baksmali.Baksmali$1.call(Baksmali.java:74)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Error while processing method Luk/d3dioMtplCj5tmVNYyeRpjPK1nVKeGTUsBPRfeQE6FXE9GRuBijvw05C66NWPi5uhUlWJVeMKq9Qm8OFXPL60W1WN7Gkm77oZB50s48JjMpSft4B7bLOlKS7qwNmSlxINoptF2DtqUXgkp8DYqKIifinUytt4Xm5qDxr1QafyngMvN128pO
G;->CstStfrCQWSLJntNqbEHzZxBWflVgl5ojSsaBRBUvfZbdzbvpdawJvWCgSLdd0byhZgr9tu2Elk0Q3wUKhoHC1SnK6x3PxMtBhr8f9nxGbGoU1GMtzZQIfN670rbv8bl3ULZLf3WFZo6bzF7bemBOBOWlBE8UaUtPvM4N7SyIGdpPd3vRAqh()Ljava/lang/String;
etc.
Interesting dex, if either of you find out what obfuscator was used on it, please let me know
This isn't actually an obfuscator - it's a Chinese(?) protector.
Basically, uses the concept of dead code which is bad (from Dex Education presentation) to insert bad opcodes/junk.
Baksmali handles this correctly by ignoring the class.
Can we skip it while extracting?
@strazzere do you have a reference to the "Dex Education presentation" you mentioned?
nvm found it https://www.youtube.com/watch?v=yIAP2IKfJOM