Сейчас на форуме: igorcauret, Rio (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Инжект x86 DLL в x64 процесс из WOW64 процесса |
Посл.ответ | Сообщение |
|
Создано: 15 мая 2015 21:03 · Личное сообщение · #1 Собственно, сабж. На MSDN, конечно, всё > On 64-bit Windows, a 64-bit process cannot load a 32-bit dynamic-link library (DLL). Additionally, a 32-bit process cannot load a 64-bit DLL Но мало ли есть какой-то хак, который позволяет осуществить указанные действия. Исходниками DLL, инжектируемого процесса и приложения, которое выполняет данный инжект, не обладаю. Пока что я наткнулся лишь на функцию inject_via_remotethread_wow64 из репозитория Metasploit -- https://github.com/OpenWireSec/metasploit/blob/master/external/source/meterpreter/source/common/arch/win/i386/base_inject.c > Attempt to gain code execution in a native x64 process from a wow64 process by transitioning out of the wow64 (x86) enviroment into a native x64 enviroment and accessing the native win64 API's Впрочем, применить её для инжекта 32-битной DLL в x64 процесс из WOW64 процесса у меня так и не получилось. Скажите, пожалуйста, такая возможность вообще существует? Есть ли какой-то хак / уязвимость определённой ОС / etc? Заранее благодарю за возможные ответы. ![]() |
|
Создано: 16 мая 2015 02:57 · Личное сообщение · #2 b0r3d0m пишет: Скажите, пожалуйста, такая возможность вообще существует? Теоретически да, всего лишь нужно написать свою среду исполнения для 32 битного кода, т.к. wow64 использовать не получится. Гораздо проще инжектировать 64 битную DLL в 32 битный процесс. ----- PGP key ![]() |
|
Создано: 16 мая 2015 07:45 · Личное сообщение · #3 b0r3d0m Марк Руссинович, например, в своём 32-битном Process Explorer'е для того, чтобы показывать информацию по 64-битным процессам, извлекает 64-битную копию из оверлея и запускает. Не думаю, что если бы тут была какая-то иная возможность, то он бы нам не поведал об этом ) ----- IZ.RU ![]() |
|
Создано: 16 мая 2015 10:37 · Личное сообщение · #4 DenCoder пишет: Не думаю, что если бы тут была какая-то иная возможность, то он бы нам не поведал об этом ) Показывать информацию можно, хоть и не без труда, иметь 64 битную версию проще чем извращаться. ----- PGP key ![]() |
|
Создано: 16 мая 2015 11:20 · Личное сообщение · #5 |
|
Создано: 16 мая 2015 11:30 · Поправил: -=AkaBOSS=- · Личное сообщение · #6 b0r3d0m Я так понимаю, длл не ваша - просто хочется заставить её работать. Навскидку, краткий список извращений, который существенно расширится по мере продвижения к цели: Во-первых - чтобы х32 код правильно выполнялся процессором, для его рабочего потока нужно вручную править контекст на предмет используемого кодового сегмента (как минимум). Во-вторых - для обработки исключений придётся внедрять свой х64 обработчик, без вариантов. В-третьих - ни одну функцию из другого модуля нельзя будет вызвать напрямую - ассемблер-то разный, да и конвенцию вызовов надо соблюдать. Это значит, что код для хуков и патчей тоже придётся делать х64. А если его так или иначе придётся переписывать, то почему не сделать сразу х64 длл? ?обавлено спуст¤ 5 минут jangle Но это только если 32битный процесс запущен из WOW64, тоесть необходима поддержка х64 на уровне системы. ![]() |
|
Создано: 17 мая 2015 04:53 · Личное сообщение · #7 jangle пишет: А есть примеры кода как это сделать? 32 битный процесс имеет полноценную нативную 64 битную среду, включающую в себя 64 битные ntdll, PEB, TEB, RTL_USER_PROCESS_PARAMETERS и PEB_LDR_DATA. Этого достаточно чтобы загружать 64 битные модули и выполнять 64 битный код. Примеры: Но есть ряд ограничений. Например вызвав нативный NtAllocateVirtualMemory нельзя выделить память выше 4гб. Также есть ряд функций NtWow64xxx дающих доступ к 64 битным функциям из 32 битного кода. Описания смотри ----- PGP key ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Инжект x86 DLL в x64 процесс из WOW64 процесса |