段階的に;
{$IFDEF CRYPT_BLOCK}
nested blocks not allowed!
{$ENDIF}
このコードは何らかの形で編集されていると思い{$INCLUDE}ます。このコードは 2 回インクルードしたくないので、(後で) プリコンパイラ シンボルを定義しますCRYPT_BLOCK。上記のコードは、シンボルが定義されているかどうかをテストし、定義され{$IFDEF CRYPT_BLOCK}ている場合はコンパイルされないことを実行します ( nested blocks not allowed!)。{$INCLUDE}プログラマーが、彼女がこのことを 2 回 -edしたことを知ることになるのを見たとき。
{$DEFINE CRYPT_BLOCK}
これは、上記のブロックでテストされるシンボルを定義します。コンパイラが問題なくここに到達した場合、シンボルはまだ定義されていません。
{$IFOPT O+}
{$DEFINE SAVE_OPT}
{$ENDIF}
コンパイラの最適化が有効になっているかどうかを確認します。そうである場合は、シンボルSAVE_OPTが定義されているため、コンパイラ オプションを復元できます。これを確認すると、コードが{$O}コンパイラ オプションを変更しようとしていると見なされます。
{$O-}
案の定、最適化が無効になりました。
{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}
シンボルUNSAFE_CRYPTが定義されていない場合は、コンパイラにbeginキーワードを表示させます。
asm db $EB, $06, $EB, $FC, $EB, $FC, $FF, $F8 end;
これはちょっと怖いアセンブラー コードです。コードを「難読化」するという誰かのアイデア。あまり良い考えではありません。最初の 2 バイト ( $EB, $06) は、このすべてのコードの直後への相対ジャンプです。つまり、この一連のアセンブリをほぼどこにでも含めることができ、CPU は単純にそれを飛び越えます。次に、一連の奇妙なジャンプが続きます。2 回目$Eb $FCは、実際には最初のジャンプがあった場所へのジャンプです。最後の 2 バイト ( $FF, $F8) は実際には意味をなさない (これらは有効な Intel x86 命令ではない) ため、何らかのペイロードであると想定しています。