Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Corrupted .smali files #562

Open
LunarWhisper opened this issue Oct 26, 2017 · 7 comments
Open

Corrupted .smali files #562

LunarWhisper opened this issue Oct 26, 2017 · 7 comments

Comments

@LunarWhisper
Copy link

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


@JesusFreke
Copy link
Owner

What happens when you directly run baksmali to disassemble the apk? Does it generate any errors?

@LunarWhisper
Copy link
Author

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.

@CunningLogic
Copy link

Interesting dex, if either of you find out what obfuscator was used on it, please let me know

@strazzere
Copy link

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.

@LunarWhisper
Copy link
Author

Can we skip it while extracting?

@manizzle
Copy link

@strazzere do you have a reference to the "Dex Education presentation" you mentioned?

@manizzle
Copy link

nvm found it https://www.youtube.com/watch?v=yIAP2IKfJOM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants