1

さて、Java クラス ファイルにセキュリティを追加しようとしています。逆コンパイルしたくありません。だから私がやったことは、JavaアプリがWebリクエストを介してチェックするログインシステムを作成したことです。ログイン情報が正しければ、スクリプトが実行されます。ただし、セキュリティをさらに向上させ、クラス ファイルをオンラインでホストしたいと考えています。

オンラインでホストされているファイルをダウンロードして実行するにはどうすればよいですか?

また、アプリ/スクリプトの実行が停止するか、閉じられると、.class ファイルが削除されます。

ファイルをダウンロードする必要がなく、オンラインサーバーから取得してコンパイル/実行するだけの場所を好むでしょう。

4

2 に答える 2

5

あなたが行ったことと、あなたが提案していることを見て、それらが本当にうまくいくかどうか見てみましょう:

  • パスワードを要求します。これは簡単に打ち負かすことができます:
    1. クラスファイルをキャプチャします。
    2. 逆コンパイルします。
    3. リモート呼び出しを行う場所を特定して、ログイン チェックを行い、応答をチェックします。
    4. バイトコードを変更して、そのすべてを削除します。
  • クラス ファイルをインストールするのではなく、必要に応じてダウンロードし、終了したら削除します。また倒しやすい。
    1. ファイルをダウンロードするために行われたネットワーク要求をキャプチャします。
    2. (たとえば) を使用してリクエストを再生するcurlwget、ダウンロードしたクラス ファイルをキャプチャします。
    3. 上記のように進みます。

また、バリエーションも比較的簡単に打ち負かすことができます。

  • 難読化は、手動で逆コンパイルしたり、デバッガを使用してバイトコードを実行したりすることで、最終的にいつでも無効にすることができます。
  • ワンタイムキーなどを使用したダウンロードは、手順をリバースエンジニアリングしてワンタイムキーを抽出することで無効にすることができます...使用する前に。
  • JVM はある時点でバイトコードを復号化された形式で保持する必要があるため、バイトコードの暗号化は失敗する可能性があります。したがって、バイトコードの復号化の手段をコードに埋め込む必要があります...リバースエンジニアリングが可能です。

肝心なのは、自分の実行プラットフォームを制御するユーザーから物事を秘密にしておくことに依存するセキュリティスキームを、熟練した意思のある人が打ち負かすことを防ぐことは不可能だということです。

期待できる最善の方法は、スキルの低い攻撃者を阻止し、スキルのある攻撃者を遅くすることです。あなたは自問する必要があります...それは本当に努力する価値がありますか?

(注: 使用する実装言語に関係なく、同じ問題があります。)

于 2013-04-20T01:02:32.617 に答える
1

新しいURLClassLoader (「デフォルト」の Java クラスローダー) を作成し、ファイルを保存した場所をポイントします。

// the directory where you're saving the .class file
File tmpDir = new File("/tmp/yadda/blah/");
ClassLoader cl = new URLClassLoader(new URL[] { tmpDir.toURI().toURL() }, Thread.currentThread().getContextClassLoader());
Class<?> cls = cl.loadClass("SuperSecretClass");
// use reflection to instantiate cls, call methods, etc.

(親クラスローダーを渡すことは、非 webapp では必要ないかもしれませんが、私はその詳細をテストするのが面倒です。スレッドのクラスローダーを明示的に使用すると、いずれかの方法で機能します。

これは、シークレット クラスがパッケージに含まれていないことを前提としています。パッケージに含まれている場合は、一時ディレクトリ内に適切なディレクトリ構造を作成し、通常どおりパッケージ ツリーのルートにクラスローダーを指定する必要があります。

また、この種のあいまいさによるセキュリティは、悪い考えのように思えます。セキュリティで保護されていない接続を介している場合、断固とした攻撃者がファイルを盗聴する可能性があり、ファイルがディスク上にある期間がまだあります。ストリームを直接読み取る完全なカスタムを作成することもできClassLoaderますが、クラス ファイルでさえ、もう少し努力すれば復元できる可能性があります。(デバッガーをメインアプリに向けてストリームの読み取りをインターセプトするようなものです。) のjavadocClassLoaderは、これを行う方法の例を提供します。

于 2013-04-20T00:34:42.983 に答える