Загрузить 64-битную kernel32 из 32-битного кода.

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Загрузить 64-битную kernel32 из 32-битного кода.

Сообщение The trick » 04.06.2016 (Сб) 20:43

Всем привет. Скомпилировал x64 шеллкод на C++ в виде EXE без импорта. В нем получаю NTDLL через PEB->Ldr, получаю адреса нужных функций, и пробую вручную загружать EXE переданный в качестве параметра в точку входа EXE. Облом случается при попытке загрузить kernel32 (kernelbase грузтся отлично) на Win7 x64. Код вызываю через call 33:xxxxxxxx. Делаю лог - фейл случается при вызове LdrLoadDll с библиотекой kernel32 - STATUS_CONFLICTING_ADDRESSES. Из-за этого не может загрузиться ни одна библиотека. Повторюсь kernelbase и ntdll работают отлично, память под секции и заголовки выделяется успешно, проблема при обработки импорта.
Я хотел бы узнать, как можно обойти данное поведение. К примеру если я вручную буду загружать kernel32 и добавлю соответствующие записи в PEB->Ldr будет ли это работать? Просто в списке лоадера, насколько я знаю, есть кроме трех основных листов еще список по хешам имен библиотек, который различается на разных версиях винды. Может кто делал подобное, просто не хочется делать напрасную работу в этом направлении,а потом обломится что это не будет работать.
Спасибо.
UA6527P

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Загрузить 64-битную kernel32 из 32-битного кода.

Сообщение jangle » 06.06.2016 (Пн) 13:48

в виде EXE без импорта


в NT EXE файлы без импорта не загружаются

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Загрузить 64-битную kernel32 из 32-битного кода.

Сообщение The trick » 06.06.2016 (Пн) 15:37

jangle писал(а):в NT EXE файлы без импорта не загружаются

Я вручную гружу.
UA6527P

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Загрузить 64-битную kernel32 из 32-битного кода.

Сообщение The trick » 06.06.2016 (Пн) 21:24

Короче как мне подсказали на одном из форумов это может быть из-за ASLR, поэтому либо вручную (что я отметаю, т.к. некоторый структуры загрузчика недокументированы) либо через x64 процесс носитель. Сделал через процесс носитель, все работает.
Кстати кто-нибудь знает отладчик чтобы можно было отлаживать из 32 битного кода 64 битный, и вообще существуют такие? OllyDbg не хочет, x32dbg тоже.
UA6527P


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList