"С.П.Расторгуев, А.Е.Долгин "Как защитить информацию" (пособие по борьбе с хакерами)" - читать интересную книгу автораметка в командах перехода и цикла; addr - адрес в командах перехода и
вызова подпрограмм. 6. ИСПОЛНЯЕМЫЙ МОДУЛЬ - ЧТО МОЖНО СДЕЛАТЬ БЕЗ ИСХОДНЫХ ТЕКСТОВ? Одной из самых сложных работ в программировании является модификация исполняемых модулей при отсутствии исходных текстов. Надо признать, что программисту не часто приходится заниматься подобными работами, но, однако, никто не застрахован от потери собственных исходных текстов программ. В частности, мы обратились к решению названной задачи для того, чтобы исправить найденную в нашем пакете ошибку. "Исходники" к тому времени были случайно уничтожены при борьбе с вирусом. Бесполезно вспоминать и переписывать весь пакет - за тот срок, в течении которого гарантировалось устранение любых замечаний, мы в любом случае не успевали этого сделать. Поэтому стали искать другие пути. В результате разработали соответствующий метод и даже набор инструментальных средств, который с успехом применяем по сей день. Разумеется, приемы корректировки исполняемых модулей предназначены профессиональным разработчикам ПО для IBM PC в среде DOS. Поэтому опустим некоторые детали, которые профессионал должен знать, а в качестве примера возьмем лишь EXE-файлы - более сложные для модификации, поскольку все сказанное может быть отнесено и к COM-файлам. и собственно исполняемого кода. Информация заголовка используется операционной системой для загрузки модуля в оперативную память. Устанавливаются значения основных регистров, обрабатывается таблица перемещения, а затем управление передается задаче. В ходе работы все основные функции ввода/вывода, захвата или освобождения ОЗУ и т.п. обрабатываются операционной системой через прерывание 21h, а значит, всегда могут быть изменены с помощью специального драйвера, который либо резидентно находится в памяти, либо непосредственно включен в модифицируемый EXE-файл. Второй подход более удобен. Для корректировки функций EXE-файла необходимо: внедрить в него этот драйвер; осуществить передачу управления на драйвер. ВКЛЮЧЕНИЕ В ТЕЛО EXE-файла СВОЕГО МОДУЛЯ Вариантов включения собственного блока в существующий EXE-файл несколько: можно добавить его в конец или в начало файла; встроить в свободное место внутри программы или "склеить" им оба EXE-файла (свой и модифицируемый). Легче всего добавить дополнительные команды в конец EXE-файла и исправить в заголовке размер загружаемой части (с учетом добавленных байт). Однако предварительно необходимо проверить, возможна ли их загрузка в ОЗУ. Дело в том, что задача может быть оверлейной и DOS загрузит только ее корневой сегмент. Например, в BORLAND C++ размер BCC.EXE более 800 кб, а объем ОЗУ всего 640 кб. Ясно, что загрузкой и выгрузкой отдельных частей гиганта занимается специальный блок в |
|
|