Вопрос № 143922: Здравствуйте, уважаемые эксперты. Возникли некоторые теоретические вопросы по главе 13 "Поиск и считывание файлов". 1. В самом начале главы 13.1.1. автор пишет: "Как вы уже знаете, файлы типа СОМ загружаются в первый сво...
Вопрос № 143.922
Здравствуйте, уважаемые эксперты. Возникли некоторые теоретические вопросы по главе 13 "Поиск и считывание файлов". 1. В самом начале главы 13.1.1. автор пишет: "Как вы уже знаете, файлы типа СОМ загружаются в первый свободный сегмент, и их код располагается по смещению 100h. Следовательно, нам нужно будет сохранить в теле нашего вируса первые три байта "файла-жертвы", записать вирус в "хвост" файла и, вместо сохранённых трёх байт, установить команду jmp на начало
кода нашего вируса (т.е. передать ему управление)". Вот, ума не приложу, почему "следовательно"?, откуда такой вывод? Нет же никакой взаимосвязи между "следовательно" и "кодом, располагающимся по смещению 100h". И почему нужно обязательно сохранять именно три байта, с чем именно это связано? Может, есть, конечно, такое правило, что нужно сохранять только 3 байта и ни байтом больше, но до 13 главы я о нём ничего у автора не чит
ал. 2. В главе 13.1.2. автор, объясняя PSP и DTA, пишет: "По адресу 80h находится по умолчанию DTA. ... проблема в том, что по этому адресу (80h) располагается изначально командная строка. ... Дело в том, что когда мы попробуем искать первый файл, то затрём командную строку (L_C:/S/U). Получается что "программа-жертва", к которой мы "подцепились", не сможет прочитать те параметры, которые ей передал пользователь. В данном случае - это (L_/S/U ". Не понимаю, как
мы затрём DTA "программы-жертвы", у ней же свой PSP, а у нашего вируса другой. Мы же хотим прицепиться в "хвост" "программы-жертвы", т.е. после её PSP и областей кода и данных. Как я представляю себе, сначала идёт PSP "программы-жертвы" (100h), затем сама собственно "программа-жертва" (код и данные), пусть их размер будет, например, 90h. Тогда общий размер "программы-жертвы" будет равен 100h (PSP)+90h (код и данны
е)=190h. Значит, если мы цепляемся в "хвост" "программы-жертвы", то наш вирус начнётся со 191h. Причём со 191h начнётся наш PSP, отличный от PSP "программы-жертвы". Таким образом, с 191h до 290h будет находится PSP нашего вируса, а уже после 290h начнутся код и данные нашего вируса. Так как же при таком раскладе, если он, конечно, правильный, мы затрём DTA?!
Отправлен: 14.09.2008, 19:41
Вопрос задал: Aistesis (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Zetasm
Здравствуйте, Aistesis!
1. 3 байта - это размер памяти занимемой командой jmp, котурую вирус запишет по смещению 100h(в файле это первые 3 первых байта).
2. У программы может быть только один PSP. Внедренный в программу вирус не имеет своего PSP.
0000h - 00FFh : PSP программы жертвы 0100h - 0102h : jmp <начало кода вируса> 0103h - xxxxh : тело программы жертвы (xxxx = размер файла com - 1) xxxxh - yyyyh : тело вируса (код + данные + 3 сохраненных байта зараженной программы)
Приложение:
Ответ отправил: Zetasm (статус: 2-ой класс)
Ответ отправлен: 14.09.2008, 20:12 Оценка за ответ: 4