1

警告: C++ 初心者

文字列の暗号化に関する StackOverflow の複数の投稿を読みました。ところで、彼らは私の疑問に答えません。コードに1 つまたは 2 つのハードコードされた文字列を挿入する必要がありますが、デバッグやリバース エンジニアリングの際にプレーン テキストで読みにくくしたいと考えています。それだけではありません。文字列は URL であるため、単純なパケット アナライザー (Wireshark) で読み取ることができます。私が難しいと言ったのは、コードが実行されると、文字列がどこか (RAM 内?) で平文として復号化され、誰かがそれを読み取ることができることを知っているからです。それで、私の文字列を完全に保護することは不可能であると仮定すると、C ++で暗号化/復号化する最良の方法は何ですか? 私は次のようなことを考えていました:

//I've omitted all the #include and main stuff of course...
string encryptedUrl = "Ajdu67gGHhbh34590Hb6vfu6gu" //Encrypted url with some known algorithm
URLDownloadToFile(NULL, encryptedUrl.decrypt(), C:\temp.txt, 0, NULL);

パケット分析はどうですか?URL を非表示にする方法はないと確信していますが、何か不足している可能性がありますか? ありがとう、そして私の最悪の英語でごめんなさい!

編集 1: 私のアプリケーションは何をしますか?

これは単純なログイン スクリプトです。私のアプリケーションは、URL からテキスト ファイルをダウンロードします。このファイルには、fstream ライブラリを使用して読み取られる暗号化された文字列が含まれています。文字列は復号化され、別のサイトへのログインに使用されます。データベースもソルトもハッシュも存在しないため、非常に脆弱です。私の成果は、UR​​Lもログイン文字列も、バイナリの静的分析から読み取るのが「簡単」ではなく、動的分析(デバッグ、リバースエンジニアリングなど)で可能な限り困難であることを確認することです。

4

2 に答える 2

5

パケット インスペクタを妨害したい場合、最低限の要件は、ハードコードされたサーバー証明書をアプリに焼き付けた https を使用することです。

アプリ内コンテンツの暗号化に万能薬はありません。適切なスキルを持つ断固たるハッカーは、あなたが何をしようとも、平易な URL にたどり着きます。あなたが望むことができる最善のことは、ほとんどの人があきらめるほど難しいものにすることです. これを実現する方法は、複数の多様な難読化とトリップワイヤー技術を実装することです。含むがこれらに限定されません:

  1. 暗号化された URL とパスワード (できればワンタイム キー) の一部を別の場所に保存し、それらをコードでまとめます。
  2. 暗号化されたパーツを、パーツと見分けがつかないように見えるランダム性の大きな文字列に隠します。
  3. パーツを少しずつ組み立てます。たとえば、暗号化された URL の 1/3 と 2/3 を 1 つの初期化関数から単一のバッファーに連結し、このバッファーを別の無関係な init 関数で最後の 3 分の 1 と連結し、さらに別の関数で最後の連結を使用します。これらはすべて異なるランダムから呼び出されます。コード内の場所。
  4. アプリがデバッガーで実行されていることを検出し、さまざまな機能で暗号化されたコンテンツをさまざまなタイミングで破棄します。
    • 検出は、単一の「DetectDebug」関数を呼び出したり、グローバル bool をテストしたりするのではなく、さまざまな手法を使用してさまざまな呼び出しサイトで実行する必要があります。どちらも単一ポイントの攻撃を作成します。
  5. 関連する関数に「DecryptUrl」などのわかりやすい名前を使用しないでください。
  6. 一見無関係だが一貫したソースからキーの一部を収集します。たとえば、クロックを読み取り、少数の上位ビットのみを使用する (予見可能な将来にわたって変更されないほど十分に高いが、すべてがゼロにならないほど十分に低い)、または不揮発性のランダム サンプリングを使用する初期化コードの結果です。

これは氷山の一角にすぎず、初心者を香りから遠ざけるだけです. 巧妙な攻撃者は、ステルス デバッガーを使用して SSL ライブラリへの呼び出しを傍受するだけです。したがって、次のように自問する必要があります。

  1. この URL を保護する価値はありますか? また、どのような種類の攻撃者から保護する価値がありますか?
  2. URLを保護する必要がないように、システム設計をどうにか変更できますか?
于 2013-10-01T11:13:24.943 に答える
0

XorSTR [ 1 , 2 ] を試してください。これは、静的分析を妨害しようとしたときに使用していたものです。ほとんどの結果は、ゲームのチート フォーラムから得られます。html ジェネレーターもあります。

ただし、他の人が述べたように、文字列を取得することは、URLDownloadToFile にブレークポイントを設定する人にとってはまだ簡単です。ただし、静的分析を行おうとしている場合、彼らの生活は少し難しくなります。

あなたの URL が何をしているのか、あなたの目的が何なのかはわかりませんが、XorStr + アンチデバッグ + バイナリのパッキングにより、ほとんどのアマチュアがアプリケーションのリバース エンジニアリングを阻止できます。

于 2013-10-01T11:38:00.110 に答える