> релокейтит что нужно как ?
в exe обычно нет relocation table
> как только получают управление вызывают GetModuleHandle(0) > и получают handle(что оказалось ни чем иным а BaseImage). MSDN: "If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process."
т.е. это хэндл на твою прогу, а они ждут хэндл на свою прогу
грузи свою прогу не по 0x400000
а их - по 0x400000 (VirtualAlloc)
мне нужно изучить работу некоторой проги. в частности как она юзает некоторые системные функции. мне нужно просмотреть какие параметры она передает винде а также подправить некоторые из них. короче перехват.
для этого я написал свой собственный загрузчик который грузит эту прогу + делает всю черную работу (настраивает ее импорт, релокейтит что нужно итд)
а потом в таблице импорта переписывает адреса нужных мне функций и ставит "нужные" адреса.
короче тут все путем. НО:
проблема возникает када он передает управление этой проге.
если ему скормить скажем notepad.exe то notepad гад получает управление, вызывает парочку системных функций, парочку своих и заверщает весь процесс (дебагил и лично видел).
некоторые проги просто получают любимый GPF :(
как мне видица трабл не в ДНК а чисто логический.
т.е. загрузчик написал вроде грамотно, но вот проги которые он грузит как то понимают что они работают "под присмотром" и либо виснут, либо завершаюца еще до entrypoint (в коде настроек,установке исключений, __startup итд)
далее заметил что почти все проги (откомпиленные VC и BCC) как только получают управление вызывают GetModuleHandle(0) и получают handle(что оказалось ни чем иным а BaseImage). Я попробовал перехватывать первые несколько вызовов GetModuleHandleA и возвращать истинную базу загрузки проги (а не дефолтные 0x400000). увы, не помогло...
может кто подсказать где ошибка? или где есть релевантные материалы?
заранее спасибо
[Win32] ктонть может проинструктировать?13.07.02 21:45 Автор: ggg <ggg> Статус: Elderman
> релокейтит что нужно как ?
в exe обычно нет relocation table
> как только получают управление вызывают GetModuleHandle(0) > и получают handle(что оказалось ни чем иным а BaseImage). MSDN: "If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process."
т.е. это хэндл на твою прогу, а они ждут хэндл на свою прогу
грузи свою прогу не по 0x400000
а их - по 0x400000 (VirtualAlloc)
[Win32] ктонть может проинструктировать?14.07.02 16:24 Автор: BXS Статус: Незарегистрированный пользователь
> загружаешь через ReadFile ? ДА, ЧИТАЮ READFILEом. РАЗУМЕЕЦА ПОТОМ ВСЕ ХЭНДЛЫ НА НЕГО ЗАКРЫВАЮ
> > релокейтит что нужно > как ? > в exe обычно нет relocation table ИМЕЮ В ВИДУ FIXUP. ОНИ ЕСТЬ И НАСТРАИВАЕТ ИХ МОЙ ЗАГРУЗЧИК
> > как только получают управление вызывают > GetModuleHandle(0) > > и получают handle(что оказалось ни чем иным а > BaseImage). > MSDN: "If this parameter is NULL, GetModuleHandle returns a > handle to the file used to create the calling process." > т.е. это хэндл на твою прогу, а они ждут хэндл на свою > прогу В КУРСЕ. ПОЭТОМУ Я ПЕРЕХВАТЫВАЛ ПЕРВЫЕ НЕСКОЛЬКО ВЫЗОВОВ И ДАВАЛ ХЕНДЛ (А ЭТО НИ ЧТО ИНОЕ КАК IMAGEBASE) НА МНОЮ ЗАГРУЖЕННЫЙ МОДУЛЬ
> грузи свою прогу не по 0x400000 > а их - по 0x400000 (VirtualAlloc) ДА ПРОБОВАЛ УЖЕ. НА ЭТАПЕ ЛИНКОВКИ УКАЗЫВАЛ ГРУЗИТЬ ПО ЛЮБОМУ КРОМЕ 0х400000.... НО ВИНДА ГРУЗИЛА МОЙ ЗАГРУЗЧИК ИМЕННО ТУДА.... ТАДА Я ПРОБОВАЛ СДЕАТЬ В 2 ЭТАПА...
Т.Е. МОЙ ЗАГРУЗЧИК ЗАГРУЗАЛСЯ ВИНДОЙ ПО 0х400000. ЗАТЕМ ОН ЗАГРУЖАЛ СВОЮ ВТОРУЮ НЕСКОЛЬКО ИЗМЕНЕННУЮ КОПИЮ ПО ЛЮБОМУ ДРУГОМУ АДРЕСУ. ПЕРЕДАВАЛ УПРАВЛЕНИЕ НА НЕГО.
ТОТ ДОЛЖЕН БЫЛ ВЫЗВАТЬ VirtualFree(0x400000) и загрузить модуль как раз туда...
но VirtualFree всегда возвращал почему то Invalid Handle... поэтому и полез на форум....
может есть какие соображения?
[Win32] ктонть может проинструктировать?14.07.02 20:55 Автор: ggg <ggg> Статус: Elderman