0

私がJavaで書いている難読化プログラムの場合、特定のアドレスで値を取得する方法を見つける必要があります。たとえば、16進エディタで開いたプログラムでは、アドレス0000001Fは16進値「00」です。さらに、特定のメモリアドレスに書き込むことはできますか?たとえば、0000001Fに書き込み、「00」から「FF」に変更します。

4

2 に答える 2

1

最初の質問に答えるために、ファイルをバイナリ ストリームとして開き、そこから必要なものを読み取ることができます。それはクラスローダの邪魔にはなりませんが、ファイルを操作し、実行時にそれを有効で JVM によってロードされるクラスに変換するカスタム クラスローダがある場合、理論的には確かに可能です。ただし、クラスローダー自体はこの方法で難読化されないため、ポイントは何なのか疑問に思います。

2 番目の質問に答えるには、Java を使用してメモリ アドレスに直接書き込むことはできません。JNIを介して関数を呼び出すことができます(JVMメモリ割り当ての外で)。

あなたがやりたいことに対して間違った言語を使用しているように思えます。

于 2010-08-18T03:17:56.050 に答える
1

間違った言語を使用しています。オペレーティング システム ライブラリ (ほとんどのシステムで) を簡単に呼び出して、特定の場所にあるメモリへのアクセスを試みることができるため、C または C++ を選択することをお勧めします。

ほとんどの POSIX 準拠のオペレーティング システムは、現在のプロセスのアドレス空間の特定の場所にメモリをマップできるようにする mmap を実装しています。

于 2010-08-18T06:36:47.087 に答える