0

私が持っていると言う

private void ThisIsMySecurityMethodPleaseLookHERE() {
//security stuff
}

私のプログラムでは、そのメソッドは実際に実行されたコードのどこにも呼び出されていません。バイトコードにコンパイルされますか?または、Javaコンパイラはその事実を認識し、それを除外しますか?本当に呼び出されていないので、過去のバイトコードになることは決してないでしょう。

Javaは逆コンパイルが簡単なことで有名なので、私は尋ねます。未使用のメソッドはすべて、.classファイルの1つを逆コンパイルするときにも存在しますか?

これは当てはまらないと思います。なぜなら、そうだとすれば、すべてのJavaファイルには実際のコードを隠すための膨張コードがあり、難読化ツールを通過するからです。

カジュアルなハッカーに抵抗するために、難読化以外の方法を考えようとしています。

4

3 に答える 3

9

なぜ何かを想定するのですか?javap -cバイトコードの内容を確認するために使用します。

コンパイラがプライベートメソッドがリフレクションによって呼び出されるかどうかを知ることができないことを考えると、私はそれが個人的にはまだ存在していると思います。

これが何を意味するのかわかりません:

これは当てはまらないと思います。なぜなら、そうだとすれば、すべてのJavaファイルには実際のコードを隠すための膨張コードがあり、難読化ツールを通過するからです。

ほとんどの開発者が、隠すことによるセキュリティはほとんど保護されていないことを理解してほしいと思いますが、コード自体の真の価値は、通常、実装だけでなく、設計などにもあります。ですから、クラスに機密情報を含めないでください。ただし、同様に偏執的になりすぎないようにしてください。攻撃者を打ち負かそうとするコストと、攻撃者が「勝つ」コストを比較検討する必要があります。そのバランスは、関係するコードと、防御しようとしている攻撃の種類によって異なります。

于 2011-12-12T19:12:15.043 に答える
1

プライベートメソッドは実際にはバイトコードになります。たぶんアセンブリコード。これらすべてのメソッドがルーチンに変換されることを考える必要があります。そのため、使用されていないプライベート メソッドについては、バイト コード ブロックにルーチンが存在します。

別の注意として、このようなものをクリーンアップし、使用されていない余分なコード/クラスを削除するツールがあります。その場合、はい、逆コンパイルされたコードには含まれていません。

于 2011-12-12T19:13:12.143 に答える