4

を使用してWebからjarファイルをロードしようとしていますが、すべて正常に動作しますが、ロードされたすべてのクラスはWindowsの一時ディレクトリに保存されたままになり、プログラムURLClassLoaderを呼び出すまで難読化解除のためにコピーできます.classLoader.close();ClassNotFoundException

ディスクに保存せずにクラスをロードできますか?

(メモリのみ)別のソリューションでは、jar クラスを暗号化し、クラスを復号化するカスタムClassLoaderを作成しますが、例が見つかりません。

このトピックに関するドキュメントや記事を探してみましたが、何も見つかりませんでした:(

実装が可能かどうか、またそのトピックに関する資料をどこで入手できるか教えてください。ありがとう!

4

2 に答える 2

2

コードを実行しているマシンにアクセスできる人なら誰でも、カスタム クラスローディングを実行するコードをいつでも手に入れることができることをご存知ですか? つまり、クラス自体を逆コンパイルして、復号化されたクラスを書き出すだけで、この演習全体が無意味になります。確かに、ほとんどの人はその方法を知りませんが、可能です。

本当に必要な場合は、コードを難読化することをお勧めします。逆コンパイラを混乱させる難読化コード構成を使用していない限り (または機能jadなどを混乱させる場合を除き)、ライブラリが逆コンパイルされないように保護するためにできることはほとんどないため、人々がライブラリを手に入れることを心配しても、うまくいきません。サポートされていないため、深刻な壊れた逆コンパイル コードが生成されます)。

十分な知識と適切な動機があれば、誰でもそれを行う方法を見つけ出すでしょう。

于 2014-03-24T14:07:16.397 に答える
1

ネットワーク経由でクラスを取得する独自の ClassLoader を作成するのは非常に簡単です。ClassloaderのJavaドキュメントの例:

class NetworkClassLoader extends ClassLoader {
     String host;
     int port;

     public Class findClass(String name) {
         byte[] b = loadClassData(name);
         return defineClass(name, b, 0, b.length);
     }

     private byte[] loadClassData(String name) {
         // load the class data from the connection
          . . .
     }
 }

実装するだけでloadClassData、他のすべてが処理されます。そのloadClassData機能では、暗号化などを行うことができます。

于 2014-03-24T14:14:09.237 に答える