Сейчас на форуме: bartolomeo, -Sanchez- (+4 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› SEH vs debuggers (SI) |
Посл.ответ | Сообщение |
|
Создано: 13 апреля 2006 14:32 · Личное сообщение · #1 Можно ли защититься от SoftIce с помощью SEH? Почему я спрашиваю - Касперски в своих "Фундаментальных основах хакерства" говорит, что отладчики, в том числе SoftIce, плохо переносят программы с SoftIce. Пишу простенькую програмку: #include <windows.h> char* str="Example1"; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { __try { int a=1; int b=1; int c=c/(a-b); } __except(EXCEPTION_EXECUTE_HANDLER) { MessageBox(0,str,str,0); } return 0; } Проверял данный код в OllyDbg - все правильно, под отладчиком возникает исключение примерно в месте int c=c/(a-b). Там встречает инструкция div чего-то-там... А вот вот в айсе (4.05 для win9x) данная програмка прогоняется без особых проблем. Может мне кто-то объяснить в чем загвоздка? Если я делаю что-то неаправильно, то тогда каким образом использовать SEH для "ловли" SoftIce? ![]() |
|
Создано: 13 апреля 2006 16:23 · Личное сообщение · #2 |
|
Создано: 14 апреля 2006 12:18 · Личное сообщение · #3 MarQus Можно ли защититься от SoftIce с помощью SEH? в какой-то степени - да. например, tElock как раз так и делает - генерит исключение, а в своём обработчике играет с отладочными регистрами, определяет, куда двигаться дальше. но в таком случае простым _try не обойтись, ты должен написать свой обработчик. но учти, что софтайс прекрасно показывает все seh фреймы, так что узнать, где находится твой обработчик, и что он делает, не составит труда что до OllyDbg, то в настройках можно сказать, чтобы исключения обрабатывал "родной" обработчик исключений самой программы, тогда оля будет брякаться только в том случае, если "родной" handler не отработал ----- EnJoy! ![]() |
|
Создано: 14 апреля 2006 12:19 · Личное сообщение · #4 |
|
Создано: 22 апреля 2006 23:33 · Личное сообщение · #5 Этот пример с SEH - это лишь затруднение исследования, и софт-айс лишь не передаст пошаговое управление, т. е. нужно точку останова "в ручную" останавливать, такая же ситуация с отладчиком под IDA PRO. Интересней случай с SEH: если мы в программе вызываем отладочное прерывание, то в софт-айсе передача управления в обработчик исключения будет не с команды icebp (int 3), а с места после отладочного прерывания и по структуре CONTEXT это можно посмотреть, а дальше все зависит от вашей фантазии. Так многие упаковщики делают Еще soft-ice хорошо ловится на старый прием: потерю трассировачного флага, проверял, прием глупый, но работает ![]() |
![]() |
eXeL@B —› Вопросы новичков —› SEH vs debuggers (SI) |