LoginSignup
0
1

More than 3 years have passed since last update.

apkからjavaファイル生成(BytecodeViewer式)

Last updated at Posted at 2020-01-19

dex2jarでは精度がいまいちだったので精度の良かった物を紹介します

Bytecode Viewer

dex2jarの代わり。
GUI操作です。JD-GUIのような類ですね。
普通に便利です。apkやdex、jar、zip、classがデコンパイルできます。
デコンパイル後は好きなデコンパイラーで見れます。
apkから出たclassの保存とか、デコンパイラーでデコンパイルしたjavaの出力とか出来ます。
ただjavaへの出力は不安定です。
これをダウンロードして起動すすると「Drag class/jar/APK/DEX here」と書いてあるところがあるのでそこに.apkをドラッグ・アンド・ドロップしてください。
そしたら処理が終わると完成品が出てくるのでFile->Save As Zipからzipで保存してください。

Procyon

Bytecode Viewer内臓のデコンパイラーですね。
安定していると思います。

デコンパイル方法は、Bytecode Viewerで出力したzipの拡張子をjarに変更し

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

Procyonのjarファイル名は自分のものに合わせて変えてください。
myJar.jarはBytecode Viewerで出力したファイル名です。
そしてこれを実行。outは出力先ディレクトリですね。ここにjavaファイルが入ります。予め作る必要はありません。

デコンパイラの比較

私は普段Fernflower派なのですが(普段使ってるIDEがIntellij IDEAなので)出来たソースコードを見て比較とかしましたがFernflowerより良いなと思った点が2つ。

  • ソースコードの書き方が簡略化されている
  • class内に書かれていない変数名がわかりやすいネーミング

精度としてはほぼFernflowerと同じで、Fernflowerでは書いてあってProcyonでは書いてなかったり、その逆もあったり。
結構精度は高いと思います。

for文比較
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のほうが見やすいですよね。
なのでProcyonが一番最適かと思います。
エラーの数はFernflowerが大量に吐いてましたがProcyonは1回だけ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1