Работа до Entry Point

Тема в разделе "WASM.RESEARCH", создана пользователем Serg50, 17 фев 2010.

  1. Serg50

    Serg50 New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    48
    При попытки поковырятся в одной программе обнаружил, что она выполняет ряд действий до того как управление передается на точку входа, в частности создание лог-файлов. Для просмотра использовал Ida( знаю, что не лучший выбор, но я к ней привык:) Как это происходит, и как поточнее понять где происходит эта работа?

    Не пинайте если вопрос... все же я по професии химик, а это хобби :)
     
  2. redcat

    redcat New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    62
    Если правильно понял вопрос, то можно посмотреть в исходниках, поставляемых с VC папка, ...\crt\src, смотреть файл crt0.c
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    DllMain импортируемых длл, TLS...
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Serg50 Любой компилятор с языков высокого уровня вставляет перед точкой входа программу "настройки среды". В программе на ассемблере вы такого не увидете.
    Задавайте вопрос поконкретнее, а то сейчас пойдет флуд... в сторону.
     
  5. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    у большинства компилеров возможно убрать стартап код.
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну-ну. Начинается флуд. Стартап убирают в экзотических случаях : или когда пишут "обрезки" или вообще модули без операционки. Нормальная программа не будет без него работать.
    Про большинство я бы не расписывался, т.к. в коммерческих компиляторах обычно защита сидит именно в стартапе. А кто еще может сказать - этой программе осталось жить 20 дней :)
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    valterg
    Это не "перед точкой входа", а "на точке входа". Т.е. после попадания управления на PE Entry Point.
     
  8. Serg50

    Serg50 New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    48
    Спасибо за внимание. Хотя собака оказалась зарыта не там :), все равно это любопытно и я могу сформулировать вопрос уже более корректно:

    Как и каким дебаггером удобнее отследить, что выполняет DLL загружаемая системой перед программой в DllMain?

    В Ida можно тормознуть программу на первой же комманде, но тогда потребуется продираться через весь код загрузчика. А это не очнь эффективно, особенно если этих DLL много(в разбираемом мною случае их около 30:). В Olly, который я поставил на прошлой неделе я вообще не нашел такой возможности. Или я плохо искал?
     
  9. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Плохо искал.... В настройках есть пункт где брякатся...
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Serg50
    Поставить брейк на процедуру, которая вызывается для нотификации длл. Это LdrpCallInitRoutine()/LdrpRunInitializeRoutines(). Можно снять лог, установив LdrpShowInitRoutines/ShowSnaps в 1.
     
  11. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Да, кстати, код выполняться может до ЕР необязательно в либе - хорошая статья на тему такой малвары есть у Криса и им же придуманный способ выполнения кода до ЕР.
     
  12. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    данная ст0тья http://www.insidepro.com/kk/236/236r.shtml
     
  13. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    причем не может, а выполняется
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    pr0mix
    Мы ожидале эксплоит для лодера, который передаст управление на загружаемый модуль, есчо до вызова его(процедура инициализации, тлс и сех(не x86)).. увидили манипуляции в тлс - колбеках и Криса подруги фоту.
     
  15. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    n0name под новый год помницо крякми выкладывал, в котором был фокус с ТЛС.
    олли умеет брякатся на ДллМейн каждой длл.
     
  16. Serg50

    Serg50 New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    48
    Не уверен. Если о опции "Break on new module(DLL)" то с ней олли замерла только в модуле ntdll в неясном мне месте :) И к этому моменту уже загружена куча модулей, и не только системных. И если иметь терпение то можно дойти до точки( и поставить там break), где вызывается DllMain. Но у меня сложилось впечатление, что это DLL уже загружаемые программой через LoadLibrary.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Serg50
    Проецирование секции это одно из событий, доставляемых отладчику. Именно при этом олли останавливается, адрес соответственно в шлюзе(KiFastSystemCallRet), бактрейс выполните:
    Код (Text):
    1. ZwMapViewOfSection
    2. LdrpMapDll
    3. LdrpLoadDll
    4. LdrLoadDll
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    По теме матчасть. В лодер заложена возможность отладки, логгирования событий и ошибок. За это отвечают в основном переменные:
    o LdrpShowRecursiveDllLoads/LdrpBreakOnRecursiveDllLoads есть ShowSnaps, это не нужно вобщем.
    o LdrpBreakOnExceptions
    Если возникает исключение в загрузчике, сех выполняет логгирование в LdrpGenericExceptionFilter() причины ошибки и генерит брейк в DbgBreakPoint().
    o LdrpShowInitRoutines
    Посылает отладчику сообщение о вызове InitRoutine модулей. Недостаток - не доставляется причина DLL_THREAD_ATTACH.
    o ShowSnaps & ShowErrors.
    Логирует практически все телодвижения загрузчика, доставляя при этом сообщения отладчику. Очень полезные переменные.
     
  19. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Разобью вопрос на два :

    1) как брякнуться на полной программе - на этот вопрос и отвечают в топике и я тут пас.
    ясно, что нужно брякнуться где-то в недрах системного загрузчика и поставить бряк по памяти на секцию DllMain уже после ее загрузки, но до выполнения. Либо как-то "дошагать" до этого - но по-моему Олли для этого не годится.

    2) как протрассировать DllMain отдельно ?
    Я для интереса загрузил отдельную DLL в Олли и - она остановилась на DllMain, если я конечно не перепутал что-то.
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    valterg
    Олли чудесно с этим справляется. Не вижу проблемы.