任意の JVM で、アルゴリズムを Java バイトコードとして実行する必要があると仮定します。その後、クラスの読み込みプロセスをどれほど難読化しても、JVM をハッキングしてバイトコードをどこかにダンプできます。バイトコードを取得したら、制御フロー分析を行うことができます。つまり、どの情報がどこからどこに渡されるかを決定します。
個々の命令の順序を混乱させることはできますが、それによって計算が変わることはありません。アルゴリズムを変更せずに実行したいだけの人にとって、これは何も変更しません。並べ替えによってアルゴリズムの変更がどの程度妨げられるかは、アルゴリズムと制御フローの複雑さに大きく依存します。
あいまいな方法でリフレクションを使用するか、独自のインタープリターを実装してそれを使用してアルゴリズムを実行することにより、制御フローを混乱させることができる場合があります。しかし、これらのアプローチは両方とも、アルゴリズムのパフォーマンスに深刻なペナルティをもたらす可能性があります。
他の言語 (ネイティブ x86 コードなど) では、バイトを命令に分割する方法についてあいまいさを導入することで、逆アセンブラーを混乱させる可能性があります。あるケースでは一部のバイトを命令の末尾部分として使用しますが、別のケースでは別個の命令として使用します。ケース。しかし、Java にはそのようなオプションはありません。バイトコードの意味はあまりにも明確に定義されています。
物事を多少難読化できる方法の 1 つは、アルゴリズムをプログラムの他のステップと密接に混合することです。直線的なプログラムの場合、特に目に見えない GUI オブジェクトや同様の奇妙なものを介して数値を渡す場合、これにより追跡が少し難しくなる可能性があります。しかし、ループなどが必要になると、ループの境界を揃えるのは非常に難しいように思われるため、このアプローチにも大きな可能性があるとは思えません。そして、これに対してすぐに使用できる難読化ツールがあるとは思えないので、手動で行う必要があります。