ユーザーが Delphi で生成された exe を開くためにパスワードを入力する必要がある場合、次のような単純なパスワードではなく、次のようなコードを使用します。
if password='1234' then begin
form2.show
end;
いいえ、ほぼ確実に、実行可能ファイル内にクリアテキストとして保存されます。
実際、チェックはローカルで行われるため、どんな努力をしても実行可能ファイルを安全にすることはできません。攻撃者は実行可能ファイルを編集して条件付きジャンプを変更するだけで、テストはバイパスされます。これらのものが通常保護される方法は、そのような力を攻撃者から遠ざけることです. たとえば、ユーザーが入力したパスワードを管理している中央サーバーに送信し、そこでチェックを行い、チェックが成功した場合にのみ、必要なもの (代替サーバーでは偽造できないもの) を送り返します。
ただし、それはおそらく不必要な多くの労力です。カジュアルなクラッカーを締め出したいだけなら、パスワードをキーフレーズで XOR して、実行可能ファイルでそれほど明白にならないようにするなど、少し難読化するだけで、そうできるかもしれません。ユーザーが入力したパスワードで同じことを行い、それらを比較すると、平文のパスワードは表示されません。
そのような計画は、断固たるクラッカーを止めることはできませんが、大多数にとっては困難になります。セキュリティ (IT、家庭、またはその他のタイプ) の考え方は、常に打ち負かすことを不可能にすることではなく、単に価値を下げるほど難しくすることです。
それは本当にあなたが誰を倒そうとしているかに依存します - それはあなたの計画がどれほど複雑でなければならないかを決定します.
または、コメントで hvd によって提起されたオプションを検討することもできます。実行可能ファイルを、実際の実行可能ファイルを暗号化されたデータとして持つスタブにするだけです。これは、ユーザーが入力したキーを使用して復号化され、ファイルシステムに書き込まれ、有効性がチェックされてから実行されます。
パスワードはスタブ自体に含まれていないため、簡単な攻撃を受けることはありません。パスワードは、作成者 (スタブを作成するときに使用) とユーザー (できれば頭の中にのみ) にのみ存在します。スタブだけを取得した人は、暗号化された実行可能ファイルを実行する簡単な方法がありません。
繰り返しますが、これを回避する方法はいくつかありますが、それらはすべて、実行可能ファイルを使わずにパスワードを取得することを伴います (ブルート フォース、ソーシャル エンジニアリングなど)。
どれだけ安全でないかを示すために、次の小さなコンソール アプリケーションを考えてみましょう。
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure StartProgram;
begin
writeln('You entered the correct password. Welcome to this awesome program!');
end;
procedure EndProgram;
begin
writeln('That is not the correct password. Goodbye.');
end;
var
PW : string;
begin
write('Enter password: ');
readln(PW);
if PW = 'SuperSecretPassword' //See if you can spot this in the image
then StartProgram
else EndProgram;
readln;
end.
それをコンパイルし、16 進エディタで exe ファイルを開きます。スクリーンショットは XVI32 のものですが、どの 16 進エディタも多少似ていると思います。
結局のところ、それほど秘密ではありません。
いいえ。必要に応じて、実行可能ファイルをリバース エンジニアリングし、パスワードを取得できます。