0

アプリケーションの実行可能ファイルに安全な情報を渡す必要があります。言い換えれば、私は次の行を持っています:

Process.Start("someExecutable.exe","MyUsername, myPassword");

私は人々がそれらのパラメータを見ることを防ぎたいです。(ユーザー名とパスワードは実行時にユーザーによって指定されるため、これらのパラメーターについて心配する必要はありません)。

今私が抱えている問題は次のとおりです。誰かがsomeExecutable.exeを独自のプログラムに置き換えると、資格情報を確認できるようになります。

今後の参照のために、someExecutable.exe(資格情報を引数として送信するプログラム)A を参照し、このプログラムによって作成された実行可能ファイルをBとして参照します。

私はここでその問題を防ぎたいと思います私が考えているいくつかの解決策があります:

  1. 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;
    }
    

    このアプローチの問題は、ハッシュが実行可能ファイルA4835658749AF89A65C5F4835658749AF89A65C5Fに格納され、誰かがこのプログラムを16進エディターで開くと、ハッシュを見つけて変更できるようになることです。言い換えれば、彼らは自分たちが書いたプログラムのsha1ハッシュを計算し、代わりにそのハッシュを配置します4835658749AF89A65C5F4835658749AF89A65C5F

  2. file Watcherクラスを使用して、ファイルが変更されたことを検出します。プログラムが実行されていない場合、これを検出することはできません

  3. ユーザーがその実行可能ファイルに渡されたコマンドライン引数を表示できないことを確認してください。プログラムに渡されたコマンドライン引数を参照してください。

4

1 に答える 1

1

オプション#1の問題を解決するには、ハッシュに非対称暗号化を使用します。そうすれば、プログラム(およびユーザー)はハッシュを復号化することしかできず、別のハッシュを暗号化することはできません。もちろん、コンパイルされたC#コードを編集できる場合は、ハッシュを復号化しないようにコードを変更することを阻止することはできませんが、それにはさらに多くの時間と専門知識が必要になります。

問題#2を解決するには、実行可能ファイルAのハッシュをプログラムに保存し、実行可能ファイルAがハッシュと一致することを確認してから開始します。

#3に関しては、私が知る限り、問題を解決する方法はありません。ただし、ターゲットプログラムを変更できる場合は、たとえば、暗号化されたネットワークソケットを介してユーザー名とパスワードを送信できます。

また、.NETアプリケーションをリバースエンジニアリングすることも可能であり、セキュリティが重要な場合は、実行可能ファイルに対して何らかの難読化ツールを実行することを検討する必要があることにも注意してください。結局のところ、それは不可能なので、プログラムを100%改ざん防止にすることではありません。それはそうする理由があるだろう誰にとってもそれをわざわざする価値がないようにすることについてです。

于 2012-11-25T01:55:24.110 に答える