Допустим есть некая функция имплементированная в ехе файле. Адрес, и декалрация функции найдены с помощью IDA. Как из моего собственного приложения можно вызвать эту функцию?
1. Поиск проекций. Перечисление модулей, альтернатива не затрагивает базу данных загрузчика, а перечисление выполняется посредством получения имён проекций. 2. Получение адреса функции. Алгоритм должен содержать в себе мощный функционал, например сканер памяти и дизасм инструкций. Иначе если модуль побит получение его базы или разбор кода невозможен. 3. Загрузка модуля из памяти, стороний лоадер/модификация деволтного загрузчика. 4. Прежде изучить матчасть полностью.
katrus флаг PE заголовке в выставь, и точку входа например обнули - будет длл max7C4 LoadLibrary возможно не станет грузить PE у которого не выставлен флаг что он длл Clerk зачем так сложно для такой простой задачи?
Ничего не мешает, но у ехе обычно нету релоков - LoadLibrary грузить не захочет. Если релоки есть - проблема не понятна.
cppasm LoadLibrary загрузит exe (без флага IMAGE_FILE_DLL) по тому адресу, по какому ей понравится, независимо от того, есть ли у него релоки. Правда крайне маловероятно, что там что-то будет работать, но автор же хотел только вызвать. Правда, если автор уверен, что вызываемая функция базонезависима, и её работоспособность так же не зависит от состояния процесса, то можно вполне ожидать, что ф-ия ещё и успешно вернёт управление.
Без релоков можно свой exe (который хочет вызвать функцию) разместить по нестандартному адресу (опция линкера /BASE), дабы дефолтный для exe адрес (0x00400000) был свободен, тогда LoadLibrary, по идее, нормально сработает (ессно PE заголовок надо поправить на предмет точки входа и флагов - типа это DLL).
ЭЭЭэээммм, а если он загрузит тот ЕХЕ, и допустим тому ЕХЕ пофигу на все ее предыдущие состояния. Инжектирует код. Имхо тот ЕХЕ будет то в совем адресном пространстве, и его RET, приведет к возврату из совсем не того кода... Или я гоню ?
ни кто не мешает указать точку входа другую. думаю в том exe найдется 6 ( Код (Text): xor eax, eax inc eax ret 12 ) свободных байт для альтернативной точки входа но если и не найдется, то никто не мешает перехватить управление и нормально выйти из dll