Взлом .LIB (как удалить вызов процедуры)?

Тема в разделе "WASM.RESEARCH", создана пользователем Zerooo, 21 дек 2004.

  1. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    Имеется билиотека (lib), в которой вызывается ненужная мне функция. Скомпилил прогу, СофтАйсом нашел место вызова, по этим данным нашел это место в .lib, НО...

    В lib`е там же не чистый вызов, настройка адресов происходит при компиляции...

    Как затереть этот вызов в самой библиотеке?

    Спасибо!
     
  2. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    lib это обычно набор obj. tlib-ом раскладываешь свой lib на кусочки, в нужном obj патчишь код и собираешь либ назад. Насчет настройки адресов - через ненужный call можно сделать short jmp (через область на которую фиксап есть) обычно это получается.
     
  3. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    Что-то не получается tlib`ом разложить :-(

    делаю tlib My.lib, My.lst никаких .obj не появляется и в листинге нет нужных процедур. Дело в том, что НЕнужная процедура вызывается из самой же библиотеки из нужных процедур.

    Как сделать переход не понятно, т.к. вызов в библиотеке выглядит так E8 00 00 00 00. Нолики потом при сборке заменяются на реальный адрес, JMP в одном байте не запишешь...
     
  4. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    это, а .lib в coff или omf формате?

    если coff - тогда не tlib, а lib (от microsoft)
     
  5. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    если меня не подводит склероз то надо 2 запятые поставить. Т.е. tlib My.lib,,My.lst

    по поводу перехода - тут надо смотреть какая инструкция перед call, может что-то можно сократить/переписать и выиграть тот самый байт. Либо отключать релок на этот адрес, но это я не умею - надо формат obj читать.
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    есть еще вариант - загрузи этот либ в иду - там проще найти будет, но для патча все равно проще пересобрать библиотеку из obj. Либо как крайний вариант - патчить вызовы уже после сборки. По сигнатуре.
     
  7. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    ssx

    библиотечка от компонента, поэтому думаю Borland, не Micro$oft
     
  8. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    infern0

    С двумя запятыми даже lst не создается.

    "Сократить/переписать" слишком круто.

    Крайний вариант уже пользую, но не люблю крайности :)
     
  9. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    хм. а если пропатчить ту функцию, на которую ведет этот call? (написать там что-нить типа ret)
     
  10. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    в LIBе не могу точно найти тело этой функции
     
  11. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    Похоже она внешняя :)

    __fastcall Dialogs::MessageDlg(...)

    поэтому надо гасить сам вызов
     
  12. Zerooo

    Zerooo New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2004
    Сообщения:
    7
    Адрес:
    Russia
    infern0

    ssx

    Спасибо за подсказки. В Иде нашел нужное место (оказалось два). И немного выше поменял переходы - кажись работает :)