JD向け逆コンパイル阻止機能付きEnglish2018.3.24更新jhojaとはjhojaはJavaクラスファイルの逆アセンブラです。JavaクラスファイルをJasminアセンブラのソースコードに変換します。jhojaはJD向けの逆コンパイルを阻止するコードを埋め込むことができます。オプション)コマンドラインツールです。GUIには対応していません。javap2からフォークしました。http://www.swag.uwaterloo.ca/javap2/重大な問題Jasminで行う再アセンブルはコメントを除きアスキーコードのソースのみに対応しています。その他の文字コードには対応していません。jhojaはUTF-8の出力に対応しています。JasminはUTF-8に対応していません。UTF-8のソースをお使いのシステムロケールの文字コードに変換すれば、お使いのシステムでは動くかも知れません。(SJISに変換したところ、日本語ロケール(CP932)のWindowsでは動いているようです。)しかしそれはクロスプラットフォームではなくなるということです。Javaの標準から外れた仕様になります。別のロケールでは文字化けするでしょう。Javaクラスファイルに本来のUnicodeではない文字コードの文字を含むようにJasminでアセンブルした場合はjhojaの逆アセンブル時に文字化けします。逆コンパイル阻止(防止)機能JD-GUIなどのJavaクラスファイル逆コンパイラに効果がありますがJadには効果がありません。javap2は何が違うのか?jhojaはJasminでアセンブルできるソースを出力できます。jhojaにはJD向けの逆コンパイル阻止機能があります。それらの機能がありません。jhojaはUTF-8の出力に対応しています。javap2はUTF-8の出力に対応していません。逆コンパイル阻止(防止)機能JD-GUIなどのJavaクラスファイル逆コンパイラに効果があります。残念ながらJadには効果がありません。逆コンパイル阻止機能は変換したクラスファイルの実行速度には影響しません。普通のクラスファイルよりもサイズが少し大きくなります。(デバッグ情報があれば取り除かれるので小さくなる場合もあります。)なぜなら逆コンパイル阻止コードを埋め込むからです。クラスファイルの変換にはJasmin(Javaアセンブラ)とJREまたはJDKが必要です。強固な阻止機能ではありません。jhojaとJasminを使うと割と簡単に逆コンパイル阻止を破ることが可能です。完全に阻止したい場合はJavaクラスファイルでの配布は諦めるしかないと思います。jhojaが逆コンパイル阻止(防止)機能を埋め込んだJavaクラスファイルを逆コンパイラのJD-GUIで逆コンパイルしようとするとメソッド内の逆コンパイルは全て失敗します。importとクラスファイルの名前のクラスの変数の宣言と各メソッドの宣言は復元できています。理論としてはJava言語からコンパイルされたバイトコードとしては有り得ないバイトコードを埋め込むことにより逆コンパイラを混乱させ逆コンパイルを阻止(防止)します。好き勝手に有り得ないバイトコードを埋め込めるかというとそうでもありません。VMは実行直前にクラスファイルの整合性をチェックしていて意図的に書いてある実行されない部分のバイトコードであってもエラーを出して実行しない場合があります。VMにエラーとして跳ねられることなく且つ逆コンパイラを混乱させるバイトコードを埋め込む必要があります。デバッグ情報いくつかのデバッグ情報は逆アセンブルしたソースのコメントとして見ることができます。逆アセンブルしたソースで再アセンブルするとデバッグ情報は消失します。XE8でコンパイルしています。C++で書かれていますが、ほとんどC言語です。再コンパイルすれば他のOSでも動くようになるとは思います。(極わずかなソースの修正が必要になると思います。)Intel/AMD系CPUのGNU/Linuxではwineを使うことでWindows版を動かすことができます。license.(SWAGのライセンスに従っています。license.(SWAGのライセンスに合わせています。Obaadmin@nabeta.tkhttp://www.nabeta.tk出力される逆アセンブルコードの例(部分)ラベルに対応しています。逆コンパイル阻止コードを埋め込む。逆コンパイル阻止コードを埋め込まない場合。xxx.j逆コンパイル阻止コードを埋め込む場合。xxx.j全クラスファイルの逆コンパイル阻止バッチファイルの例Windowsのバッチファイルです。Jasmin(Javaアセンブラ)とJREまたはJDKが必要です。%%f.j)(UNIX系シェルスクリプトで書く場合は$をなんらかの方法でエスケープしないとJavaのファイル名に含まれる$と衝突してうまくいかない。同梱のHTMLファイルを極わずかに修正。同梱のHTMLファイルを修正及び追記。