Сейчас на форуме: igorcauret, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Инжект x86 DLL в x64 процесс из WOW64 процесса
Посл.ответ Сообщение

Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 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?

Заранее благодарю за возможные ответы.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 16 мая 2015 02:57
· Личное сообщение · #2

b0r3d0m пишет:
Скажите, пожалуйста, такая возможность вообще существует?

Теоретически да, всего лишь нужно написать свою среду исполнения для 32 битного кода, т.к. wow64 использовать не получится.
Гораздо проще инжектировать 64 битную DLL в 32 битный процесс.

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: b0r3d0m


Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 16 мая 2015 07:45
· Личное сообщение · #3

b0r3d0m
Марк Руссинович, например, в своём 32-битном Process Explorer'е для того, чтобы показывать информацию по 64-битным процессам, извлекает 64-битную копию из оверлея и запускает. Не думаю, что если бы тут была какая-то иная возможность, то он бы нам не поведал об этом )

-----
IZ.RU


| Сообщение посчитали полезным: b0r3d0m

Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 16 мая 2015 10:37
· Личное сообщение · #4

DenCoder пишет:
Не думаю, что если бы тут была какая-то иная возможность, то он бы нам не поведал об этом )

Показывать информацию можно, хоть и не без труда, иметь 64 битную версию проще чем извращаться.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

Создано: 16 мая 2015 11:20
· Личное сообщение · #5

ntldr пишет:
Гораздо проще инжектировать 64 битную DLL в 32 битный процесс.


А есть примеры кода как это сделать?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 16 мая 2015 11:30 · Поправил: -=AkaBOSS=-
· Личное сообщение · #6

b0r3d0m
Я так понимаю, длл не ваша - просто хочется заставить её работать.
Навскидку, краткий список извращений, который существенно расширится по мере продвижения к цели:

Во-первых - чтобы х32 код правильно выполнялся процессором, для его рабочего потока нужно вручную править контекст на предмет используемого кодового сегмента (как минимум).
Во-вторых - для обработки исключений придётся внедрять свой х64 обработчик, без вариантов.
В-третьих - ни одну функцию из другого модуля нельзя будет вызвать напрямую - ассемблер-то разный, да и конвенцию вызовов надо соблюдать.
Это значит, что код для хуков и патчей тоже придётся делать х64. А если его так или иначе придётся переписывать, то почему не сделать сразу х64 длл?

?обавлено спуст¤ 5 минут
jangle
Но это только если 32битный процесс запущен из WOW64, тоесть необходима поддержка х64 на уровне системы.
статья на тему инжекта



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 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 битного кода. Описания смотри здесь и в дизасме ntdll из директории SysWOW64.

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: Jupiter
 eXeL@B —› Вопросы новичков —› Инжект x86 DLL в x64 процесс из WOW64 процесса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати