таблица импорта

Тема в разделе "WASM.WIN32", создана пользователем nMaxwell, 23 мар 2011.

  1. nMaxwell

    nMaxwell New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    77
    в таблице иморта PE нужно поменять в одной функции имя либы.
    например импортруются ReadFile и WriteFile из kernel32 и мне надо чтоб ReadFile вызывалась из kernel33
    необходимо все поменять именно в exe а не в памяти
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    бугогашечка...

    копай формат PE-файла... не все так просто, как ты думаешь...
     
  3. nMaxwell

    nMaxwell New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    77
    вот именно, не все просто, если просто в hex редакторе поменять имя dll (kernel33 для примера) то все функции будут из нее вызываться, что нас нахрен не нужно.
    формат PE копал но не докопался до нужного. нужна помощь знающего
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нереально. Делать по принципу упаковщиков: добавить код, который в рантайме будет патчить IAT.
     
  5. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Чисто теоретически - можно разбить таблицу импорта для этой библиотеки на две или три таблицы, одна из которых будет ссылаться на новую библиотеку импорта.
    Практически - Booster предложил более годный вариант.
     
  6. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Воспользоваться редиректом импорта для нужных ф-ций
     
  7. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Пересобрать таблицу импорта? Формат проще некуда. Код написать минут 30 на сях.
     
  8. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    По-моему CFF Explorer умеет добавлять новые записи к импорту, а затем дописать код на EP, который будет копировать указатели от kernel33 в IAT kernel32.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    30 минут прошло... где же код?)
     
  10. nMaxwell

    nMaxwell New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    77
    патчер мне не нужен, мне нужно чтобы все безпалевно было, нужно редактировать саму таблицу
    Sunzer
    если не сложно, выложи код плз
     
  11. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Там же где написано что я его буду писать.
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    nMaxwell
    Нереально. Между элементами таблицы принадлежащими одной dll обязательно должны быть обрамляющие нули. Так что облом.

    >патчер мне не нужен, мне нужно чтобы все безпалевно было, нужно редактировать саму таблицу
    Какое ещё палево?
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    что вам мешает? ведь:
     
  14. nMaxwell

    nMaxwell New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    77
    Booster
    доп кода быть не должно, нужно изменить ТОЛЬКО таблу импорта
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    жаргон молодых малварщиков? старею блин(((
     
  16. nMaxwell

    nMaxwell New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    77
    Rel
    скорее школярский жаргон, но это не важно, нужно решение проблемы
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    nMaxwell
    Самый простой вариант: изменить всё-таки kernel32 на kernel33, а в kernel33 сделать сквозной экспорт всех функций из kernel32. Это уже несколько раз обсуждалось, например здесь.
    Преимущество в том, что изменения в целевом образе — минимальные (один бит в данном случае :) ).

    P.S. Поправил ссылку. Хоть бы кто-то сказал, что я подфорум BEGINNERS отреферeнсил.
     
  18. nMaxwell

    nMaxwell New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    nMaxwell
    Не уверен, неверно ли Вы выразились или неправильно поняли. При сквозном экспорте никаких вызовов внутри своей dll делать не нужно.
    В любом случае процесс создания такой "проводящей" dll довольно просто автоматизируется (в том числе и макросами fasm, например, макрос CreateForwardedExport "C:\Windows\system32\kernel32.dll" создаёт полный набор функций, отражающих kernel32.dll). Поэтому не имеет никакого значения, сколько функций в импорте целевого образа.
     
  20. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    автор учи пе формат и про форвард импорты прочитай заодно))