Как стать автором
Обновить

Комментарии 4

Спасибо. Добавил в закладки.

Часто возникает соблазн внедрить свой код в чужой файл без какой бы то нибыло его модификации.

Самый простой способ: создать процесс с чужим кодом с помощью CreateProcess()с dwCreationFlags=CREATE_SUSPENDED, а затем выделить новую страницу памяти (VirtualAllocEx с hProcess и flAllocationType=MEM_COMMIT|MEM_RESERVE), потом WriteProcessMemory запишет в неё имя нашей DLL. И останется только запустить ещё один поток (CreateRemoteThread), который вызовет LoadLibrary. Сложности будут, если чужой код собран под 32-битную архитектуру, а внедряющая программа - под 64 бита, но это тоже решаемо. И в конце останется только разбудить чужой процесс (ResumeThread).

Самый простой способ: создать процесс с чужим кодом с помощью CreateProcess()

Вопрос был не столько в том, как можно не модифицировать EXE файл, но и как ничего не изменять в процедуре запуска этого приложения, которое может стартовать, скажем, через ярлык на рабочем столе, или как-то ещё - изнутри, например, другой программы.
Комильфо - это было бы поместить дополнительную DLL в каталог с EXE файлом и ничего больше не трогать.
Описываемый Вами способ конечно, простой, только чтобы создать этот процесс понадобится дополнительный EXE файл, который будет запускать из себя отлаживаемый. А здесь могут возникнуть свои грабли, например с передаваемыми в программу параметрами, или названием этого дополнительного файла. Так что - "хрен редьки не слаще". Хотя, конечно же, можно и так.

Прочитал по диагонали - не пойму, кто ЦА этой статьи?

Для новичков слишком сложно, для опытных вообще не интересно, а интересующимся на васм.ру еще 15 лет назад все разжевали. Новичкам подошел бы OllyDbg, а тут и IDA, и импорт, и написание dll, и классическая ошибка всех плохих учебников: "а теперь напишем этот набор символов - вуаля, работает!"

0xFF, 0x25, 0x00, 0x00, 0x00, 0x00

Но иногда встречаются EXE файлы, у которых в заголовке в параметре IMAGE_NT_HEADER.OptionalHeader.DllCharacteristics установлен флаг «DLL Can Move» и в этом случае ОС вправе загрузить его по любому другому адресу.

В 99% случаев dll и будет загружена по произвольному адресу, а не иногда. Именно за этим и придуманы релоки.

Короче, какая-то сборная солянка, вдобавок "несъедобная".

P.S. И да, комментатор выше прав - для таких задач больше подойдет лоадер. А для "комильфо" рекомендую гуглить: перенаправление dll.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории