vx1d, Так он исполняется к примеру при сервисном вызове. Переключается кодовый сегмент. https://github.com/darkspik3/Valhalla-ezines/blob/master/Valhalla #1/articles/HEAVEN.TXT
Код (Text): 0:001> !wow64exts.info Guest (WoW) PEB: 0x7efde000 Native PEB: 0x7efdf000 Всегда ли нативный пеб больше WoW на 1000h? --- Сообщение объединено, 2 апр 2019 --- получаю PEB64 Код (ASM): ;Switch x64 db 0eah dd label dw 33h label: use64 mov rax,30h mov rax,[gs:rax]
Можно ли подгрузить в wow64 процесс 64-битную kernel32.dll (предварительно получив исполенение x64 кода)? будет ли библиотека правильно работать?
я бы не стал на это затачивать свои алгоритмы... почему не попробовать? как бы ntdll.dll есть, вызвать одну функцию всего лишь надо... --- Сообщение объединено, 5 апр 2019 --- интересный видос по теме heavens gate и wow64:
какую функцию? а то я через чтение файла собрался делать а поток который исполняет x64 код он будет win32 или натив?
ну бывают потоки (как я понимаю, могу ошибатся) зарегистрированные в csrss.exe (win32 из них можно делать к примеру UrlDownloadToFile) а бывают нативные из них UrlDownloadToFile не работает
ну тут надо тестить опять же... я слышал, что такая тема есть (в контексте именно сетевых функций почему-то), но никогда с ней не сталкивался... не могу ничего полезного тут сказать, извини...
вроде бы переключился подгрузил kernel32.dll вроде бы и работает, user32.dll из windows\system32 подгрузил, но при вызове DllMain для инициализации получаю ошибку, вряд ли заработает:
Подгружать kernel32.dll и user32.dll не стоит, особенно последнюю. Работать нормально не будет, я проверял.
повозился с загрузками этих либ, создал окно на Windows10 64битным кодом (на Windows7 user32!DllMain не отрабатывал) , но дальше был затык c user32.dll в моем случае user32.dll загружался, DllMain отрабатывал, но не полностью инициализировалось что-то) (проблемы с gSharedInfo и тд) и как результат некоторые gdi32 api не заработали углубляться в тему не стал, но осталось смутное сомнение что можно допилить
Если вдруг еще нужно, вот статья хорошая. http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/ ( там есть исходник, но вот еще один пример https://github.com/dadas190/Heavens-Gate-2.0 ) Про загрузку kernel32.dll и остальных библиотек как раз говорится. В 10 винде еще сильней гайки закрутили насколько я помню.
на самом деле объясните мне, зачем вы изобретаете велосипед с этим хевенсгейтом? для большинства задач, таких как инжекты там, изменение контекстов потоков стороннего 64-битного процесса и тд вполне должно хватать нтдлл... зачем вы себе яйки перекрутили 32-битным РЕ, а потом в него пытаетесь 64-битные либы грузить?
ну как пример можно инжект написать на дотнете в режме anycpu, в этом случае один и тот же исполняемый файл будет запущен в 64-битном процессе на 64-битной системе и в 32-битном процессе в 32-битной системе))...
kernel32.dll это всего лишь обертка, одного ntdll и правда должно хватать. Всегда можно в иде нужную длл подглядеть, переписать функционал. Вообще врата нужны чтобы сисколы из под wow64 вызывать, не знаю кто там либы придумал грузить.