Javaのソースは逆コンパイルされるので隠せない。

逆コンパイルを防げない。
逆コンパイルされるとコメントがないぐらいでほとんど元のソースと同じものができる。
ProGuardなどの難読化はほとんど意味がない。
ビフォーアフターのソースの違いがなさすぎてびっくり。
クラスファイルをzipみたいなバイナリ圧縮してデータとして隠し持っておいて、メモリ内に展開して実行とかできるんだろうか。
そういうのをやってくれるソフトは見当たらないが。
もしそれをできても解析されるとばれる。
クラスファイルを逆コンパイラがエラー出すように書き換えるという方法もあるんだけど、逆コンパイラに対応されたら意味がなくなるし、エラー出ても詳しい人かならエラーが出ないようにクラスファイルを書き換えることができる。
逆コンパイラがエラーを出すように書き換える処理を自動でやってくれるツールは検索したけど見つからなかった。
昔はあったらしいが。
ネイティブコードに事前コンパイル(AOT)するJavaコンパイラなら簡単に逆コンパイルされることはなくまず安心だ。
現在そのタイプはExcelsior JETと、GCJしかないが、GCJはライセンスがGPLなのでソースを隠したいとなると、Excelsior JETしか選択肢はない。
Excelsior JETは悪くないと思う。
だが、価格がWindows版の一番安い物でさえ16万円または3000ドルと高価だ。
Mac OS X版やLinux版も買うとなるとさらにお金が必要だ。
ソースを隠したいという理由で金出して買うのもいいが、Java以外の言語にするという選択肢もある。
まだプログラムを作り始めていない状態でソースを隠したいならJava以外の言語を選ぶべきだと思う。
C#などの.NET系言語も逆コンパイルされるリスクはJavaと同じだ。
Java、.NET以外の言語で無料のものはライセンスが厳しくてライセンスを守ることに気を使わないとソース公開義務が発生することがある。
そして商用の物は値段が高い。
Javascript系もソースを隠せない。