2016-03-27 34 views
5

Questo può sembrare sospetto, ma ho bisogno di deobfuscate la mia app. Qualche tempo fa ho pubblicato la mia app che ho offuscato con Proguard. Purtroppo non ho salvato quella versione dell'app e ho cambiato molto il codice.Come deobfuscate il file jar usando il mapping.txt generato da Proguard?

Ora ho bisogno del codice di quella versione precedente. Ho ancora il file mapping.txt generato da Proguard.

Ho convertito il file classes.dex in jar (utilizzando lo strumento dex2jar), ora ho bisogno di deobfuscarlo in base a mapping.txt. Ci sono strumenti che possono aiutarmi? Forse Proguard stesso?

UPD. Ho bisogno di uno strumento che possa rinominare automaticamente tutte le classi, le funzioni ecc., Quindi non devo farlo manualmente. Grazie

+0

Probabilmente non è possibile. Una volta compilata l'app, il codice è già "offuscato" dal compilatore. Il caso in cui offuschi di nuovo l'app con Proguard è doppiamente offuscata. Potrebbe esserci un modo per deoffuscare e decompilare l'app. Ti consiglio di salvare e fare il backup di qualsiasi cosa prima di codificarti la prossima volta. – mob41

+0

Questo non ti aiuta ora, ma per prevenire tali problemi in futuro, usa un ** controllo di versione ** (VCS). – F43nd1r

risposta

8

Se si dispone dei mapping, è possibile recuperare ogni classe, campo e nome del metodo. È possibile utilizzare java-asm (una libreria di modifica bytecode) per rimappare i nomi di classe e membro. La maggior parte del lavoro aggiornerà i descrittori dei membri.

Ne ho fatto uno per me e ci è voluto circa un giorno per farlo funzionare in modo affidabile.

Modifica: Non è perfetto, ma è dannatamente vicino. Link. Screenshot of the GUI Assegna un file jar proguarded, i mapping e rinominerà tutto ciò che può trovare. Ci sono alcuni problemi, ma solo guardando la fonte dovrebbe fare il lavoro. Basta scaricare il jar che rende (FileName + "-Re.jar") in un decompilatore come Luyten/JD-GUI. Anche gli input dei file vengono modificati solo tramite i pulsanti. Le caselle di testo sono solo per feedback visivo/conferma.

Modifica 2: NPE corretto che si verifica quando la voce della classe nei mapping non esiste nel contenitore specificato.

Modifica 3: risolto un sacco di problemi con conseguente metodi non rinominati.

Modifica 4: jar compilato caricato su github (versioni, nel file zip è nell'utilità di mapping), aggiunto supporto per più tipi di mapping.

+0

Sembra la cosa che voglio, sfortunatamente ottengo NPE quando preme il pulsante "Annulla": * java.lang.NullPointerException su me.lpk.mapping.MappedClass. (MappedClass.java:38) a me.lpk.mapping.ProguardLoader.readClass (ProguardLoader.java:121) a me.lpk.mapping.ProguardLoader.read (ProguardLoader.java:61) a me.lpk. mapping.ProguardLoader.read (ProguardLoader.java:41) su me.lpk.mapping.MappingGen.mappingsFromProguard (MappingGen.java:49) su me.lpk.ReProguard $ 4.actionPerformed (ReProguard.java:123) .. .* – user2758776

+0

Sembra che l'abbia lanciato perché il nome della classe che ha provato a caricare non esisteva nel barattolo. Rielaborata la classe ProguardLoader per verificare ciò. Se la classe non esiste nel vaso, la mappatura per quella classe verrà ignorata. Riscaricato lo strumento con la correzione. –

+0

Grazie per il vostro impegno, ma continuo a ricevere NPE: java.lang.NullPointerException su me.lpk.mapping.MappedClass. (MappedClass.java:38) a me.lpk.mapping.ProguardLoader.readClass (ProguardLoader.java:126) a me.lpk.mapping.ProguardLoader.read (ProguardLoader.java:61) a me.lpk. mapping.ProguardLoader.read (ProguardLoader.java:41) a me.lpk.mapping.MappingGen.mappingsFromProguard (MappingGen.java:49) a me.lpk.ReProguard $ 4.actionPerformed (ReProguard.java:123) Forse puoi condividere con me il codice sorgente del tuo strumento? Grazie! – user2758776

2

Suggerisco di utilizzare lo strumento proguard come suggerito in above answer insieme a Enigma. La soluzione per il tuo problema non può essere molto semplice ed è necessario utilizzare una combinazione di strumenti disponibili per risolverlo.

+0

Oltre a Proguard ho anche fatto funzionare con mappature Engima. Tuttavia non ho compilato una versione con la GUI Enigma attiva. Tuttavia, la fonte è sul repository: https://github.com/LPK-Matt/SkidSuite2/blob/master/SkidReob/src/me/lpk/gui/windows/mapping/WindowEnigma.java –

+0

@DankVader che url dà un 404 – beppe9000

+0

@ beppe9000 Il file specifico è stato rimosso in un commit ma il repository è ancora attivo. https://github.com/LPK-Matt/SkidSuite2/releases Da quando è stato creato questo commento è stato compilato e inserito nelle versioni. –