それを変更できるのはあなたのファイルとあなたのプログラムです。このような場合、1 つの簡単な解決策があります。(ログファイルを別のフォルダに入れる余裕がある場合)
注:
すべてのログ ファイルを別のフォルダーに配置できます。たとえば、私のアプリケーションでは、多くの DLL があり、それぞれに独自のログ ファイルがあり、もちろんアプリケーションにも独自のログ ファイルがあります。
そのため、バックグラウンドで別のプロセスを実行し、次のような変更通知についてフォルダーを監視します
- ファイルサイズの変更
- ファイルまたはフォルダの名前を変更しようとする
- ファイルなどを削除...
この通知に基づいて、ファイルが変更されたかどうかを証明できます。(あなたや他の人が推測しているように、プロセスや dll でさえもこれらのファイルを変更し、通知につながる可能性があります。このアクションをスマートに同期する必要があります。それだけです)
以下のフォルダを監視するウィンドウ API:
HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName,
BOOL bWatchSubtree,
DWORD dwNotifyFilter
);
lpPathName:
Path to the log directory.
bWatchSubtree:
Watch subfolder or not (0 or 1)
dwNotifyFilter:
Filter conditions that satisfy a change notification wait. This parameter can be one or more of the following values.
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_SECURITY
etc...
(Check MSDN)
それを機能させる方法は?
容疑者A:私たちのプロセス
容疑者 X : 他のプロセスまたはユーザー
Inspector : フォルダーを監視するために作成したプロセス。
インペクターはフォルダー内の変更を確認します。容疑者 Aに何か変更を加えたかどうかを尋ねます。
もしそうなら、
change is taken as VALID.
そうでない場合
clear indication that change is done by *Suspect X*. So NOT VALID!
File is certified to be TAMPERED.
それ以外にも、以下は役立つかもしれない (またはそうでないかもしれない :)) テクニックの一部です!
アプリケーションがファイルを閉じるたびにタイム スタンプとファイル サイズを保存します。次回ファイルを開いたときに、最終変更時刻とそのサイズを確認します。両方が同じ場合、ファイルが改ざんされていないことを意味します。
ログを書き込んだ後、ファイル権限を読み取り専用に変更します。一部のプログラムまたは誰かがそれを改ざんしたい場合、読み取り専用プロパティを変更しようとします。このアクションは、ファイルの変更日時を変更します。
暗号化されたデータのみをログ ファイルに書き込みます。改ざんされた場合、データを復号化すると、適切に復号化されていないテキストが見つかる場合があります。
圧縮および解凍メカニズムの使用 (圧縮は、パスワードを使用してファイルを保護するのに役立つ場合があります)
それぞれの方法には、独自の長所と短所があります。必要に応じてロジックを強化します。提案されたテクニックの組み合わせを試すこともできます。