| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
|  |  |  | [Win32] ктонть может проинструктировать?  14.07.02 20:55  Число просмотров: 981 Автор: ggg <ggg> Статус: Elderman
 |  
| > ИМЕЮ В ВИДУ FIXUP. ОНИ ЕСТЬ И НАСТРАИВАЕТ ИХ МОЙ ЗАГРУЗЧИК чё то склероз у меня :)
 а что такое fixup ?
 в смысле секции по местам распихать ?
 
 соображения:
 
 1) доступ к секциям проставляешь ?
 
 2) раз VirtualFree обламывается, значит винда память не так выделяла
 посмотри что VirtualQuery скажет
 
 3) т.к. в экзешнике нет relocation table, то грузить его надо по его родному адресу
 
 4) попробуй лишний раз проверить себя - сравни адресное пространство при обычном запуске и с твоим загрузчиком
 
 |  | <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) попробуй лишний раз проверить себя - сравни адресное пространство при обычном запуске и с твоим загрузчиком
 
 |  
 
 
 |  |