Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[Win32] ктонть может проинструктировать? 13.07.02 21:45 Число просмотров: 868
Автор: ggg <ggg> Статус: Elderman
|
загружаешь через ReadFile ?
> релокейтит что нужно как ?
в 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)
|
<programming>
|
[Win32] ктонть может проинструктировать? 13.07.02 21:23
Автор: BXS Статус: Незарегистрированный пользователь
|
мне нужно изучить работу некоторой проги. в частности как она юзает некоторые системные функции. мне нужно просмотреть какие параметры она передает винде а также подправить некоторые из них. короче перехват.
для этого я написал свой собственный загрузчик который грузит эту прогу + делает всю черную работу (настраивает ее импорт, релокейтит что нужно итд)
а потом в таблице импорта переписывает адреса нужных мне функций и ставит "нужные" адреса.
короче тут все путем. НО:
проблема возникает када он передает управление этой проге.
если ему скормить скажем notepad.exe то notepad гад получает управление, вызывает парочку системных функций, парочку своих и заверщает весь процесс (дебагил и лично видел).
некоторые проги просто получают любимый GPF :(
как мне видица трабл не в ДНК а чисто логический.
т.е. загрузчик написал вроде грамотно, но вот проги которые он грузит как то понимают что они работают "под присмотром" и либо виснут, либо завершаюца еще до entrypoint (в коде настроек,установке исключений, __startup итд)
далее заметил что почти все проги (откомпиленные VC и BCC) как только получают управление вызывают GetModuleHandle(0) и получают handle(что оказалось ни чем иным а BaseImage). Я попробовал перехватывать первые несколько вызовов GetModuleHandleA и возвращать истинную базу загрузки проги (а не дефолтные 0x400000). увы, не помогло...
может кто подсказать где ошибка? или где есть релевантные материалы?
заранее спасибо
|
|
[Win32] ктонть может проинструктировать? 13.07.02 21:45
Автор: ggg <ggg> Статус: Elderman
|
загружаешь через ReadFile ?
> релокейтит что нужно как ?
в 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
|
> ИМЕЮ В ВИДУ FIXUP. ОНИ ЕСТЬ И НАСТРАИВАЕТ ИХ МОЙ ЗАГРУЗЧИК чё то склероз у меня :)
а что такое fixup ?
в смысле секции по местам распихать ?
соображения:
1) доступ к секциям проставляешь ?
2) раз VirtualFree обламывается, значит винда память не так выделяла
посмотри что VirtualQuery скажет
3) т.к. в экзешнике нет relocation table, то грузить его надо по его родному адресу
4) попробуй лишний раз проверить себя - сравни адресное пространство при обычном запуске и с твоим загрузчиком
|
|
|