Можно ли написать Win-отладчик, не лезя в ядро и не юзая отлад. функци

Тема в разделе "WASM.WIN32", создана пользователем AndreyMust19, 19 дек 2008.

  1. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Можно ли написать для Windows отладчик, не лезя в ядро и не пользуясь прикладными функциями типа CreateProcess с флагом DEBUG и DebugActiveProcess? Выскажите все возможные варианты.
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    AndreyMust19
    Можно МЕГА извращенными способами, читай нельзя. ДА ви вообще задачи не по весу ставишь.
     
  3. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Че же делать если отладчик захочется написать? Использовать CreateProcess с флагом DEBUG и DebugActiveProcess?
    А нельзя ли установить свой SEH-обработчик и каким-то образом перехватывать попытки установить свой обработчик. Например, поставить аппаратный бряк на FS:[0] на запись (если можно) и какой-то WinAPI функцией запретить другим прикладным процессам прикасаться к отлаживаемой программе?
     
  4. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Перехватывай в отлаживаемом процессе ntdll.dll!KiUserExceptionDispatcher, на васм есть цикл статей про SEH в одной из частей эта точка описывалась.
     
  5. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Спасибо, blast. А можно ли такому методу перехвата противостоять со стороны другого, постороннего, процесса?
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Для начала сесть и отдышаться, потом закончить писать антивирус, потом модуль эвристики, анализатор почерка... А потом уже и за отладчик садиться :))
     
  7. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Выражаю мои симпатии Осеню, он когда-то в какой-то теме очень четко выразил мысль (правда потом удалил =( ), я присоединяюсь =)
     
  8. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Да перехват можно определить, если задача состоит в как можно большей скрытности обработки исключения в usermode то конечно же лучше всего использовать VEH.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Можно, довольно не плохой сделоть.
     
  10. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Специально отвечаю на слова MSoft:
    1) Модуль эвристики нужен для антивируса (чтоб определять зараженные файлы).
    2) Анализатор почерка - для обнаруженя посторонних вставок в UNIX-скрипты (bat-скрипты очень редкие и чаще всего очень маленькие и почерк в них распознать сложно), к антивирусу относится тоже.
    3) Отладчик, не использующий ring0 и функций отладки - просто предположение - можно ли написать отладчик, почти не пользуясь услугами операционной системы.
     
  11. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    AndreyMust19 на чем пишешь ? Эмуль писать .. Стукани в приват ПЛЗ
     
  12. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    Учиться, учиться и ещё раз учиться :)
     
  13. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Всем спасибо, я знал что ещё не все методы исчерпаны!!! Если кто не понял чего я трепался - я так решил что используя перехват ntdll.dll!KiUserExceptionDispatcher можно "отлаживать" те приложения, которые уже отлаживаются другими методами. Например, в целях защиты.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AndreyMust19
    Вот только сопряжено с рядом значительных подводных камней. Первые два - сокрытие. Ты уже знаешь что многие исключения устанавливают флаг трассировки в флажках потока при входе в диспетчер и после исполнения его первой иснтрукции возникнет трассировочное исключение и повторный вход потока в диспетчер. Вот тут и тупик, в контексте потока регистр Eip будет указывать на следующую инструкцию, а это уже будет адрес твоего диспетчера. В совокупности с перехватом отлаживаемой программой этой точки для собственных нужд этот способ не рабочий. Во втором случае - проблема в перехвате этой точки, тоесть как исполнить её перехват, без коллизий с основной программой. Вариант - уменьшить на два указатель на эту точку в одной из переменных ядра, но для этого нужен к ниму доступ, а у тебя вероятно его нет.
     
  15. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Спасибо за замечания!
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AndreyMust19
    Всегда пожалусто. Я готов написать код, который прибьёт/обнаружит отладку подобного типа. Даже если ты будешь использовать подмену секций(тот механизм, что является альтернативой сервисам записи в память), создав на месте той страницы, где находится KiUserExceptiondispatcher() свою проецию, это ничем не поможет.
     
  17. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Да я и не сомневаюсь!
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    http://code.google.com/p/cdbg/
    пока что очень кривой и вообще мне просто было нечего делать.)
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    почти не пользуясь - нельзя. как раз таки тут придется гораздо больше пользоваться услугами операционной системы аля LPC или пайпы, чем в случае с Debug API.