Инжекты

Тема в разделе "WASM.BEGINNERS", создана пользователем Entropy, 15 дек 2023.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    291
    релоки должны указывать на выделенную память ?
    --- Сообщение объединено, 28 янв 2024 ---
    и системой...
    --- Сообщение объединено, 28 янв 2024 ---
    rmn, CreateThread в DllMain ?
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.502
    Адрес:
    Россия, Нижний Новгород
    Да: в бинарнике все обращения к данным предполагают, что бинарник загружен по фиксированному адресу (ImageBase).
    Если бинарник надо загрузить по другому адресу, все такие места надо пропатчить. Список всех этих мест лежит в таблице релоков.
    Ты идёшь по каждому смещению из таблицы релоков, и, в зависимости от размера указателя в байтах, пересчитываешь новый адрес:
    NewAddress = OldAddress - OldImageBase + NewImageBase
     
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    291
    HoShiMin ,поблема в том что релоки это RVA адреса,а если длл разместить по произвольному адресу,то есть прочитать с диска в произвольную область памяти,здесь их придётся как-то пересчитывать,особенно когда образ загружен не по ImageBase
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.352
    Да, создать поток в DllMain() безопасно. Главное, помнить, что хотя CreateThread() выполнится успешно и вернет валидный хендл, твоя функция потока не начнет выполняться, пока твоя DllMain() не завершится, поэтому ждать от потока что-то сразу после вызова CreateThread() - это гарантированный дедлок.
    Но лучше, конечно, класс-хелпер для создания потока заюзать, требующий для сборки C++24 и собирающийся кастомным тулчейном на джва гига всего за 7 секунд на i9-over9000 :)
     
  5. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    50
    Есть хорошие статьи в http://rsdn.org/

    как подготовить и грузить DLL в про-во процесса

    http://rsdn.org/article/baseserv/peloader.xml?print

    Загрузчик PE-файлов
    Исследование формата Portable Executable, сопровождающееся написанием PE-загрузчика

    http://rsdn.org/article/baseserv/InjectDll.xml?print
    Способ принудительной загрузки DLL в адресное пространство процесса
    --- Сообщение объединено, 28 янв 2024 ---
    И еще полезная статья........
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1294
    TUnRar без DLL