сплайсинг в нутри самого процесса

Тема в разделе "WASM.WIN32", создана пользователем wsd, 9 ноя 2008.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Velheart
    У многопроцессорных немного другая проблема -- значения, лежащие не по кратным их размеру адресам, считываются за несколько циклов шины (почему так, я пока не понял. Может, leo объяснит? :) ). И если второй процессор в этот момент будет, например, записывать эту же область памяти, то можно получить искаженные данные. Проблема решается префиксом lock, который блокирует шину на все время выполнения команды.
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Ну я в принципе и думал, что зачем делать, например InterlockedExchange с lock'ом, если и так все работает.
     
  3. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    CrystalIC
    Когда ты записываешь JMP какой нибудь поток может быть остановлен на месте этих 5 байт.

    Я говорю про универсальный сплайсинг, когда неизвестно какие инструкции будут меняться.
     
  4. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    K10
    Не может. Вначале записывается мост на хэндлер, затем атомарно короткий переход на него.
    Универсальный сплайсинг не применим.
     
  5. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Для тупого меня можно поподробнее?
    Я вроде выше показал, как во время записи
    EIP другого потока может указывать на это место...
     
  6. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    А как же дизассемблеры длин и все такое?
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    K10
    Если ты перезаписываешь несколько инструкций, то EIP другого потока может указывать между этими инструкциями, что чревато. Вероятность этого, правда, мала, но она есть. CrystalIC если я правильно его понял, предлагает заменить первые два байта ф-ии ('mov edi, edi') коротким переходом на 7 байт назад, воспользовавашись тем фактом, что перед ф-ией всегда идет 5 nop'ов. Вот в эти пять nop'ов можно вписать уже настоящий переход любой дальности, без боязни что чей-то EIP туда указывает (ну если до тебя никто не постарался уже :) ).

    А дизассемблер длин может помочь найти приятное для патча место, чтобы не убить выполняющуюся программу. Это в случае, если не знаешь точно, куда писать будешь.
     
  8. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Mika0x65
    Сенкс, теперь понятно, но эти 5 NOPов для хотпатчинга вроде появились начиная с какой-то версии?
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    K10
    Да, но точно не знаю с какой. http://msmvps.com/blogs/kernelmustard/archive/2005/04/25/44413.aspx -- в первом комменте написано, как можно выявить наличие возможности патча, но сам я еще не проверял :).
     
  10. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Запись однобайтовой инструкции по адресу перехвата для инициации исключения с предварительным редиректом диспетчера, как в юзермоде так и ядре рулит.)
     
  11. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Ну да, только ведь перехват обработчика исключений всеравно спалится, если патчить код..
     
  12. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    А сдесь тема про модификацию секций кода, о беспаливности речь не идёт. Они все нубы и этим кодерам достаточно знать это. Сплайсинг мёртв, точки останова альтернатива. Если нужна беспаливность - а это следует знать лишь узкому кругу людей, то ни о какой модификации кода речь идти не может.
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    секретность мля... илито...

    Я например для перехвата чиста но нубски меняю адрес функции, сохраненный в глобальной переменной...
     
  14. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    К примеру, как перехватить сервис ?
    Рэма дал способ, хороший, который только и можно использовать лет 10 назад.
    Как перехватить sysenter ?
    > Подмена MSR_SYSENTER_EIP ?
    Не палитсо ?
    Да, можно селектор кодового сегмента подменить - есчо лучше.
    Можно указатель на стек подменить - это есчо лучше, но всёравно - нубские способы.
    А как к примеру прерывания перехватывоть ?
    хз.. хз..
    Рэма об этом не говорил - значит мы не можем.
    Но нет, это вы не можите.
    Скажу по секрету - мы юзаем подмену указателя(либо делаем его не валидным) на DPC стек в ETHREAD, после чего при свиче на этот поток планировщик загрузит в TSS этот указатель и любое прерывание есчо до начала исполнения первой инструкции ISR вызовет исключение, которое мы обработаем в KiDebugRoutine...
    Сплайсинг.. Копипаст форева!
     
  15. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    CrystalIC
    Для практической ценности перехватов предлагаю исходить из того, что код исполняется с правами юзера и повышение привилегий не канает...
     
  16. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Повышение привилегий канает всюду. Для не практической юзай сплайсинг в юзермоде, пока не подрастёшь...
    Бери рку, хукай и медитируй на списке обнаруженных перехватов..
     
  17. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    CrystalIC
    Вобщем думается мне ринг0 своет отживает. Все больше юзеров сидят под юзером, микрософт закрывает баги ведущие к повышению привелегий, аверы перекрывают все больше путей вызода в ринг0. Так что имхо рано или поздно илитные кернелмодовые техники станут малополезны для малвары.

    Не практичен код admin only и сомнительные сплоетные техники повышения привилегий (сегодня работает, завтра хз).
    То что я юзаю я уже сказал, и имхо это получше будет илитных кернел-сплоетных техник, хотя конечно не так дзенно, зато практично.


    Кстате у меня рку почему то не видит сплайс на GetOpenFileName...
    Может он ее не проверяет?
     
  18. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    А мне думаетсо что ламерьё заполонило инет)))
     
  19. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    CrystalIC
    Понятно. Мысли по существу закончились.

    Хочешь избавить мир от ламеров? Начни с себя.
     
  20. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    дрова уже под ринг3 крутятся?
    откуда такая инфа? как по мне, так компы все большее распространение получают, а пользоваться ими умеют далеко не многие
    и открывают новые..
    это типа по существу? смелое заявление, но попахивает...