Générer un fichier java à partir d'apk (expression de la visionneuse de bytecode)

La précision de dex2jar n'était pas bonne, je vais donc vous présenter celle avec une bonne précision.

Bytecode Viewer https://bytecodeviewer.com/

Au lieu de dex2jar. C'est une opération GUI. C'est un peu comme JD-GUI. C'est généralement pratique. Vous pouvez décompiler apk, dex, jar, zip et class. Après la décompilation, vous pouvez le visualiser avec votre décompilateur préféré. Vous pouvez enregistrer la classe depuis apk, ou sortir java décompilé par le décompilateur. Cependant, la sortie vers java est instable. Si vous le téléchargez et le démarrez, il y a un endroit où «Faites glisser la classe / jar / APK / DEX ici», alors faites glisser et déposez .apk là-bas. Ensuite, lorsque le processus est terminé, le produit fini sortira, alors enregistrez-le sous forme de zip à partir de Fichier-> Enregistrer sous Zip.

Procyon https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

C'est un décompilateur avec une visionneuse Bytecode intégrée. Je pense que c'est stable.

Pour décompiler, changez l'extension de la sortie zip de Bytecode Viewer en jar.

java -jar procyon-decompiler-x.x.xx.jar -jar myJar.jar -o out

Modifiez le nom du fichier jar Procyon en fonction du vôtre. myJar.jar est le nom de fichier généré par Bytecode Viewer. Et fais ça. out est le répertoire de destination de sortie. C'est là que va le fichier java. Il n'est pas nécessaire de le faire à l'avance.

Comparaison du décompilateur

Je suis généralement une secte Fernflower (parce que l'IDE que j'utilise habituellement est Intellij IDEA), mais je l'ai comparé en regardant le code source résultant, mais il y a deux points que je pensais meilleurs que Fernflower.

La précision est presque la même que celle de Fernflower, elle est écrite en Fernflower mais pas en Procyon, et vice versa. Je pense que la précision est assez élevée.

pour la comparaison de phrases Fernflower

ServiceApiEnvironment[] var1 = values();
int var2 = var1.length;

for(int var3 = 0; var3 < var2; ++var3) {
  ServiceApiEnvironment var4 = var1[var3];
  if (var4.equals(var0)) {
    return var4;
  }
}

Procyon

for (final ServiceApiEnvironment serviceApiEnvironment : values()) {
  if (serviceApiEnvironment.equals(s)) {
    return serviceApiEnvironment;
  }
}

Procyon est extrêmement plus facile à voir, n'est-ce pas? Je pense donc que Procyon est le meilleur. Fernflower a craché beaucoup d'erreurs, mais Procyon une seule fois.

Recommended Posts

Générer un fichier java à partir d'apk (expression de la visionneuse de bytecode)
Java à partir du débutant, déclaration de classe / génération d'objet
Génération de séquence Java
création de fichier java
[Java] Expression Lambda
Expression lambda Java
Comment passer d'Eclipse Java à un fichier SQL
[Java] Comment extraire le nom du fichier du chemin