2009-06-10 10 views
3

私は難読化に非常に新しく、antには多くの経験がありません。 ProGuard(または他のオープンソースの難読化ツール)を使用して通常のJavaアプリケーションを難読化する手段を提供してくれます。現在、私はNetBeans 6.5.1を使用しています.Java MEを作成すると難読化機能しか見られません。私はhttp://wiki.netbeans.org/DevFaqModuleObfuscationを見ましたが、彼らが何を言っているのか分かりません。Netbeans難読化

ありがとうございます。

+0

あなたはどちらそのページのビットを理解していませんか?あなたはAntを理解していますか? –

答えて

9

あなたが指摘しているFAQは、NetBeansモジュールを難読化するためのものです。これは非常に複雑なユースケースであるので、私はそれはあなたが興味のある通常のアプリケーションではないことを前提としています

非常に簡単に:。難読化プロセスは、それがより困難にするために、クラス、メソッドやフィールドの名前を変更しますアプリケーションをリバースエンジニアリングする必要があります。

これは、いくつかの問題が発生します。

  • JVMは、パブリッククラスのパブリック静的な無効メイン(文字列の引数[])を持っているあなたのアプリケーションを必要とするので、あなたは
  • この名前を変更しないProGuardのを伝える必要があります
  • あなたがイントロスペクションの任意の並べ替えを使用している場合は、手動

Additionallで説明したように、あなたは、

  • other casesを変更され、関連する名前を保護する必要がありますproguardは未使用のコードを取り除きます。使用されているが直接参照されていないクラスがある場合は、-keepも必要です。

    プロガイドのドキュメントには、単純なアプリケーションを難読化する方法のexampleが含まれています。ここでは(いくつかのより少ない混乱名前で)説明した例である:

    -injars  application.jar  # obfuscate all the classes in the named jars 
    -outjars  obfuscated.jar   # save all the obfuscated classes to the named jar 
    -libraryjars <java.home>/lib/rt.jar # these are all the libraries that the application uses 
    -printmapping obfuscation.map  # save a file linking the original names to the obfuscated ones 
                # this helps understanding stack traces from the obfuscated application 
    
    # we need to keep our main class and the application entry point 
    -keep public class com.mycompany.Application { 
        public static void main(java.lang.String[]); 
    } 
    

    あなたが-dontshrinkを指定しない限り、ProGuardのは、任意のコード保たれていないか、いずれかのままのコードから参照されていないを削除します。したがって、上記の設定では、メインメソッドによって(間接的に)参照されないコードはすべて削除されます。

    Proguardには、NetBeansワークフローとの統合に使用できるAntタスクが含まれています。私はAntを使わないで手作業で最初に試してみることをお勧めします。 NetBeansを使用してアプリケーションjarをビルドし、上記の設定で難読化しようとします(必要に応じてfleshed)。無数のものが間違っている可能性があるので、難読化されたアプリケーションをテストしてください。 Proguardの設定が完了したら、ビルドファイルにAntタスクを追加して、NetBeans内の難読化プロセスを自動化してみてください。

  • +0

    助けてくれてありがとうございますが、次のようになっています Warning:javax.swing.JDialog:スーパークラスまたはインターフェイスが見つかりません。javax.swing.TransferHandler $ HasGetTransferHandler Warning:javax.swing.JWindow:スーパークラスが見つかりませんjavax.swing.JFrame:スーパークラスまたはインタフェースjavaxを発見できません。 swing.TransferHandler $ HasGetTransferHandler 私はTransferHandler $ HasGetTransferHandler.classを持つrt.jarを含んでいました。何か案は? – Jon

    +0

    マニュアルにあります: '-dontskipnonpubliclibraryclasses':http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass – jackrabbit

    2

    -dontskipnonpubliclibraryclasses以外の解決策は、JARファイルのコードのコンパイルに使用したのと同じJDKを使用してproguardを実行することです。例えば、代わり

    使用/usr/local/jdk1.5.0/bin/java -jar ../proguard3を../proguard3.8/lib/proguard.jar -jar ジャワの

    。 8/libに/ proguard.jar

    ヤコブ