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

Discussion in 'WASM.WIN32' started by nMaxwell, Mar 23, 2011.

  1. nMaxwell

    nMaxwell New Member

    Blog Posts:
    0
    Joined:
    Mar 22, 2011
    Messages:
    77
    в таблице иморта PE нужно поменять в одной функции имя либы.
    например импортруются ReadFile и WriteFile из kernel32 и мне надо чтоб ReadFile вызывалась из kernel33
    необходимо все поменять именно в exe а не в памяти
     
  2. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    бугогашечка...

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

    nMaxwell New Member

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

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Нереально. Делать по принципу упаковщиков: добавить код, который в рантайме будет патчить IAT.
     
  5. ormoulu

    ormoulu Well-Known Member

    Blog Posts:
    0
    Joined:
    Jan 24, 2011
    Messages:
    1,206
    Чисто теоретически - можно разбить таблицу импорта для этой библиотеки на две или три таблицы, одна из которых будет ссылаться на новую библиотеку импорта.
    Практически - Booster предложил более годный вариант.
     
  6. mrcrown

    mrcrown Member

    Blog Posts:
    0
    Joined:
    Jan 18, 2008
    Messages:
    227
    Воспользоваться редиректом импорта для нужных ф-ций
     
  7. Sunzer

    Sunzer Member

    Blog Posts:
    0
    Joined:
    May 25, 2008
    Messages:
    256
    Пересобрать таблицу импорта? Формат проще некуда. Код написать минут 30 на сях.
     
  8. dermatolog

    dermatolog Member

    Blog Posts:
    0
    Joined:
    Feb 3, 2005
    Messages:
    406
    Location:
    Екатеринбург
    По-моему CFF Explorer умеет добавлять новые записи к импорту, а затем дописать код на EP, который будет копировать указатели от kernel33 в IAT kernel32.
     
  9. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    30 минут прошло... где же код?)
     
  10. nMaxwell

    nMaxwell New Member

    Blog Posts:
    0
    Joined:
    Mar 22, 2011
    Messages:
    77
    патчер мне не нужен, мне нужно чтобы все безпалевно было, нужно редактировать саму таблицу
    Sunzer
    если не сложно, выложи код плз
     
  11. Sunzer

    Sunzer Member

    Blog Posts:
    0
    Joined:
    May 25, 2008
    Messages:
    256
    Там же где написано что я его буду писать.
     
  12. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    nMaxwell
    Нереально. Между элементами таблицы принадлежащими одной dll обязательно должны быть обрамляющие нули. Так что облом.

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

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    что вам мешает? ведь:
     
  14. nMaxwell

    nMaxwell New Member

    Blog Posts:
    0
    Joined:
    Mar 22, 2011
    Messages:
    77
    Booster
    доп кода быть не должно, нужно изменить ТОЛЬКО таблу импорта
     
  15. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    жаргон молодых малварщиков? старею блин(((
     
  16. nMaxwell

    nMaxwell New Member

    Blog Posts:
    0
    Joined:
    Mar 22, 2011
    Messages:
    77
    Rel
    скорее школярский жаргон, но это не важно, нужно решение проблемы
     
  17. l_inc

    l_inc New Member

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

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

    nMaxwell New Member

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

    l_inc New Member

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

    onSide New Member

    Blog Posts:
    0
    Joined:
    Jun 18, 2008
    Messages:
    476
    автор учи пе формат и про форвард импорты прочитай заодно))