2017-01-20 12 views
1

私のプログラムでは、ユーザーがパスワードを入力できます。パスワードは直ちにsha1と一定の塩でハッシュされ、メモリに保存されます。 攻撃者が自分のアプリケーションが実行されているコンピュータに物理的にアクセスし、最後のユーザーのパスワードを取得したいとします。sha1のセキュリティがメモリにパスワードをハッシュ

リバースエンジニアリングとメモリウォッチの魔法でメモリにハッシュを見つけることは可能でしょうか?私のアプリケーションはMFCグラフィカルインターフェイスを使用し、Windows上で動作します。彼自身がパスワードを入力したらどうなるでしょうか?彼はハッシュプロセスを監視できますか?

私のユーザーのパスワードが「1234」のように本当に悪い場合、SHA1ハッシュのすべてのセキュリティはSALTに依存します。 saltは、メモリのどこかに格納しなければなりません(現在は#define char *配列です)。彼は十分な努力でそれを見つけることができましたか?

入力プロセス:

ユーザーは、テキスト編集にパスワードを入力します。終了すると、ユーザが「OK」ボタンをクリックすると、BN_CLICKEDメッセージが放射され、OnOK関数が呼び出されます。この関数は、編集フィールドからテキストを取得し、別のライブラリの(コードの)部分であるハッシュ関数を呼び出すので、メモリ内の他の場所に配置する必要があると想定します。 Hashed Stringは他の場所にも格納されます。それが重要な場合は、プロジェクト構造は次のようになります。

  • SOLUTION
    • GUIプロジェクト
    • データストレージ事業
    • 暗号Libの
+1

パスワードを盗みたいのであれば、メモリのどこかでハッシュを見つけずに編集入力フィールドから "盗む"だけです。その答えの一部はおそらく "はい"です。 –

+0

@MichaelWalz攻撃者がアプリケーションのユーザーと同時にいないと仮定してください。また、編集フィールドはすべての入力後に消去されます。 – jwsc

答えて

1

あなたはエンジニアのWin32を逆にした場合/ MFCアプリケーションでは、constデータが開発者がこれらのデータを格納する別のセクションを明示的に作成していない限り、.rdataセクションに格納されます。 IDAは最高のものですが、私はリバースエンジニアリングアプリケーションにOllyDbgを使用しています。あなたの質問に答えてください:

リバースエンジニアリングとメモリウォッチの魔法でメモリにハッシュを見つけることは可能でしょうか?私のアプリケーションはMFCグラフィカルインターフェイスを使用し、Windows上で動作します。彼自身がパスワードを入力したらどうなるでしょうか?彼はハッシュプロセスを監視できますか?

A:はい、リバースエンジニアリングでメモリ内のハッシュを見つけることは可能です。あなたはそのデータのメモリアドレスを見つけなければなりません。リバースエンジニア/ハッカーは、GetDlgItem/GetDlgItemTextにブレークポイントを設定し、入力されたパスワードを取得してハッシュプロセスを監視できます。

私のユーザーのパスワードが「1234」のように本当に悪い場合、SHA1ハッシュのすべてのセキュリティはSALTに依存します。 saltは、メモリのどこかに格納しなければなりません(現在は#define char *配列です)。彼は十分な努力でそれを見つけることができましたか?

A:SALTを探すのに少しでも労力が必要です。これらのセクションを簡単に参照したり、上記で説明した手法を使用して、プロセスを監視しながらSALTをデバッグして調べることができます。

これらのデータのセキュリティが本当に心配な場合は、暗号化の使用を検討する必要があります。あなたの質問にお答えしますか?

+0

あなたの答え、Aseshありがとうございました。私があなたに正しく従うと、メモリー内に保存されているすべてのデータを攻撃者が読むことができます。同意する。その値がわからない場合、メモリに保存されている一定の暗号化キーを見つけるのは簡単ですか?それが簡単な場合、私はメモリからキーを抽出することができますどのような暗号化を使用していますか? – jwsc

+0

メモリに格納されている暗号化キーを見つけるのは難しくありません。リバースエンジニアはリバースエンジニアリングを行い、逆アセンブルされたコードを検索して見つける必要があります。そのキーのメモリ位置を見つけることは困難ではありませんが、そのキーが暗号化されている場合、ハッカーはそれを解読する方法を見つけなければなりません。暗号化の経験はあまりありませんが、Windowsは暗号化のためのAPIを提供しています。https://msdn.microsoft.com/en-us/library/windows/desktop/aa380255(v=vs.85).aspx :) – Asesh

+0

[SecureZeroMemory](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366877(v = vs.85).aspx)関数を使用してchar *バッファをゼロで埋めてください使用後に。 – cha

関連する問題