Вопрос по сплайсингу

Тема в разделе "WASM.BEGINNERS", создана пользователем red_Human, 23 июл 2009.

  1. red_Human

    red_Human New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2008
    Сообщения:
    182
    Что я должен знать из асма, Си и системного программирования для применения сплайсинга?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    1) что такое сплайсинг
    2) что такое функции (и как вообще происходить взаимодействие программы и системы через апи, в т.ч. стек и параметры)
    3) уметь копировать байты
     
  3. red_Human

    red_Human New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2008
    Сообщения:
    182
    Еще извините за вопрос: обязательно ли использовать для сплайсинга драйверы и не использует ли advapihook, которую написал ms Rem сплайсинга?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    зависит от того, где сплайсишь. Если в ядре, то обязательно. Если не в ядре, то наоборот нельзя :)
    ааще не понял вопроса. Ты можешь использовать че хочешь. Но каждый продвинутый кодер пишет сплайсинг сам
     
  5. red_Human

    red_Human New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2008
    Сообщения:
    182
    Я просто хотел бы отсплайсиить CreateFile. Ведь сплайсинг позволяет,если я не ошибаюсь, перехватывать функцию и сначала выполнить свлою функцию, а потом вернуть управление настоящей. Поэтому я и спрашивал насчет того нужен ли драйвер. И насколько я понял, если я хочу перехватить MessageBox() к примеру, то это я могу делать и без драйвера
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Еще как можно.
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Great
    ну еще бы, я конечно не кодю в ядре, но очевидно предположить что все что можно сделать в RING3 можно в RING0 хотя бы потому что реально все равно дергается ядро (исключение бывают, в основном в функциях управления окнами).
     
  8. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    лучше что-то другое юзать
    сплайсить стабильно не везде реально
     
  9. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    вообщя я себе давно написал функции hook, unhook с дизасемблером длин (от рема) и по этому поводу не парюсь, чего и вам желаю
     
  10. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    ну работать стабильно это будет не всегда
    чужие дизассемлеры длин это хорошо
    но можно сделать и проще и стабильнее
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    o14189
    ам, ты про что? где не будет работать? я вот не представляю ситуации если прав достаточно

    А как проще и стабильнее, "мой" способ по сути вообще перехватывает 1 раз, дальше уже _безопасно_ работает
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сплайсинг через jmp зло. Юзайте однобайтовые инструкции
     
  13. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Great
    да не все так уж страшно, 1 раз можно, причем я обычно это делаю еще до старта основного потока приложения. Хотя я вообще себе кроме как по int3 не представляю одно байтовый перехват...
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сплайсинг в любой форме это зло; хотя и максимально быстро позволяет обработать перехват. Однобайтные инструкции - это привилегированные инструкции(cli, hlt etc.), которые вызывают в юзермоде сепшены, в ядре - Int 3.
    Главная проблема в сплайсинге - выполнить его атомарно, изза чего просто изменение кода с большой вероятностью приведёт к краху, если в юзермоде это не так критично, то в ядре этого нельзя допустить, поэтому без перечисления потоков и их контекстов не обойтись.