Радиоперехват

Xakep, номер #036, стр. 036-052-3


Z.: Я, пожалуй, затрону тему клонирования.

D.J.: МММ... Я думаю, соображающий народ понял.

Z.: Auf wiedersehen!!!

D.J.: Good Luck, Man!!! На этом мы заканчиваем нашу трансляцию в пространственном эфире, до скорых встреч, mein liebe friends!!!

ИСХОДНИК

Compiling:

tasm32 /m /ml slow.asm

tlink32 /Tpe /c /x /aa slow.obj

Source code: slow.asm

includelib import32.lib

extrn ExitProcess:near

.486p

model flat

.data

db ?

.code

start:

call j1

j1: pop edi ;Считываем EIP

lea esi,[edi+j2-j1] ;В esi - адрес точки входа для

;нового обработчика INT 3

push esp

push edx

sidt [esp+2h] ;Сохраняем значение IDTR

pop edx

pop ebx ;и отправляем его в ebx

xchg [ebx+18h],si ;Перехват INT 3h с одновременным занесением

rol esi,10h ;адреса старого обработчика

xchg [ebx+1eh],si ;в esi

int 3

push 0

call ExitProcess

j2: mov [ebx+1eh],si ;Точка входа в INT 3

shr esi,10h

mov [ebx+18h],si

xor ecx,ecx

push 0Fh ;Выделяем 4-килобайтовую страницу

;в системной области памяти

push ecx

push -1h

push ecx

push ecx

push ecx

inc ecx

push ecx

push ecx

ter: db 0CDh,20h,53h,00h,01h,00h

;VMMCall Page allocate

add esp,20h

lea esi,[edi+j3-j1] ;esi - адрес обработчика

;прерываний от таймера

xchg edi,eax

push edi

cld

push j4-j3

pop ecx

rep movsb ;Записываем обработчик в выделенную память

cli ;Запрет прерываний от внешних устройств

pop ecx

add ebx,280h

xchg [ebx],cx ;Перехватываем INT 50h, на которое в Windows

rol ecx,10h ;повешен обработчик IRQ0, то

xchg [ebx+6h],cx ;есть прерываний от таймера

rol ecx,10h

mov [edi+j7-j4+1h],ecx ;Сохраняем адрес старого обработчика

iretd

j3: pushfd ;сохраняем регистр флагов и EAX

push eax

call j5

j5: pop eax

dec byte ptr ss:[eax+jbyte-j5]

jnz j6

mov byte ptr ss:[eax+jbyte-j5],3h

;проглатываем каждое третье прерывание

mov al,60h ;Включаем аппаратное прерывание от

;таймера в режиме без приоритетов

out 20h,al

pop eax

popfd

iret

j6: pop eax

popfd

j7: push 088888888h ;Переход на предыдущую

;процедуру обработки прерывания

;в это поле будет

;записан адрес старого обработчика

ret

jbyte: db 1h

j4:

end start

Назад на стр. 036-052-2  Содержание