web-dev-qa-db-ja.com

難読化されたコードで文字列を非表示にする

私はAndroid proguardを使用してコードを難読化し、それを逆コンパイルしました。eyes索好きな目から隠したい文字列がたくさんあります。私のコードを逆コンパイルすると、文字列の1つはライセンスサーバーへのURLであり、URLを偽のサーバーを指すように変更することができます(サーバーコードを一般に公開する予定です)。この種の情報を隠す方法は?

また、Rクラスの文字列はすべて乱数であることに気付きましたが、逆コンパイルされたコードにRクラスが見つかりません。それはどこにある?

Foeの例なるほど:new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);

2130903058はレイアウトファイルですが、それは何を参照していますか?番号は、何らかのアドレスを指している場合を除き、何も意味しません。

56
jax

安全ではなくあいまいさに満足していると仮定すると、使用できるメカニズムがいくつかありますが、proguardのような難読化ツールはあなたを助けられません。

これを実現するには、文字列のエンコードまたは暗号化を自分で行う必要があります。使用する方法は、何を防御しようとしているかによって異なります。 .util.Base64、 http://developer.Android.com/reference/Android/util/Base64.html )。エンコードは決して安全ではなく、サイトへの明らかな参照を削除するだけです。

さらに何かを防御しようとする場合は、実際に文字列を暗号化することに移動できます。これを行うには、javax.crypto.Cipher経由のAESのような対称暗号を使用します http://www.androidsnippets。 org/snippets/39/index.html は、適切な使用例を提供します。繰り返しますが、これはハッカーにとっては面倒で安全です。jarのどこかに鍵を保存する必要があるため、暗号化セキュリティは無効になります。

これを明確にするための基本的な手順は次のとおりです。

  1. 既知のキーを使用して、文字列を手動で暗号化します。
  2. この文字列の復号化されたバージョンを使用するようにコードを変換します。例:

前:

public class Foo {
    private String mySecret = "http://example.com";

    ...
}

になる:

public class Foo {
    private String encrypted = "<manually created encrypted string>";
    private String key = "<key used for encryption";
    private String mySecret = MyDecryptUtil.decrypt(encrypted, key);

    ...
}

このすべての(良い)代替手段は、Googleが提供するライセンスサーバーなどのサードパーティのdrmソリューションの使用を検討することです http://Android-developers.blogspot.com/2010/07/licensing-service-for- Android.html 。これは、あなたが自分自身を転がすものよりも安全かもしれませんが、上で説明したものと非常に似た制限を受けます。

32
Mark Hibberd

私がしたことは、グローバルユーティリティクラスに静的文字列の長いリストを作成することでした。文字列の長いリスト内のどこかに、パスキーを複数のチャンクに入れます。

私のコードでは、実際のパスキーが何であるかを簡単に確認できます-しかし、難読化ツールが動作すると、すべての静的変数の名前がA、B、Cなどになり、これ以上簡単に見つけられなくなります。

8

私はROT47を使用しました。対称的なエンコーダー/デコーダーであるため、あまり安全ではありませんが、使用と実装が簡単です。

2
w_g

「もう1つのPerlハッカー」をGoogleで検索する必要があります。これらは、難読化されたコードで文字列を出力するプログラムです。ネット上のPerl以外の言語の例もたくさんあります。

ウィキペディアのエントリ

1
iuiz

DexGuard を使用して文字列を暗号化できます。おそらく、ソースコードに負担をかけることなく、手動で実現するよりも効果的です。

0
Ahmad Ronagh