段階的に;
{$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 命令ではない) ため、何らかのペイロードであると想定しています。