· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Вопрос по вирю И.М. Коваля.

Посл.отвђт Сообщен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