Сплайсинг

Тема в разделе "WASM.BEGINNERS", создана пользователем asmfan, 6 мар 2007.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Great
    Что значит нету. Так или иначе вызвать то их можно, а значит надо делать перехват в самом механизме вызова (INT2E или SYSENTER). И вообще по определению такой сплайсинг не корректен, бажен, не переносим. То есть IMHO толку от него.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Booster
    Как я понял Great имеет ввиду неэкспортируемые функции ядра.
    Great
    Ок. Куда?
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нет, я имею в виду функции экспортируемые ядром, но не доступные из ring3. Поэтому их записей в SSDT нету, насколько я знаю (нафиг эти записи нужны, если через INT 2E/SYSENTER никто к ним обращаться не будет, а только драйвера напрямую).
    Примеры - ExAllocatePoolWithTag, IoAllocateMdl, ExFreePool, KeBugCheck, и многие другие. Иногда надо захукать некоторые.
    Вот я и говорю, что CC-бряк тут как нельзя кстати. Противопоказания по этому поводу есть?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Конечно :)
    Например правка IDT. Хотя IMHO это не очень большой недостаток, но некоторые люди на форуме говорят что это ахтунг :P Я склонен им доверять.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну в ядре вродебы действует один поток. То есть пока идёт работа в ядре, другой поток не может вызвать эту функцию. А значит IMHO можно сделать сплайсинг, когда управление перейдёт в твою функцию снять хук, подменить стек на возврат в свою функцию, и кода сработает RET поставить хук снова, и возвратиться по оригинальному адресу возврата.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Потоки не планируются при IRQL >= DISPATCH_LEVEL. При Passive и APC насколько я знаю поток может прерваться в режиме ядра спокойно.. это раз.
    Два, как уже сказали, мы можем ставить хук в тот момент, когда другой поток выполнял ее начало.

    Ну это же лучше, чем писать спласинговый джамп частями?)
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Угу? Многозадачная ОСь пустой звук? :P
    Когда как. Джамп довольно трудно отловить если он грамотно сделан. А правку IDT очень просто(конечно если втупую писать в него :P).
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    ну речь же не идет пока что о том, что хлеще палится антивирями )
    речь идет о безопасности вообще способа. Ведь можно и систему свалить, если джамп частями писать. Правда вероятность очень мала, что поток другой прервется именно в этот момент. Хотя это зависит от того, насколько часто вызывается функция. Если это например ExAllocatePoolWithTag, то шанс свалить систему велик.
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    где-то же писалось, что можно перебрать все потоки и проверить eip :\
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    ну да, я выше писал ) тока геморройно както..
     
  11. Freeman

    Freeman New Member

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Лучше CC-бряк )
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    СС-бряк - это хорошо. но на сайсоподобные отладчики это не повлеяет?
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а вот с этим будут проблемы скорее всего)
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Целых 2 асм команды :P
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а на 2х процессорных?
     
  17. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    ну да, я собственно об этом и говорю
    только я лично юзаю 0f 0b - мне так удобнее для отладки
    в любое время в релизе можно заменить на сс, если понадобится
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    UD2... да ну.. INT3 вроде удобнее) хотя кому как ;)

    FreeManCPM уже наколбасил какой-то код для подмены обработчика в IDT для INT3 ..
    Да собсна там все просто. SIDT, потом адрес записи в IDT равен IDT_base + 3*8. Первые два байта - одна часть адреса, + 4 байта - другая часть адреса. Плюс желательно потом сделать LIDT для обновления регистра (кажется, процессор кеширует дескрипторы из таблиц, поэтому после изменений в таблице надо сделать снова LxDT, x=G/I/L )
     
  19. z0mailbox

    z0mailbox z0

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

    в IDT я не лазаю, мне только юзер-моду надо, юзаю вехи