OllyDbg: почему меняется код при прокрутке?

Тема в разделе "WASM.BEGINNERS", создана пользователем KingT, 4 июн 2017.

  1. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    203
    Смотрю одну программу. У PE файла EntryPoint 0x2E31F140. (Из редактора PE).
    Открываю в OllyDbg. Выделяется адрес 0x2E31F140. Первая инструкция PUSHAD.
    Если прокрутить (scroll) вверх то код немного меняется. Адреса показываются с другой гранулярностью. Что это означает? Что то с выравниванием паияти может?

    Приложил два скриншота.
     

    Вложения:

    • BEFORE.JPG
      BEFORE.JPG
      Размер файла:
      140,6 КБ
      Просмотров:
      632
    • AFTER.JPG
      AFTER.JPG
      Размер файла:
      160 КБ
      Просмотров:
      624
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Анализ выполняется по мере пролистывания: CtrlA. если не поможет, то remove analysis или выделить код и analysis -> command.
     
  3. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Ctrl+ ↑ или Ctrl+↓ в окне кода.
     
  4. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    203
    Странные вещи творятcя. Ctrl Up/Down меняют код и самое странное что точка входа пропадает. То есть как на скриншотах. Адрес 0x2E31F140 превращается в 0x2E31F142.
    Я думал что если отладчик знает что адрес точки входа такой то то относительно него и начинается анализ кода.
    Почему отладчик дает возможность переанализировать код? Относительно чего тогда он анализирует во втором случае?
    CTRL-A выдает несколько ошибок. Не возможно выделить 700 мегабайт памяти. Но это к делу не относится. Программа закриптованна. Наверно из за этого.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KingT,

    Текущая инструкция, с которой начинается дизасм начинается с некоторого адреса. Когда листинг скролится вниз, берётся блок памяти по адресам ниже и дизасмится. Если предыдущая инструкция расположена не с начала новой инструкции, то она переписывается.

    > Почему отладчик дает возможность переанализировать код?

    Потому что анализ выполнен небыл, либо код изменился.
     
  6. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    203
    Вобщем отношения с ольгой не складываются пока. На win864 открывает экзешник под win764 не открывает. Говорит Unable to execute file. Ну ладно это мелочи. Думаю сам разберусь.
    Мне не понятно почему отладчик не работает по такому принципу. При загрузке файла читает EntryPointAddress из заголовка IMAGE_OPTIONAL_HEADER. Затем начинает с того места дизасмить. Все. Никакие скролы туда сюда не должны менять ничего. Просто же....
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KingT,

    > Unable to execute file.

    Версия ос в заголовке 6.3, нужно меньше.

    > Никакие скролы туда сюда не должны менять ничего.

    Это если не листать вниз по адресам.
     
  8. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    203
    >>Это если не листать вниз по адресам.
    Да если листать вверх то все остается а если вниз то меняется. А почему меняется не понимаю.
     
  9. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Дизассемблер так обрабатывает код)) Потому что, с нового адреса идет анализ кода, по старшему адресу который наскролили. Не забывайте, что Олю делали для 32, дял XP, а не для WOW.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KingT,

    Давайте на примере тогда. Дизасм запускается с адреса 0x4010CE:

    Код (Text):
    1. 004010CE    10 5F 5E    adc byte ptr ds:[edi+5E],bl
    2. 004010D1    C9        leave
    3. 004010D2    C2 04 00    ret 4
    - три инструкции. Дизасмим ниже на один:

    Код (Text):
    1. 004010CD    42        inc edx
    2. 004010CE    10 5F 5E    adc byte ptr ds:[edi+5E],bl
    3. 004010D1    C9        leave
    4. 004010D2    C2 04 00    ret 4
    5.  
    - четыре инструкции, листинг едет", так как меняется число строк. Ещё -1:

    Код (Text):
    1. 004010CC    8D 42 10    lea eax,[edx+10]
    2. 004010CF    5F        pop edi
    3. 004010D0    5E         pop esi
    4. 004010D1    C9        leave
    5. 004010D2    C2 04 00    ret 4
    - пять инструкций уже.

    Инструкция 0x4010CC состоит из данных так же 4010CE и 4010СВ. Соответственно листинг меняется. Размер инструкции определяется адресом её начала, следующая инструкция определяется размером предыдущей в потоке инструкций. Таким образом важен адрес первой инструкции.
     
    KingT и Mikl___ нравится это.