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





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




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


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