jhoja
Java逆アセンブラ for Jasmin, JD向け逆コンパイル阻止機能付き
English
2018.3.24更新
jhojaとは
jhojaはJavaクラスファイルの逆アセンブラです。
JavaクラスファイルをJasminアセンブラのソースコードに変換します。
jhojaは逆コンパイルを阻止するコードを埋め込むことができます。(-g オプション)
コマンドラインツールです。
GUIには対応していません。
SWAG javap2 Ver 1.02ベースです。
重大な問題
Jasminで行う再アセンブルはコメントを除きアスキーコードのソースのみに対応しています。
その他の文字コードには対応していません。
jhojaはUTF-8の出力に対応しています。
ですが、JasminはUTF-8に対応していません。
もしUTF-8のソースをお使いのシステムロケールの文字コードに変換すれば、お使いのシステムでは動くかも知れません。
(SJISに変換したところ、日本語ロケール(CP932)のWindowsでは動いているようです。)
しかしそれはクロスプラットフォームではなくなるということです。
そしてJavaの標準から外れた仕様になります。
別のロケールでは文字化けするでしょう。
Javaクラスファイルに本来のUnicodeではない文字コードの文字を含むようにJasminでアセンブルした場合はjhojaの逆アセンブル時に文字化けします。
逆コンパイル阻止(防止)機能JD-GUIなどのJavaクラスファイル逆コンパイラに効果がありますがJadには効果がありません。
ダウンロード
ダウンロード jhoja Ver 1.01 for Windows
(ソースパッチ同梱)
jhojaとjavap,SWAG javap2は何が違うのか?
jhojaはJasminでアセンブルできるソースを出力できます。
そしてjhojaには逆コンパイル阻止機能があります。
Oracle javap と SWAG javap2 はそれらの機能がありません。
jhojaはUTF-8の出力に対応しています。
javap2はUTF-8の出力に対応していません。
逆コンパイル阻止(防止)機能
JD-GUIなどのJavaクラスファイル逆コンパイラに効果があります。
残念ながらJadには効果がありません。
逆コンパイル阻止機能は変換したクラスファイルの実行速度には影響しません。
しかし普通のクラスファイルよりもサイズが少し大きくなります。
(デバッグ情報があれば取り除かれるので小さくなる場合もあります。)
なぜなら逆コンパイル阻止コードを埋め込むからです。
クラスファイルの変換にはJasmin(Java assembler)とJREまたはJDKが必要です。
強固な阻止機能ではありません。
jhojaとJasminを使うと割と簡単に逆コンパイル阻止を破ることが可能です。
もし完全に阻止したい場合はJavaクラスファイルでの配布は諦めるしかないと思います。
デバッグ情報
いくつかのデバッグ情報は逆アセンブルしたソースのコメントとして見ることができます。
ただし逆アセンブルしたソースで再アセンブルするとデバッグ情報は消失します。
サポートするOS
バイナリ実行ファイルはMicrosoft Windowsをサポートします
C++ Builder XE8でコンパイルしています。
C++で書かれていますが、ほとんどC言語です。
再コンパイルすれば他のOSでも動くようになるとは思います。
(極わずかなソースの修正が必要になると思います。)
バイナリのライセンス
Apache v2 license.
(SWAG javap2のライセンスに従っています。)
jhoja Ver 1.01のソースパッチのライセンス
Apache v2 license.
(SWAG javap2のライセンスに合わせました。)
(C) Masaki Oba
admin@nabeta.tk
http://www.nabeta.tk
使い方
使い方: jhoja [-g] [-h] xxx.class > xxx.j
-g: 逆コンパイル阻止コードを埋め込む。
-h: ヘルプを表示する。
例:
jhoja -g xxx.class > xxx.j
jhoja xxx.class > xxx.j
jhoja xxx.class | more
Jasminと合わせた使い方の例
逆コンパイル阻止コードを埋め込まない場合。
jhoja xxx.class > xxx.j
java -jar jasmin.jar xxx.j
逆コンパイル阻止コードを埋め込む場合。
jhoja -g xxx.class > xxx.j
java -jar jasmin.jar xxx.j
全クラスファイルの逆コンパイル阻止バッチファイルの例
Windowsのバッチファイルです。
Jasmin(Java assembler)とJREまたはJDKが必要です。
C:\>zenbu *.class
zenbu.bat
@echo off
for %%f in (%*) do (
jhoja -g %%f > %%f.j
java -jar jasmin.jar %%f.j
)
(UNIX系シェルスクリプトで書く場合は$をなんらかの方法でエスケープしないとJavaのファイル名に含まれる$と衝突してうまくいかない。)
Link
SWAG Javap2
JASMIN HOME PAGE
メール
admin@nabeta.tk
Raspberry Pi3をパソコンとして使おうとする
あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ