2

使用したいソフトウェアのDLLがあります。DLL APIには、絶対パスを含むファイル名が必要な関数「LoadConfigFile(char * file)」があります(例:「C:\ TestFolder \ ConfigFile.cfg」)。次に、関数は構成ファイル自体をロードします。

セキュリティ上の理由から、DLLが使用されているプログラムにのみファイル(コンテンツ)へのアクセスを許可したいと思います。

だから私はこれがどのように行われるのか疑問に思い、解決策をインターネットで検索しました。解決策を探しているときに、次のオプションと質問が思い浮かびました。

  • ファイルを暗号化できました。->誰かがこれのための無料のライブラリを知っていますか?->関数にファイルを文字列として指定し、関数がファイルを読み取ることは可能ですか?

  • たぶん、仮想ファイルシステムを使用する可能性があります。つまり、暗号化されたソースからファイルをロードし、復号化して、仮想ディスクまたはフォルダーのRAMに保存します。次に、DLL関数への文字列としてリンクを指定します->これは可能ですか?->誰かがそうするための無料の図書館を知っていますか?

  • また、「インメモリデータベース」についても読んでいます。->これは私の問題への答えでしょうか?

私の開発環境はVC++2010で、OSはWindowsXPです。

誰かがこの問題で私を助けてくれることを願っています。

4

3 に答える 3

1

あなたのデータはどのくらい機密ですか?そして、あなたのアプリケーションのターゲットは何ですか?

多くの場合、カジュアルな読者を怖がらせるには、単純な自作の暗号化メカニズムで十分かもしれません。

データを完全に暗号化する必要がある場合は、Windowsの暗号化機能を確認してください(例:CryptProtectData、http ://msdn.microsoft.com/en-us/library/aa380261(VS.85).aspxを参照)。

場合によっては、データを暗号化したくないが、誰もデータを変更しないようにしたいだけです。その場合は、ハッシュ値(SHA-2、http://en.wikipedia.org/wiki/SHA-2を参照)をファイルに追加します。

于 2012-03-26T12:52:08.467 に答える
1

私が考えることができる唯一のこと-そして私は手元にそれのためのソースコードを持っていません-はハッシュと復号化です。

コードのハッシュから派生したキーを使用して、ファイルを何でも暗号化します。キーはどこにも保管しないでください。あなたのコードが鍵です。さらに良いことに、プログラムを正常に実行した場合にのみ作成できるメモリ構造をハッシュします。

ただし、コードを更新するたびに破損する可能性があります。32ビットと64ビットのアーキテクチャを検討する必要があります。たぶん、ポインタの調整が機能する可能性があります。セキュリティ要件が努力に値するものであることを確認し、メンテナンスの努力を過小評価しないでください。

通常、CryptProtectDataが実行し、セキュリティを強化するためにpOptionalEntropyパラメーターを提供します(その後、私のものではなく、@ Patrickの回答を受け入れます)。

于 2012-03-26T13:28:42.703 に答える
1

複雑すぎます。最も簡単な解決策は(あなたが管理下にあるプロセスなので)次のとおりです。

  1. 一時ファイルを作成し、それを排他的に開きます(共有読み取りも行いません)。合格FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE、永続的ではないため
  2. 構成ファイルをこの一時ファイルに復号化します。ハンドルを開いたままにします。
  3. 一時ファイル名をDLLに渡します。処理中なので、排他ロックの影響を受けません。
  4. DLLが完了したら、一時ファイルをゼロにします。
  5. ハンドルを閉じます。これにより、ファイルが削除されます。

一時ファイルには機密コンテンツが含まれている場合は常にロックされているため、他のプロセスはアクセスできません。また、一時的なものとしてマークされているため、閉じるときに削除するため、Windowsはわざわざ物理ディスクにフラッシュしません。

もちろん、これは完全なセキュリティではありません。プロセスメモリを読み取ることができる(つまり、持っている)人は誰でもSeDebugPrivilegeこの情報にアクセスできますが、それは自明です。にデバッグブレークポイントを設定するだけLoadConfigFileです。

于 2012-03-26T13:54:26.760 に答える