1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

HookLib

Тема в разделе "WASM.PROJECTS", создана пользователем HoShiMin, 11 фев 2019.

  1. GRAFik

    GRAFik Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    193
    Спасибо, HoShiMin, за сочувствие и понимание, а то иногда прям комплексуешь и думаешь, что кого интересуют твои проблемы, кроме тебя самого. И иногда по некоторым постам, такой вывод порой напрашиваетя сам собой.
    --- Сообщение объединено, 30 авг 2021 ---
    P.S. Еще хотел добавить, что когда я задаю тот или иной вопрос, то я учитываю, что ответа на него может и никто не знать. Потому как - все знать практически невозможно. Мне кажется, что каким-нибудь вопросом можно запросто поставить в тупик тех же Ионеску или Ильфака. Другой вопрос, что если они захотят, то они поднапрягутся и ответят, но на это нужно время, чтобы допустим, просмотреть какую-нибудь литературу или что-то уточнить в интернете. А это все время. Да и написание ответа тоже порой требует времени, а обычно свободного времени у специалистов не так много.

    Я у того же f13nd'а, в личке несколько раз пытался, помню, выяснить кое-какие вопросы на старом кл. А то думаю как-нибудь не так сформулирую вопрос в созданом мной треде на форуме - засмеют. Так он мне честно, прямым текстом иногда отвечал, что а хрен его знает - попробуй тему на форуме создать, может кто что подскажет. И что я его после этого стал меньше уважать? Потому как, еще раз повторюсь - все знать нереально.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.501
    HoShiMin,

    Взял бы пересобрал всю изменяемую процедуру, это лучший способ. Если в начале короткие ветвления, то возникнут проблемы, которые хардкодом решать плохой метод.
     
  3. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    684
    А можно поподробнее что это и зачем? Мне для общего развития.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.501
    ormoulu,

    Синхрон, иначе тред упадёт.
     
  5. HoShiMin

    HoShiMin Active Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    851
    Адрес:
    Россия, Нижний Новгород
    А это уже не укладывается в требования к простоте: писать и тащить огромный DBI ради вставки джампа... Так себе решение.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.501
    HoShiMin,

    А dbi причём, нужен лишь стабильный диз коих навалом и простой морфер(на x23 размер конструктора < 10kb, а размер определяет стабильность). Обьём кода куда меньше, чем твои хардкоды :)
     
  7. HoShiMin

    HoShiMin Active Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    851
    Адрес:
    Россия, Нижний Новгород
    Но согласись, что "простой" и "морфер" - это два взаимоисключающих параграфа. Явно ведь не уложишь морфер в пару тысяч строчек.
    Что вообще должно получиться на выходе после пересборки?
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.501
    HoShiMin,

    Граф собрал, затем его в буфер сбилдил. Там будет вся процедура, затем можно атомарно и джамп вписать куда и как угодно.
     
    q2e74 нравится это.
  9. HoShiMin

    HoShiMin Active Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    851
    Адрес:
    Россия, Нижний Новгород
    Вот с этим и вопрос: как?
    Разобрал ты функцию на инструкции с узлами в условных переходах, а дальше?
    Чтобы собрать его обратно с новыми инструкциями, надо, как минимум, иметь ассемблер, а как максимум, виртуальную машину и транслятор x86 -> IL -> x86.
    Это совсем нетривиальная задача, даже если брать LLVM.
    Или я просто не знаю, как это делается по-простому.
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.295
    LLVM очень жирный, но есть другие JIT-компиляторы. Использовать такое для "пересборки" функции в буффер" не нужно скорее всего. Вопрос в том, зачем вообще пересобирать? Вот есть у тебя внешняя библиотека, которую использует один процесс. Ты заинжектился в процесс, пересобрал функцию к себе в буффер (там страницу исполняемую выделил или кучу исполняемую), дальше то что? Как процесс станет твою пересобранную функцию использовать вместо оригинальной? Или опять нужно использовать эльфийские технологии с "подменой выборок"?

    Ну очень просто: делаешь у себя на коленке костыль, не тестишь его нормально, а как сделал, то начинаешь бить себя тапком в грудь за то, что смог то, что другие не смогли.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.501
    Зачем компилер, ветвления обработать, остальные блоки просто копировать. Может не хватить места в начале функции для записи ветвления, получится ветвь не на начало инструкции. Такая проблема как то возникла с семплом Rel, тут наверно осталась та тема. В общем если есть конструктор, можно не вносить изменения в целевой код, пересобрав его не изменяя смещения по данным, а лишь скорректировав на них ссылки при сборке. Таже катя не использовала компиляцию, но код успешно собирался, даже целиком переносился весь модуль в буфер(использовалось для защиты что то там с cfg).
     
  12. HoShiMin

    HoShiMin Active Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    851
    Адрес:
    Россия, Нижний Новгород
    По просьбе трудящихся добавил в хуклибу поддержку внешних хранилищ для хуков, чтобы обходиться без аллокаций вообще.
    У этого способа есть нюанс: если в начале перехватываемой функции есть относительные инструкции, а расстояние между данными, на которые смотрит оффсет, и нашим хранилищем больше 2х гигабайт, то мы не сможем корректно переместить начало на новое место.
    Чтобы это стало возможным, понадобится что-то типа того, что предлагал Indy_ - пересобирать начало.
    Поэтому не стал заливать этот способ в master, а ограничился отдельной веткой feature/external-storage-support, где будет доступна новая функция exthook.