アプリケーションの実行可能ファイルに安全な情報を渡す必要があります。言い換えれば、私は次の行を持っています:
Process.Start("someExecutable.exe","MyUsername, myPassword");
私は人々がそれらのパラメータを見ることを防ぎたいです。(ユーザー名とパスワードは実行時にユーザーによって指定されるため、これらのパラメーターについて心配する必要はありません)。
今私が抱えている問題は次のとおりです。誰かがsomeExecutable.exeを独自のプログラムに置き換えると、資格情報を確認できるようになります。
今後の参照のために、someExecutable.exe(資格情報を引数として送信するプログラム)A を参照し、このプログラムによって作成された実行可能ファイルをBとして参照します。
私はここでその問題を防ぎたいと思います私が考えているいくつかの解決策があります:
Aのハッシュを計算し、実行する前に確認してください。
static bool? VerifyThatExeIsReliable(string pathOfExe) { if (System.IO.File.Exists(pathOfExe) == false) return null; var bytes = System.IO.File.ReadAllBytes(pathOfExe); using (SHA1Managed a = new SHA1Managed()) { var hash = a.ComputeHash(bytes); StringBuilder formatted = new StringBuilder(2 * hash.Length); foreach (byte b in hash) formatted.AppendFormat("{0:X2}", b); var code = formatted.ToString(); if (code == "4835658749AF89A65C5F4835658749AF89A65C5F") return true; } return false; }
このアプローチの問題は、ハッシュが実行可能ファイルA
4835658749AF89A65C5F4835658749AF89A65C5F
に格納され、誰かがこのプログラムを16進エディターで開くと、ハッシュを見つけて変更できるようになることです。言い換えれば、彼らは自分たちが書いたプログラムのsha1ハッシュを計算し、代わりにそのハッシュを配置します4835658749AF89A65C5F4835658749AF89A65C5F
file Watcherクラスを使用して、ファイルが変更されたことを検出します。プログラムが実行されていない場合、これを検出することはできません
ユーザーがその実行可能ファイルに渡されたコマンドライン引数を表示できないことを確認してください。プログラムに渡されたコマンドライン引数を参照してください。