информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыЗа кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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) попробуй лишний раз проверить себя - сравни адресное пространство при обычном запуске и с твоим загрузчиком
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach