Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Приемы Вызова Программ    >>    antiexec
   
 
 Anti Exec (Int21h TSR)   Sergey Dushin 28.07.1996

Резидентная программа, отслеживающая и запрещающая запуск определенных программ



1k 
 

П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.