|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 15, 2004 00:19:00 Хай!!! Короче понял многое, отладчик в этом помог. Но! Что то не вижу на кой фиг в коде перехвата стека надо: 1 mov cs:ss_save-110h,ss 2 mov cs:sp_save-110h,sp 3 mov cs:help_word - 110h,cs 4 mov ss,cs:help_word - 110h 5 mov sp,to_newstack + 136 6 mov cs:tg_infect - 110h,0 из 1,2,3, 4, 6 вычитать 110, а в 5 наоборот прибавить 136. Чо-то молчит отладчик пользуюсь по совету BrokenSword`a AvpUtlil.com. Может кто занимался по Ковалю или сам чего знает и поможет мне разобраться, где байты зимуют. Спасибо за просмотр темы!!! Злобное Прерывание. Просьба не игнорировать, а помочь разобраться желательно по пальцам. Так наверняка пойму. Заранее благодарен. 406706934__Rezident.asm |
|
|
Дата: Янв 15, 2004 10:25:38 · Поправил: q_q EvilsInterrupt Обработчик прерывания Int28, по замыслу автора, использует свой стек. 1-2 - сохраняют предыдущий указатель на вершину стека, 3-4-5 - устанавливают свой. 110h - это начало вируса в исходном коде. В дальнейшем он будет переписан в другой (выделенный) сегмент, а там он будет начинаться с адреса seg:0000, т.о. вычитание 110h - это забота о правильных адресах в новом сегменте. 136 - это размер стека, примерно 140 байт, см. newstack dw 70 dup (0)Если в 5 раскрыть to_newstack, то получим mov sp,offset newstack - 110h + 136Тут тебе и 110h и 136 примерно равное 70-ти word'ам (140-к байт). |
|
|
Дата: Янв 15, 2004 23:13:21 q_q Спасибо за науку, но прикинь я дошел до этого раньше чем получил ответ! Во круто! Токо кажет- ся мне, что вместо 136 надо 138 ложить, т.к. в стек ложатся слова, а не dd! Кстати запускаю этот вирь из под AvpUtil.com, сижу на 98 винде и тут нате в первой строчке, где устанавливается новый вектор для int 28h. Появляется зеленный фон и по нему, скачет следущая надпись: Ошибка при отводе памяти Не удается запустить COMMAND, проис Перезагружался в чистый dos v.6.0 таже дурь. Что бы это могло бы быть? |
|
|
Дата: Янв 16, 2004 19:30:49 q_q ау !!! |
|
|
Дата: Янв 17, 2004 04:05:54 EvilsInterrupt 1. У меня нет w98; 2. я не знаю что такое AvpUtil.com; 3. новый вектор int28h устанавливается, судя по исходнику в 188-189 строках; 4. сообщение 'Не удается запустить COMMAND, проис' мне ни о чем не говорит, особенно проис. |
|
|
Дата: Янв 17, 2004 10:24:07 q_q Извини может обидел своей дурью. А эту надпись я целиком привел как он мне ее и выдает!!! В тело вира врубился, токо я не врублюсь зачем надо очищать конвеер это где jmp cl_conv. Также не фига непойму на кой фиг в обработчике 13 го надо менять возврат флагов? Буду признателен!!! |
|
|
Дата: Янв 17, 2004 12:45:33 EvilsInterrupt зачем надо очищать конвеер
mov start_cs,ax ; пишет в start_cs
mov ds,ax
jmp cl_conv_1
cl_conv_1: db 0eah ; изначально jmp far ptr 0000:0100
dw 100h
start_cs dw 0
...
Наверное, автор программы считал, что в момент mov start_cs,ax команда jmp far ptr ... уже может быть в конвейере команд процессора, а в ней еще нет правильного значения сегмента. на кой фиг в обработчике 13 го надо менять возврат флагов Для того чтобы вернуть в бите CF признак, который вернул предыдущий обработчик int13h. На мой взгляд, достаточно было сделать new_13h: jmp cs:start_13h
tg_13h db 0
ax_13h dw 0
cs_13h dw 0
ip_13h dw 0
start_13h: mov cs:tg_13h - 110h,1
pushf
db 9ah
old_13h dw 0
old_13h_2 dw 0
mov cs:tg_13h - 110h,0
retf 2 |
|
|
Дата: Янв 22, 2004 09:58:05 Вирь паразитирует на прогу по адресу 0000:0070.Что это за прога? |
|
|
Дата: Янв 22, 2004 11:06:20 EvilsInterrupt 0000:0070 - адрес обработчика int1Ch - пользовательское прерывание таймера - происходит каждые 55мс, т.е примерно 18.2 раза в секунду. По умолчанию обработчик содержит одну команду iret. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081 |