アプリケーションでプライベートAPIキーを保存および保護するためのベストプラクティス[終了]


373

ほとんどのアプリ開発者は、いくつかのサードパーティライブラリをアプリに統合します。DropboxやYouTubeなどのサービスにアクセスする場合や、ロギングをクラッシュさせる場合。サードパーティのライブラリとサービスの数は驚異的です。これらのライブラリとサービスのほとんどは、なんらかの方法でサービスを認証することによって統合され、ほとんどの場合、これはAPIキーを介して行われます。セキュリティ上の理由から、サービスは通常、公開鍵と秘密鍵を生成します。これらの鍵は秘密鍵とも呼ばれます。残念ながら、サービスに接続するには、この秘密鍵を使用して認証する必要があるため、おそらくアプリケーションの一部である必要があります。言うまでもなく、これは巨大なセキュリティ問題に直面しています。公開および秘密のAPIキーはAPKから数分で抽出でき、簡単に自動化できます。

私がこれに似たものを持っていると仮定すると、秘密鍵をどのように保護できますか?

public class DropboxService  {

    private final static String APP_KEY = "jk433g34hg3";
    private final static String APP_SECRET = "987dwdqwdqw90";
    private final static AccessType ACCESS_TYPE = AccessType.DROPBOX;

    // SOME MORE CODE HERE

}

あなたの意見では、秘密鍵を保存するための最良かつ最も安全な方法は何ですか?難読化、暗号化、どう思いますか?



私は、画像/ PNG形式で保存していたとBufferReaderとしてPNGてキーを取得
スミット

これは正当な懸念事項であり、Firebase Android SDK githubページgithub.com/firebase/firebase-android-sdk/issues/1583に同様の問題を投稿したと思います。これが処理されるかどうか見てみましょう。
grebulon

回答:


348
  1. コンパイルされたアプリケーションには、キー文字列だけでなく、定数名APP_KEYおよびAPP_SECRETも含まれています。そのような自己文書化コードからキーを抽出することは、たとえば、標準のAndroidツールdxを使用すると簡単です。

  2. ProGuardを適用できます。キー文字列は変更されませんが、定数名は削除されます。また、可能であれば、クラスとメソッドの名前を短く、意味のない名前に変更します。キーの抽出には、どの文字列がどの目的を果たしているかを把握するために、さらに時間がかかります。

    ProGuardの設定は、恐れるほど難しくないはずです。まず、project.propertiesに記載されているように、ProGuardを有効にするだけです。サードパーティのライブラリに問題がある場合は、proguard-project.txtで、警告を抑制したり、難読化されないようにする必要がある場合があります。例えば:

    -dontwarn com.dropbox.**
    -keep class com.dropbox.** { *; }

    これはブルートフォースアプローチです。処理されたアプリケーションが機能したら、このような構成を調整できます。

  3. たとえばBase64エンコーディングを使用して、またはできればより複雑なものを使用して、コード内の文字列を手動で難読化できます。多分ネイティブコードです。ハッカーは、エンコードを静的にリバースエンジニアリングするか、適切な場所でデコードを動的にインターセプトする必要があります。

  4. ProGuardの特殊な兄弟であるDexGuardのような商用の難読化ツールを適用できます。さらに、文字列とクラスを暗号化/難読化できます。キーを抽出するには、さらに時間と専門知識が必要です。

  5. 独自のサーバーでアプリケーションの一部を実行できる場合があります。鍵を保管しておけば安全です。

結局のところ、それはあなたがしなければならない経済的トレードオフです:キーがどれほど重要であるか、どれだけの時間またはソフトウェアが余裕があるか、キーに興味を持っているハッカーはどれだけ洗練されているか、彼らがどれだけの時間を望んでいるかキーがハッキングされるまでの遅延の価値、どのくらいの規模で成功したハッカーがキーを配布するかなどです。キーなどの小さな情報は、アプリケーション全体よりも保護することが困難です。本質的に、クライアント側のすべてが壊れることはありませんが、確かにレベルを上げることができます。

(私はProGuardとDexGuardの開発者です)


2
@EricLafortuneプライベートキー文字列がJavaクラスと文字列リソースXMLのどちらに格納されている場合でも違いはありませんか?
アラン

1
@EricLafortune Androidキーストアシステムを使用してキーを安全に保存できるようになりましたか?(developer.android.com/training/articles/keystore.html
デビッド・トーマス

1
@DavidThomas:キーストアを使用してみましたか?Javaクラスで記述されたAPIキーを難読化したい。返信してください
Sagar Trehan 2016

1
Android KeyStoreはこれに役立ちますか?(developer.android.com/training/articles/...
Weishi曽

1
#5わかりません。元の問題とまったく同じ問題はありませんか?
ピート

80

私の考えでは、最初の1つだけがいくつかの保証を与えるいくつかのアイデア:

  1. あなたの秘密をインターネット上のいくつかのサーバーに保管し、必要なときにそれらをつかんで使用してください。ユーザーがDropboxを使用しようとしている場合、サイトにリクエストして秘密鍵を取得することを妨げるものは何もありません。

  2. 秘密をjniコードに入れ、いくつかの変数コードを追加して、ライブラリを大きくし、逆コンパイルを困難にします。また、キー文字列をいくつかの部分に分割して、さまざまな場所に保管することもできます。

  3. 難読化ツールを使用し、コードにハッシュされたシークレットを入れ、後で必要に応じてハッシュを解除します。

  4. いずれかの画像の最後のピクセルとして秘密鍵をアセットに入れます。次に、必要に応じてコードで読み取ります。コードを難読化すると、コードを読み取るコードを非表示にするのに役立ちます。

APKコードの読み取りがいかに簡単かを簡単に確認したい場合は、APKAnalyserを取得します。

http://developer.sonymobile.com/knowledge-base/tool-guides/analyse-your-apks-with-apkanalyser/


46
ユーザーがアプリを逆コンパイルできる場合でも、自分のサーバーに対して行われたリクエストを判別し、それを実行してシークレットを取得できます。ここには特効薬はありませんが、いくつかの手順を実行すれば、大丈夫だと思います!アプリが非常に人気がある場合でも、多分そうではありません。
Matt Wolfe

3
ええ、数1は保証を与えません。
marcinj 2013年

42
画像の中にキーを隠すというアイデアが本当に好きです。+1
IgorČordaš2014年

1
@MarcinJędrzejewski4番目の解決策について(サンプルコードまたは切り取ったコードを使用して)詳細を説明しますか?ありがとうございました。
Dr.jacky

2
@ Mr.Hydeこれはステガノグラフィーと呼ばれ、ここではサンプルコードを提供するには複雑すぎるため、googleで例を見つけることができます。私はここでそれを見つけました:dreamincode.net/forums/topic/27950-steganography。アイデアは素晴らしいですが、apkコードは逆コンパイルできるため、その美しさを台無しにします。
marcinj 2016

33

別のアプローチは、そもそもデバイスに秘密を持たないことです!モバイルAPIのセキュリティテクニック(特にパート3)を参照してください。

インダイレクションの古くからの伝統を使用して、APIエンドポイントとアプリ認証サービスの間で秘密を共有します。

クライアントがAPI呼び出しを行う場合、アプリ認証サービスに認証を要求し(強力なリモート認証手法を使用)、シークレットによって署名された時間制限付き(通常はJWT)トークンを受け取ります。

トークンは、API呼び出しごとに送信されます。エンドポイントは、リクエストを処理する前に署名を検証できます。

実際のシークレットがデバイスに存在することはありません。実際、アプリが有効かどうかはまったくわかりません。アプリはリクエスト認証を削除し、結果のトークンを渡します。インダイレクションの優れた利点として、シークレットを変更したい場合は、ユーザーがインストール済みのアプリを更新しなくても変更できます。

したがって、秘密を保護したい場合は、そもそもアプリに秘密を持たないのがよい方法です。


5
これは受け入れられる答えになるはずです。
正義

3
認証サービスにアクセスしたい場合、問題は解決しません。クライアントIDとクライアントシークレットが提供されます。どこに保存すればよいですか?
芦屋市

使用するために最初にAPIを認証する必要があるプライベートAPIは解決しません。すべてのアプリユーザーの資格情報はどこで取得しますか?
木部

25

安全でない古い方法:

3つの簡単な手順に従って、API /秘密鍵を保護します(以前の回答

Gradleを使用して、APIキーまたは秘密キーを保護できます。

1. gradle.properties(プロジェクトプロパティ):キーを使用して変数を作成します。

GoolgeAPIKey = "Your API/Secret Key"

2. build.gradle(モジュール:app):アクティビティまたはフラグメントでアクセスするには、build.gradleで変数を設定します。以下のコードをbuildTypes {}に追加します。

buildTypes.each {
    it.buildConfigField 'String', 'GoogleSecAPIKEY', GoolgeAPIKey
}

3.アプリのBuildConfigでActivity / Fragmentにアクセスします。

BuildConfig.GoogleSecAPIKEY

更新:

上記のソリューションは、オープンソースプロジェクトでGitをコミットするのに役立ちます。(コメントをくれたDavid Rawsonとriyaz-aliに感謝します)。

マシューとパブロセガラのコメントによると、上記の方法は安全ではなく、デコンパイラーは誰かが私たちの秘密鍵でBuildConfigを表示することを許可します。

解決 :

NDKを使用してAPIキーを保護できます。ネイティブC / C ++クラスにキーを格納し、Javaクラスでそれらにアクセスできます。

NDKを使用してAPIキーを保護するには、このブログに従っください。

Androidにトークンを安全に保存する方法のフォローアップ


4
Gradleファイルにキーを保存することは安全ですか?
Google

4
@Google gradle.propertiesをGitにチェックインしないでください。これは、少なくともコミットされたソースコードから秘密を守る方法です
David Rawson

4
これは、APIキーが結果にバンドルされるのを防ぎませんapk(生成されたBuildConfigファイルに追加されます)。ただし、これは、さまざまなAPIキー(たとえば、オープンソースプロジェクト)を管理するのに
最適です

5
Javaデコンパイラを使用すると、誰かがBuildConfigファイルと「GoogleSecAPIKEY」を表示できるようになります
Matthew

3
あなたのBuildConfig.javaファイルはプレーンテキスト形式のキーを持つことになります。これは、OPがすでに行っていることと同じです。
アイスマン2018年

16

アプリシークレットキーは秘密にしておく必要があります。ただし、アプリをリリースするときに、一部の人がキーを逆にすることができます。

それらの人のためにそれは隠さないでしょうProGuard、コードもロックします。これはリファクタリングであり、一部の有料の難読化ツールは、jk433g34hg3 文字列を取得するためにいくつかのビット単位の演算子を挿入しています。あなたが3日間働くならば、あなたはハッキングを5-15分長くすることができます:)

最善の方法は、それをそのままにしておくことです。

サーバー側(PC)に保管しても、キーをハッキングして印刷することができます。多分これは最も時間がかかりますか?とにかく、それは数分または最良の場合は数時間の問題です。

通常のユーザーはコードを逆コンパイルしません。


1
まあ-私が期待した答えではありません=)...素晴らしいセキュリティを達成できると思いました:(
Basic Coder

申し訳ありませんが、ブリリアントで超安全なソリューションが欲しかったのではありませんが、コンパイラー、デコンパイラーを使用できる人にとっては、安全なJavaコードはありません。少なくとも試してみる価値はあります

1
Proguardは実際のキーを難読化しません。最善の方法は、難読化が非表示になる単純な暗号化/破棄ルーチンです。
Doomsknight 2013年

3
復号化ルーチンが「見える」ので、簡単に元に戻すことができ、元の文字列を保持します

14

考えられる解決策の1つは、アプリでデータをエンコードし、実行時に(そのデータを使用する場合)デコードを使用することです。また、アプリの逆コンパイルされたソースコードを読みにくく、理解しにくくするために、プログラムを使用することをお勧めします。たとえば、アプリにエンコードされたキーを配置し、アプリでデコードメソッドを使用して、実行時に秘密キーをデコードします。

// "the real string is: "mypassword" "; 
//encoded 2 times with an algorithm or you can encode with other algorithms too
public String getClientSecret() {
    return Utils.decode(Utils
            .decode("Ylhsd1lYTnpkMjl5WkE9PQ=="));
}

保護されたアプリの逆コンパイルされたソースコードは次のとおりです。

 public String c()
 {
    return com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ=="));
  }

少なくともそれは私には十分に複雑です。これは、アプリケーションに値を格納する以外に選択肢がない場合の方法です。もちろん、それが最善の方法ではないことは誰もが知っていますが、私にとってはうまくいきます。

/**
 * @param input
 * @return decoded string
 */
public static String decode(String input) {
    // Receiving side
    String text = "";
    try {
        byte[] data = Decoder.decode(input);
        text = new String(data, "UTF-8");
        return text;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return "Error";
}

逆コンパイルされたバージョン:

 public static String a(String paramString)
  {
    try
    {
      str = new String(a.a(paramString), "UTF-8");
      return str;
    }
    catch (UnsupportedEncodingException localUnsupportedEncodingException)
    {
      while (true)
      {
        localUnsupportedEncodingException.printStackTrace();
        String str = "Error";
      }
    }
  }

そして、あなたはグーグルで少しの検索で非常に多くの暗号化クラスを見つけることができます。


13

@Manohar Reddyソリューションに追加すると、firebase Databaseまたはfirebase RemoteConfig(デフォルト値がNull)を使用できます。

  1. 鍵を暗号化する
  2. それをfirebaseデータベースに保存します
  3. アプリの起動時または必要なときにいつでも入手できます
  4. キーを解読して使用する

このソリューションの違いは何ですか?

  • firebaseの信任状なし
  • firebaseアクセスは保護されているため、署名付き証明書を持つアプリのみがAPI呼び出しを行う権限を持っています
  • 中間者の傍受を防ぐための暗号化/解読。ただし、Firebaseに対してすでにhttpsを呼び出します

すべてがこのソリューションを尊重し、私たちはまだ最初の広場です。資格情報を使用する代わりに、証明書を使用することをお勧めします。資格情報を盗むことができる人はだれでも、署名された証明書を盗むことができます。
芦ノ湖

ただし、1つの利点は、提案された解決策により、ハッカーの前にもう1つの複雑さを追加することです。
芦ノ湖

11

この例には、さまざまな側面があります。他の場所で明示的にカバーされていないと思われるいくつかのポイントに言及します。

輸送中の秘密の保護

最初に注意する点は、アプリの認証メカニズムを使用してDropbox APIにアクセスするには、キーとシークレットを送信する必要があるということです。接続はHTTPSです。つまり、TLS証明書を知らないとトラフィックを傍受できません。これは、モバイルデバイスからサーバーへの移動中に人がパケットを傍受して読み取るのを防ぐためです。通常のユーザーにとっては、トラフィックのプライバシーを確​​保するための本当に良い方法です。

悪意のある人物がアプリをダウンロードしてトラフィックを検査するのを防ぐのが得意ではありません。モバイルデバイスに出入りするすべてのトラフィックにman-in-the-middleプロキシを使用するのは本当に簡単です。この場合、Dropbox APIの性質上、アプリのキーとシークレットを抽出するためのコードの逆アセンブリやリバースエンジニアリングは必要ありません。

サーバーから受信したTLS証明書が期待どおりのものであることを確認するピン留めを行うことができます。これにより、クライアントにチェックが追加され、トラフィックの傍受がより困難になります。これにより、処理中のトラフィックを検査することが難しくなりますが、ピン留めチェックはクライアントで行われるため、ピン留めテストを無効にすることも可能です。しかし、それは難しくなります。

安静時の秘密の保護

最初のステップとして、プロガードのようなものを使用すると、秘密がどこに保持されているかがわかりにくくなります。NDKを使用してキーとシークレットを保存し、リクエストを直接送信することもできます。これにより、情報を抽出する適切なスキルを持つ人の数を大幅に減らすことができます。値を直接メモリに直接保存しないことにより、さらに難読化できます。別の回答で提案されているように、使用する直前に暗号化および復号化できます。

より高度なオプション

アプリにシークレットを配置することに偏執的で、より包括的なソリューションに投資する時間とお金がある場合は、サーバーに資格情報を保存することを検討してください(いずれかがあると仮定します)。サーバーを介して通信する必要があるため、APIへの呼び出しのレイテンシが増加し、データスループットの増加によりサービスの実行コストが増加する可能性があります。

次に、サーバーを確実に保護するためにサーバーとの通信方法を決定する必要があります。これは、内部APIで同じ問題が再び発生するのを防ぐために重要です。私が与えることができる最良の経験則は、中間者の脅威のために秘密を直接送信しないことです。代わりに、シークレットを使用してトラフィックに署名し、サーバーに送信されるリクエストの整合性を確認できます。これを行う1つの標準的な方法は、シークレットをキーとしたメッセージのHMACを計算することです。私はこの分野でも動作するセキュリティ製品を持っている会社で働いているので、この種のものに興味があります。実際、これは私の同僚の1人によるブログ記事で、これの大部分について説明しています。

どれくらいすべきですか?

このようなセキュリティアドバイスを使用すると、誰かが侵入するのをどれだけ困難にしたいかについてコスト/メリットの決定を行う必要があります。何百万もの顧客を保護している銀行の場合、予算はアプリをサポートしている誰かとはまったく異なります余暇。誰かがあなたのセキュリティを破るのを防ぐことは事実上不可能ですが、実際にはすべてのベルとホイッスルを必要とする人はほとんどいません。


1
これをコピーしてここから貼り付けてください:hackernoon.com/mobile-api-security-techniques-682a5da4fe10ソースを確認せずに。
正義

1
@ortonomy私はあなたがリンクした記事を引用したはずであることに同意しますが、両方が同じ場所で機能するため、彼はそれを忘れたかもしれません...
Exadra37

2
また、スキップの記事とそれらが基づいているブログ投稿は、私の回答の1週間後に公開されました。
ThePragmatist

8

最も安全なソリューションは、サーバーにキーを保持し、そのキーを必要とするすべてのリクエストをサーバー経由でルーティングすることです。そうすれば、キーがサーバーを離れることはありません。サーバーが安全である限り、キーも安全です。もちろん、このソリューションにはパフォーマンスコストがあります。


32
問題は、すべての秘密を含むサーバーに到達するには、別の秘密鍵を使用する必要があることです。どこに保管するのでしょうか。;)私が言おうとしていることは-これも最良の解決策ではない(ここに理想的な解決策があるとは思わない)
Mercury

それは真実ではありません、あなたのサーバーは完全にあなたの管理下にあります。それが必要とするものは完全にあなた次第です。
Bernard Igiri 2017年

5
ここで、キーがサーバー側にあるときに、クライアントがサーバーに送信するデータを暗号化する方法を説明できますか?そしてあなたの答えがそうであるかどうか-サーバーはクライアントにキーを送信します-それでそれも同様に安全でなければなりません!だから魔法の解決策はありません!見えない?!
マーキュリー

2
@BernardIgiriに戻り、再び正方形1に戻ります。電話がランダムログインを作成し、サーバーがそれを受け入れてピンを送信するとします(これがいわゆるプライベートサーバーです)。次に、アプリを逆アセンブルする人は、プライベートサーバーにアクセスするために必要なのは、自分で作成できるランダムなログインにすぎないことを理解しています。彼がアカウントを作成してサーバーにアクセスするのを妨げている理由を教えてください。実際には、ソリューションと実際にログインまたはAPIキーをメインサーバー(プライベートサーバーに保存したい資格情報)に保存することの違いは何ですか
Ken

3
@ken乱数は、電話番号およびテキストメッセージへの物理的なアクセスに対して認証されます。誰かがあなたをだます場合、あなたは彼らの情報を持っています。それでも十分でない場合は、完全なユーザーアカウントとパスワードを作成するように強制します。それでも十分でない場合は、クレジットカードも入手してください。それが十分でない場合は、彼らに電話してもらいます。それが十分でない場合は、面と向かって会ってください。安全になりたい/不便になりたいですか?
Bernard Igiri 2017年

7

秘密を守り、firebase databaseアプリの起動時にそこから取得します。Webサービスを呼び出すよりもはるかに優れています。


13
しかし、firebaseへの資格情報はどうですか?
the_joric

2
残念ながら、Firebaseデータベースは中国では機能しません。
Konjengbam

9
意味がありません。攻撃者は逆コンパイルされたコードからファイアベースの詳細を確認し、データバブからデータを取得できます
user924

3
Firebase AppsはSHA1を使用してサーバーへのアクセスを許可するため、これが最良のソリューションだと思います。ハッカーの新しいアプリは正確なアプリスタンプを使用してFirebaseにアクセスする必要があるため、コードを逆コンパイルしてもFirebaseを呼び出すことはできません。また、格納された鍵は、Firebase DBに格納する前に暗号化し、中間者による傍受を回避するために受信後に解読する必要があります。
Ayman Al-Absi

ネットワークを介してfirebaseデータベースからシークレットを取得する場合、安全な(https)チャネルを介して別のWebサービスから同じシークレットを取得するよりも安全ですか。説明できる?
Csaba Toth

6

秘密鍵を保護するために何をしても、実際の解決策にはなりません。開発者がアプリケーションを逆コンパイルできる場合、キーを保護する方法はありません。キーを非表示にすることは、あいまいなことによるセキュリティであり、コードの難読化も同様です。秘密鍵の保護に関する問題は、それを保護するために別の鍵を使用する必要があり、その鍵も保護する必要があることです。キーでロックされているボックスに隠されたキーを考えてください。部屋の中に箱を置き、部屋をロックします。保護する別のキーが残ります。そして、そのキーはまだアプリケーション内にハードコーディングされます。

したがって、ユーザーがPINまたはフレーズを入力しない限り、キーを非表示にする方法はありません。ただし、そのためには、帯域外で発生する、つまり別のチャネルを介して発生するPINを管理するためのスキームが必要です。Google APIのようなサービスのキーを保護するのは確かに実用的ではありません。


5

古くからの投稿ですが、それでも十分です。.soライブラリーにそれを隠すのは素晴らしいことだと思います。もちろん、NDKとC ++を使用します。.soファイルは16進エディターで表示できますが、それを逆コンパイルしてください:P


9
ユーザーは、共有ライブラリを簡単に関数呼び出しして、そこに隠されているものを取得できます。展開する必要はありません。
david72 2016年

5
androidauthority.com/…によると、現時点ではAndroidで安全に行う方法はありません。
david72 '11 / 11/3

1
@AhmedAwadなぜこれが3つの賛成票を投じているのか理解できません。誰でも簡単にアプリを逆コンパイルして、ndkエントリポイントがどのように呼び出されているかを確認できます:/
Johny19

1
この回答はほぼ最良の選択肢の1つですが、作成者はチェックサムがAPKと一致するかどうかを確認するために(NDKライブラリ内に)呼び出しを含めることが非常に重要であることを言及する必要があります。アプリ
Stoycho Andreev

@スナイパー、それは大きな問題があることを除いて素晴らしいでしょう。どのファイルがネイティブメソッドを「呼び出している」かをどのようにして知るのでしょうか。チェックするapkの名前をハードコーディングした場合、すばらしいですが、「hack」のapkを「good」のapkと同じフォルダにするとどうなるでしょうか。「良好な」apkに良好なチェックサムがあることを確認し、ネイティブメソッドを実行できるようにします。JNI / C ++側から呼び出し元ファイルを知る方法がない限り、それは他のオプションとしては無意味です。
SocketByte

5

これらをプライベートに保つ唯一の真の方法は、それらをサーバー上に保持し、アプリが何であれそれをサーバーに送信し、サーバーがDropboxと対話することです。この方法では、秘密鍵をいかなる形式でも配布しないでください。


11
しかし、他の世界がサーバーを呼び出すのをどのように防ぐのでしょうか?
user2966445

「サーバー」とは、資格情報があるWebサーバーを意味します。どの方法でも使用できます。ユーザー名/パスワード、oauth、Active Directoryなどを使用した単純な認証など。実際にはアプリケーションによって異なります。
Nick

多分私は何かが足りないのですが、それでもアプリ内に資格情報を保存する必要はありませんか?
user2966445 2016

3
そうですが、あなたはアプリが最初にサーバーで認証するだろうと言っていました。これは、別の資格情報のセットをアプリに保存することを意味しませんか?サーバーが実際のDropbox呼び出しを処理することを理解しています。
user2966445 16

4
まあ、それはそれを意味するかもしれませんが、それは完全に別の承認です。しかし、そうする必要はありません。私が話しているユースケースは、あなたのアプリユーザーがあなたのアプリへのログインを持っているということです。あなたはあなたのアプリに彼らの資格情報を保存しません、あなたは彼らを知りさえしません。その承認プロセスにより、Dropboxへの認証情報を持つAPIサーバーへのアクセスが許可されますが、アプリまたはユーザーはそれらに直接アクセスできません。
ニック

0

苦い経験に基づいており、IDA-Proの専門家に相談した後の最良の解決策は、コードの主要部分をDLL / SharedObjectに移動し、それをサーバーからフェッチして実行時にロードすることです。

次のようなことは非常に簡単なので、機密データをエンコードする必要があります。

$ strings libsecretlib.so | grep My
  My_S3cr3t_P@$$W0rD

3
そして、あなたはそのサーバーの資格情報をどこに保存していますか?
ZX9
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.