замена функции в программе

Тема в разделе "WASM.RESEARCH", создана пользователем ts_trinity, 1 дек 2011.

  1. ts_trinity

    ts_trinity New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2011
    Сообщения:
    4
    добрый день, возникла проблема следующего характера: дали задание написать патч для делфовской программы который должен подменять одну фукцию другой, в который будет происходить динамическое подключение библиотеки через LoadLibraryA. Соль в том что при замене исходной функции на свою мне надо сделать следующее

    68 XXXXXXXX || push имя dll в стек
    E8 XXXXXXXX || call LoadLibraryA

    проблема в том что в call надо указать (не бейте сильно если пишу что не так) смещение между адресом по которому выполняется call и строчкой которая находиться в верху секции CODE вида FF 25 XXXXXXXX где вместо иксов адрес указывающий на строчку в секции импорта с именем нужной функции. Проблема в том что адрес если открыть файл в с# или delphi как массив байт(и брать адрес как номер байта в массиве + базовый адрес) или в том же просмотрщике в тотале отличается от адреса которые показывают ollydbg или hview. Допустим разница, если смотреть строчку из из секции CODE через ollydbg и если открывать через c# как массив байт и добавлять к нему базовый адрес (который = 0x400000) равна 0xC00. Подскажите как узнать данное смещение,т.к. PE заголовок мне ответа не дал или я его не увидел. Заранее спасибо.
     
  2. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    оля и хью показывают верный, так как при загрузке файла в память секции встают на свои места и только в этот момент надо смотреть смещение.
     
  3. ts_trinity

    ts_trinity New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2011
    Сообщения:
    4
    гм... спасибо, а программно как его посмотреть из с# или delphi например не подскажите ? или линк мб где это описано.
     
  4. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    посмотрите статьи на сайте по формату PE. там будет набор необходимых вам функций
    http://wasm.ru/series.php?sid=4
     
  5. ts_trinity

    ts_trinity New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2011
    Сообщения:
    4
    спасибо, читал уже. не помогло... пытался через CreateFileMapping и MapViewOfFile. получил с них данные. считал поток байт - но то же самое. адреса не те
     
  6. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    ts_trinity
    А релоки посмотреть ? вообще читать про формат PE то тех пор пока не поможет:)
     
  7. ts_trinity

    ts_trinity New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2011
    Сообщения:
    4
    читаю =) пока не помогает =) но за направление спасибо.
     
  8. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    гуглить "convert rva to raw" - поможет однозначно
     
  9. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    ts_trinity
    Допустим разница, если смотреть строчку из из секции CODE через ollydbg и если открывать через c# как массив байт и добавлять к нему базовый адрес (который = 0x400000) равна 0xC00.
    Вам не имедж байс надо прибавлять а Virtual Address секции ..