![]() |
eXeL@B —› Вопросы новичков —› Подключение dll в исполняемый exe, редактируя таблицу импорта |
Посл.ответ | Сообщение |
|
Создано: 21 октября 2015 00:02 · Поправил: Sunchey · Личное сообщение · #1 Здравствуйте. Наткнулся на статью Криса Касперски (https://www.evilfingers.com/publications/research_RU/dllmain.pdf), где он инжектит dll-ку следущего содержания: Code:
в обычный exe файл. Кратко говоря, добавляем в этом exe файле в таблице импорта еще одну запись о нашей библиотеке, переносим таблицу импорта (уже с новой записью об импортируемой dll) в свободное пространство, где достаточно нулей, меняем ссылку на таблицу импорта и ее размер в DATA_DIRECTORY. Все должно работать. Но не работает... Статья старая, но пробовал переносить и редактировать таблицу импорта и в 8-ке, и в XP. В первом случае просто подвисает и предлагает завершить процесс. А в XP вылазит другая ошибка: Code:
А вот у другого файла в XP, созданного другим компилятором, выводит сообщения из библиотеки, но не выводит сообщения из файла, и все равно подвисает с ошибкой: Code:
Гугление по ошибкам приводит к абстрактным описаниям общих ошибок. Пробовал расширять размер секции, в которой находится таблица иморта, но никакой реакции. Причем во всех случаях функцию находит, т.к. стоит поменять ее название в исходнике библиотеки и перекомпилировать - сразу ругается, что нет такой функции. Потому и вопрос, вроде все по инструкции, и систему взял старую, а все равно не работает. ![]() ![]() |
|
Создано: 21 октября 2015 03:07 · Поправил: plutos · Личное сообщение · #2 |
|
Создано: 21 октября 2015 12:51 · Поправил: ajax · Личное сообщение · #3 |
|
Создано: 24 октября 2015 00:48 · Поправил: Sunchey · Личное сообщение · #4 ajax пишет: по этой теме много нюансов. на вопрос в такой форме, без файлов "до-после", можно посмотреть и забыть. варианты от кривой новой таблицы до вывода dll в консоль гуевому приложению Приложение самое простое консольное, просто выводит строку, код библиотеки выше, но выложу файлы до-после, а также картинку новой таблицы импорта, она выделена цветом на рисунке. ![]() Добавлено спустя 10 минут ![]() Добавлено спустя 10 минут ![]() Добавлено спустя 15 минут Ну и добавлю тут вместе код приложения и код библиотеки. Приложение: Code:
Библиотека: Code:
Добавлено спустя 26 минут Все это компилировалось и редактировалось в Windows XP, компилятор VS2008. Но в итоге опять ошибка 0xc0000005. ![]() |
|
Создано: 24 октября 2015 06:33 · Личное сообщение · #5 Sunchey Вот ![]() |
|
Создано: 24 октября 2015 15:07 · Личное сообщение · #6 Спасибо, одной проблемой стало меньше, теперь выводится сообщения из библиотеки, но не выводится сообщение из самого приложения =) И завершается с ошибкой, на этот раз The application failed to initialize properly (0xc0000142). Как я понял, вы занулили ссылку на таблицу имен импорта (INT) и ее размер в DATA_DIRECTORY. Старая версия hiew показывает это как резервное поле, в отличие от 8 версии. Пробовал сделать ссылку OriginalFirstThunk на эту таблицу (INT) и расширить ее размер на 8 байт, т.к. нулей после таблицы хватает, но никакого эффекта не дало. Так что сделал как у вас - занулил ссылку на это дело в DATA_DIRECTORY. И пока не знаю что еще можно сделать... ![]() |
|
Создано: 24 октября 2015 17:06 · Личное сообщение · #7 |
|
Создано: 24 октября 2015 18:03 · Поправил: Sunchey · Личное сообщение · #8 Про библиотеку я забыл, заработало! Спасибо за ответы ![]() Получается, вся проблема была как раз в том, что надо было убрать Import Table как структуру DATA_DIRECTORY, заменив ссылку и размер нулями, и в возвращении TRUE из библиотеки. Причем, работоспособно и в Windows 8. Только мне осталось непонятным, почему нельзя было одну ссылку на новую функцию из внедряемой библиотеки добавить в эту таблицу INT и увеличить размер на 8 байт. У меня там 12 байт нулей свободного пространства, хотя может это к чему-нибудь уже относилось. И еще вопрос, аналогичное внедрение ведь возмножно и в файлах ELF в unix-системе? Чистой правкой байт в редакторе. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Подключение dll в исполняемый exe, редактируя таблицу импорта |