Вопрос

Тема в разделе "WASM.BEGINNERS", создана пользователем _KLAUS_, 22 окт 2006.

  1. _KLAUS_

    _KLAUS_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    7
    Подскажите, возможно ли изменять начальные адреса файла типа : 0000140 программно, типа сначало вбиваешь FF , а чтоб по ходу запуска значение менялось на нужное.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Это ты про что?
    Если про размещение кода в памяти, то можешь писать либо базонезависимый код, либо дизасм/асм с изменением базы.
     
  3. _KLAUS_

    _KLAUS_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    7
    Ну типа файл начинается с опкода MZP(4D 5A 50), и в плоть до 400000 (ну если ImageBase такой), в начале идёт информация о файле, т.е. Какой формат, количество и название секций и .т.п., так вот, можно ли данные вплоть до 400000 изменить, пытаюсь но система выдаёт : "инструкция ...... обратилась к памяти по адресу 0x0000140 ". Память не может быть "written".
    Вообще можно сделать.
    Если изначально менять, то получается, что формат файла не являетсЯ PE
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    VirtualProtect тебе в помошь.
     
  5. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    А какого тебе там надо
    ? Насколько мне известно, адреса виртуального пространства с 0х00000000 до 0х00032768 зарезервированы системой. Если я правильно понял вопрос, то тебе надо обращаться не к 0х00000140, а к ImageBase + 0х00000140 так как с Imagebase и начинается проекция файла.
     
  6. _KLAUS_

    _KLAUS_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    7
    Не, как раз к 0х00000140
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А подробнее можно? Что за таинственная "информация о файле" размером в 4 мб идёт до ImageBase?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Тебе надо чтобы по ходу программа переместилась на адрес 0х00000140? Если да то понятное дело работать она там не будет.
     
  9. _KLAUS_

    _KLAUS_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    7
    Да ни какой тайны...всё как обычно: Название секций и т.п.! В итоге если после того как файл загрузился в память изменить количество секций.....любой отладчик падает!
     
  10. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Жестко :)

    Все, что есть в твоем файле, включая заголовки, таблицу секций и "опкод" MZP(4D 5A 50) :), начинается с ImageBase.
     
  11. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    то любой современный нормальный инструмент прочитает число секций из файла...
     
  12. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    Хм..? А о TLS, почему все забыли?
    В данном тяжелом случае, именно этот вариант лучше всего выбрать =)))
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    _KLAUS_
    Если тебя еще не убедили в том, что нужно смотреть адрес ImageBase+140h, то возьми отладчик OllyDbg и убедись сам. Берешь любой простенький ехе-шник (без заморочек) и открываешь в Olly двумя способами
    1) просмотр файла на диске: кликаешь меню View\File, открываешь exe и затем по правой кнопке задаешь вид Special -> PE header. Для стандартного заголовка по смещению 140h видишь TLS Table Address
    2) просмотр загруженного образа: открываешь тот же файл в дизассемблере (меню File\Open), затем смотришь карту распределения памяти (меню View\Memory), выбираешь строчку PE header по адресу 400000h и по правой кнопке выбираешь Dump - в результате получаешь точно такой же вид PE-заголовка, как и при просмотре файла, но все адреса ес-но смещены на ImageBase=400000h, в том числе и твой TLS Table Address = 400140h
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Demon666
    Ты о чём?

    _KLAUS_
    Ксакепов начитался? Возьмись за ум лучше. Прочитай описание формата PE ("MZP" - это явно на Delphi смотрел), о работе загрузчика. Потом придёшь.
     
  15. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    IceStudent
    Да все о том, что из первого поста можно сделать вывод:
    _KLAUS_ хочет забить PE мусором и когда прогу запустит "юзер", она должна исправить все его "FF" на нужные и "правильные" значения (_KLAUS_ поправь, если что не так?)
    TLS как раз то что надо, до запуска EP позволят запустить программный код который превратит весь мусор (FF) и изменит начальные адреса на нужные значения!

    P. S.
    Что такое TLS я объяснять не собираюсь!!!