BP в Olly

Тема в разделе "WASM.BEGINNERS", создана пользователем vertax, 11 апр 2009.

  1. vertax

    vertax New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2009
    Сообщения:
    10
    Загружаю прогу в olly (грузятся стандартные dll), после запуска прога подгружает и распаковывает свои dll
    Как найти OEP ?
    Или ставить BP в таких случиях ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Универсального способа нет. Примерно EP можно определить выполнив останов на какойлибо функции, которая вызывается вначале работы программы, например GetModuleHandle(). После токо, как будет определена закономерность вызова апи, к примеру вызов сервиса, после которого выполняется уже распакованный код, следует выполнить трассировку, тогда будет найдена EP. Или использование сторожевых страниц может помочь, в случае если EP находится в одной страницы, а до вызова её выполняются действия к другими страницами в этом случае можно пометить страницу как сторожевую(PAGE_GUARD) и при обращании к ней возникнет исключение, тем самым может быть найдена EP.
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    "hr esp-4" более-менее универсальный способ.
     
  4. vertax

    vertax New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2009
    Сообщения:
    10
    Ок, а если интересует точка входа в опреденную длл из всех подгруженных ? напрмер грузиться abrakodabra.dll, распаковывается интересует первый call,jump или может retn в эту dll ?
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Проблема в том, что например в случае аппаратных точек останова - трассировочное исключение генерируется после обращения к адресу останова. Поэтому в зависимости от его типа, если по исполнению инструкции, то Eip будет указывать при останове на точку входа в модуль, что не позволяет определить инструкцию, которая передала управление туда.
    В случае сторожевых страниц - при срабатывании сторожевой страницы при передаче управления Eip перезагружается и только потом генерируется исключение, что также не позволяет определить инструкцию, передавшую управление.
    Также если сделать облать памяти не доступной, при возникновении исключения Eip будет перезагружен прежде, чем сгенерируется исключение.
    Наверно единственный вариант - найти код, максимально близкий к тому, который передаст управление и выполнить трассировку.
     
  6. vertax

    vertax New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2009
    Сообщения:
    10
    Вот это меня больше всего всегда интересовало когда ставишь BP, а откуда на него прыгнули определить ппц. Я уже давно об этом подозревал, чтож делать буду пытаться трейсить
    Спасибо Clerk.