Java コードを素早く難読化するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/2124121

  •  22-09-2019
  •  | 
  •  

質問

コードを素早く難読化する方法。私はとても小さいものを持っています Javaアプリ 難読化されたコードをクライアントに配信したいと考えています。についてたくさん聞いてきました プロガード コードを難読化するためにダウンロードしましたが、「abc.jar」ファイルを難読化する方法がわかりません。

私はそのウェブサイトをチェックしましたが、読むべき資料がたくさんありました。高度な難読化は必要ありません。変数、メソッド、クラスの名前を判読できないものに変更するだけの難読化が必要です。ProGuard がこれらすべてに他の多くの機能も提供していることは知っています。

Q1. そこで、単純な難読化ツールや、「abc.jar」を入力するだけで「obfuscate_abc.jar」が出力されるように、proguard を使用するための簡単な手順を教えてください。

Q2. もう 1 つ、私の Java プログラムは外部ライブラリを使用しているので、それらのライブラリも難読化する必要があるでしょうか?

Q3. この難読化に利用できる Eclipse または NetBeans プラグインはありますか?

また、難読化時に作成されたマッピング テーブルを使用して難読化を解除することで、将来その難読化されたコードをデバッグまたは編集できるように、マッピング テーブル ファイルを保持する必要があるとも聞きました。

Q4. それで、もう 1 つの質問は、なぜそのマッピング テーブルを手元に置いておく必要があるのか​​ということです。難読化されていないアプリケーションのコピーを保持しておいて、(将来必要になった場合に) 変更を加えることができます。そのマッピング テーブル ファイルを保持しておく理由はありますか?

役に立ちましたか?

解決

Q1.そこで、単純な難読化ツールや、「abc.jar」を入力するだけで「obfuscate_abc.jar」が出力されるように、proguard を使用するための簡単な手順を教えてください。

ProGuardを使用してください。これは間違いなく良いツールです(SOに関する多くの回答で推奨されています) これです, これです そして これです).

Q2.もう 1 つ、私の Java プログラムは外部ライブラリを使用しているので、それらのライブラリも難読化する必要があるでしょうか?

私見は必要ありません(そうしないかもしれないということさえ言及しません)。

Q3.この難読化に利用できる Eclipse または NetBeans プラグインはありますか?

むしろ、 アリのタスク または proguard-maven-プラグイン. 。見る この質問 必要に応じて、Maven プラグインについて説明します。

Q4.それで、もう 1 つの疑問は、なぜそのマッピング テーブルを手元に置いておく必要があるのか​​ということです。難読化されていないアプリケーションのコピーを保持しておいて、(将来必要になった場合に) 変更を加えることができます。そのマッピング テーブル ファイルを保持しておく理由はありますか?

はい、スタックトレースを「変換」するためです。

他のヒント

私は最初からこれを試してみました。それはあなたが始める必要があります。私はキーが設定ファイルに「キープオプション」を理解することになると思います。

このコードを使用します:

import java.util.*;

public class Example {

    public static void main(String... args) {
        Example ex = new Example();
        ex.go();
    }

    public void go() {
        String[] strings = { "abc", "def", "ijk" };
        for (String s : strings) {
            System.out.println(s);
        }
    }

}

私はExample.jarを作成しました。私は、ProGuardのlibディレクトリからproguard.jarをコピーして、このコマンドラインを実行しました。

java -jar proguard.jar @myconfig.pro

myconfig.proが含まれています:

-injars Example.jar
-outjars ExampleOut.jar
-libraryjars <java.home>/lib/rt.jar

-keep public class Example {
    public static void main(java.lang.String[]);
}

これは、同じ機能を含み、(JADで確認)、難読化されExampleOut.jarを生成します。私はテスト機能に、マニフェストを使用していないことを注意は、私がunjarredとクラスをテストしました。瓶内の実行エントリポイントは、読者に残されます。

使用法セクションするに記載されているより多くのキープオプションがあります。

あなただけの、あなたが難読化は、あなたのコードのためにやっていると思うものは何でもそれらを保護する必要がある場合には他のライブラリを難読化する必要があります。しかし、あなたは、彼らが改変されたバージョンを配布するからあなたを制限するかどうかを確認するために、これらの他のライブラリのライセンスをお読みください。

Q4について:ユーザーがあなたに難読化されたコードからの例外スタックトレースが含まれているバグレポートを送信するときに、マッピングが使用されています。 ProGuardのは、あなたがマッピングを持っている場合は、元のクラス名と行番号にこれらのスタックトレースを翻訳することができます。

ただ、Q4に答える...

のマッピングを維持するための十分な理由があります。クライアントが今まであなたにスタックトレースを送信した場合、どこのコードでスタックトレースがどこから来たことを知って非常に便利です。難読化ツールの目的は、その情報を取り除くことです;-)マッピングを維持することにより、あなたは問題が元のコードで発生した場所へのスタックトレースの変換を可能にする。

私が質問に答えることができます。4.あなたは、デバッグのためにそれを維持する必要があります。スタックトレースを難読化した後、ソースコード内のエラーを見つけること、それはかなり不可能「ライン27上のj6z9rでエラーが発生しました()」のようなものを言うかもしれない、ライン23上で「)printTheAlphabet(」あなたは機能のバグを持っていると言います。

どのように難読化コードへの迅速&汚います:

それを試してみてください。 http://www.daftlogic.com/projects-オンライン-javascriptの-obfuscator.htm のか: http://javascriptobfuscator.com/default.aspx またはGoogleの "JavaScriptの難読化ツールオンライン" ます。

私はそれはJavascriptのために知っているが、あなたは得ることができます https://stackoverflow.com/a/2605051/450148)

これが最善aprouchはありませんが、急いで実際にあるとあなたがセキュリティについてparanoicされていない場合、それが有用であることができます。

編集:コードの次の部分は、直接パスワードを公開しないように、単純なROT13を使用しています。良いことは、「ハッカー」を使用している、アルゴリズムいるかわからない(ようにあなたを、アルゴリズムいるあなたはROT13を置き換えることができます)ですが、それは非常に簡単にそれを打破するのは、次のとおりです。

static String password;

static {
    password = a("NXVNWQX5CHXRWTKGDMHD");
}

private static String a(String b) {
    String c = "eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('k a(b){2 5=\\'\\';o(2 i=0;i<b.e;i++){2 c=b.g(i);2 1=b.f(i);4(c>=\\'a\\'&&c<=\\'m\\')1+=3;6 4(c>=\\'n\\'&&c<=\\'9\\')1-=3;6 4(c>=\\'7\\'&&c<=\\'h\\')1+=3;6 4(c>=\\'7\\'&&c<=\\'p\\')1-=3;2 d=8.l(1);5+=d}j 5}',26,26,'|charcode|var|13|if|sb|else|A|String|z|||||length|charCodeAt|charAt|M||return|function|fromCharCode|||for|Z'.split('|'),0,{}));";

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");
    Object z = "";

    //noinspection EmptyCatchBlock
    try {
        z = engine.eval(c + " a('" + b + "');");
    } catch (ScriptException e) {}

    return z.toString();
}

私は前に yGuardするで簡単に見ていたし、あなたという事実が気に入っていますAntスクリプトに難読化の手順を統合することができます。これは、あなたがしたい場合は、Eclipseなどで非常に簡単にそれを使用することができます。

それはあなたが始めるために準備ができてAntスクリプトの数を提供付属の資料。あなたのプロジェクトで作業するように変更するこれらのちょうど必要性、すなわち正しいパッケージ名などを設定し、レイアウトます。

あなたのAntがEclipseで軌道に乗るためにどのようにクリアしていない場合、あなたはかなりちょうど、プロジェクトにbuild.xmlファイルを追加する必要があり、それにyGuardに付属しているサンプルスクリプトをコピーし、で動作するようにスクリプトを修正し、あなたのプロジェクトとAntビューからyGuardタスクを実行します。

あなたのマッピングテーブルの質問に関しては

。あなたがあなたの元のコードから、バグをあなたの難読化されたjar展示を複製することができない場合、私はあなたがこのようなものが必要かもしれないと思うことができる唯一の理由は次のようになります。この時点では、難読化が問題を引き起こした場合、多分決定するために、難読化されたバージョンで作業する必要があるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top