Пpивет, Valery!
Глянь, может быть зто войдет в коллекцию, смотpи...
Не помню, откуда это взялось, но пpикольная штука :)
Запускаешь пpогpаммку, а тебе в ответ 'Hужно pаботать, а не игpать' ;)
Резидентная прога, перехватывает на себя 21-е прерывание,
функцию "execute".
Пока!
Sergey.
--- GoldED/386 2.50.b6+ FastEcho
 * Origin: Hету OrigiN. (2:5058/9.12)
{> Cut here. FileName= ANTIEXEC.PAS }
{$D-,B-}
{$M 1024, 0, 0}
program AntiGame;
uses
  Dos;
var
  Int21h, P: pointer;
  A: pointer absolute 0:$84;
  B: pointer absolute 0:$184;
  R: Registers;
  ProgramName: String[80];
  I, J: Byte;
const
  NamesNum = 7;
  NeedingNames: array [1 .. NamesNum] of string[8] =
    ('GPU', 'GOLD', #250'LOADER1', 'TETRIS', 'TET', 'POKER', 'DIGGER');
{$F+}
procedure My21h(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: Word); interrupt;
begin
  if AX = $4B00 then
  begin
    Move(Ptr(DS, DX)^, ProgramName[1], 80);
    ProgramName[0] := #$FF;
    ProgramName[0] := Char(Pos(#0, ProgramName) - 1);
    I := Byte(ProgramName[0]);
    while (I > 0) and (ProgramName[I] <> ':') and (ProgramName[I] <> '\') do Dec(I);
    J := Byte(ProgramName[0]) - I;
    Inc(I);
    Move(ProgramName[I], ProgramName[1], J);
    ProgramName[0] := Char(J);
    ProgramName[0] := Char(Pos('.', ProgramName) - 1);
    For I := 1 to Byte(ProgramName[0]) do
      ProgramName[I] := UpCase(ProgramName[I]);
    For I := 1 to NamesNum do
      if ProgramName = NeedingNames[I] then
      begin
        WriteLn('Нужно работать, а не играть.');
        Exit;
      end;
  end;
  R.Flags := Flags; R.AX := AX;
  R.BX := BX; R.CX := CX; R.DX := DX; R.SI := SI;
  R.DI := DI; R.DS := DS; R.ES := ES; R.BP := BP;
  inline($FA); P := B; B := Int21h; inline($FB);
  Intr($61, R);
  inline($FA); B := P; inline($FB);
  Flags := R.Flags; AX := R.AX;
  BX := R.BX; CX := R.CX; DX := R.DX; SI := R.SI;
  DI := R.DI; DS := R.DS; ES := R.ES; BP := R.BP;
end;
{$F-}
begin
  SwapVectors;
  inline($FA);
  Int21h := A;
  A := @My21h;
  inline($FB);
  WriteLn('Программа загружена.');
  Keep(0);
end.  
 |