![]() |
eXeL@B —› Основной форум —› Когда отладка невозможна? |
Посл.ответ | Сообщение |
|
Создано: 23 апреля 2006 07:33 · Личное сообщение · #1 Цитата из SDK: "in the Win32 API for Windows NT, DebugActiveProcess can fail if the target process was created with a security descriptor that denies the debugger appropriate access." (в Win32API семейства Windows NT, вызов DebugActiveProcess может быть не успешен, если целевой процесс имеет дескриптор безопасности, запрещающий доступ отладчика). Я пробовал запретить администраторам делать с процессом любые действия, но OllyDbg аттачится. Как же надо правильно создать security descriptor? p.s. дескриптор безопасности я менял с помощью программы SetPrAcl, а не с помощью своего кода. А эта программа использует стандартный интерфейс Windows NT для установки прав доступа, то есть внутри самой программы никакой работы с ACL с помощью сложных API-функций нет. ![]() |
|
Создано: 23 апреля 2006 08:22 · Личное сообщение · #2 В МС есть псевдо-юзер System, который может все. Чтобы хоть как-то защитить систему, критические данные доступны только System, а Администратор должен выполнять переход в режим System для выполнения "запрещенных" действий. Поэтому любая защита бесполезна, если известен пароль админа или имеется "лазейка" в режим админа. Насчет запретов администратору еще смешнее : да можно, например, запретить админу любой доступ, но админ перейдя в System может вернуть все назад. ![]() |
|
Создано: 23 апреля 2006 10:27 · Личное сообщение · #3 tundra37 Админ и так является владельцем моего процесса. И не надо ему системных прав получать, владелец может сменить разрешения. А админ по умолчанию и так может сменить владельца. Однако пока разрешения не изменены, админ доступа иметь не должен. А OllyDbg каким-то образом читает память, не меняя разрешений. Спрашивается: а на кой хрен они тогда? И какой должен быть securitydescriptor ЦЕЛЕВОГО процесса, чтобы его не могли отлаживать? По умолчанию и так только админы отлаживать могут. Да, и SYSTEM не всё может, где-то помню была такая хрень, которую может выполнить любой админ, но не может SYSTEM. Да и права SYSTEM по сравнению с ring-0 приложениями мизерные, критическая информация не доступна и ей тоже. ![]() |
|
Создано: 23 апреля 2006 10:38 · Личное сообщение · #4 |
|
Создано: 23 апреля 2006 11:43 · Личное сообщение · #5 NullSession пишет: А OllyDbg каким-то образом читает память, не меняя разрешений. Ты еще скажи, что он аппаратные точки ставит, не используя переход в System. Секция кода тоже закрыта на запись, тоже скажешь что olly - маг и чародей. Открыл доступ, сделал свое дело и вернул все назад - только и делов. ![]() |
|
Создано: 23 апреля 2006 11:56 · Личное сообщение · #6 tundra37 В ring-0 он переходит, а не в System. Причём не надо быть админом. Просто там, в ring-0, проверяются права вызывающего потока, и тут почему-то вдруг на них забили. То есть если пользователь вызывает WriteProcessMemory, то переход в режим ядра должен быть, но если прав не хватает, его должны послать. Почему отладчик не посылается, непонятно. Ms-Rem Айсу и не надо, цель - юзер-mode отладчики. ![]() |
|
Создано: 23 апреля 2006 22:43 · Личное сообщение · #7 |
|
Создано: 23 апреля 2006 23:21 · Личное сообщение · #8 |
|
Создано: 24 апреля 2006 05:28 · Личное сообщение · #9 |
|
Создано: 24 апреля 2006 07:20 · Личное сообщение · #10 |
|
Создано: 24 апреля 2006 12:58 · Личное сообщение · #11 Ms-Rem пишет: Хардварные бряки ставятся с помощью SetThreadContext Тогда параллельный вопрос. Ломаю программу и если ставлю хардваре бряк на исполнение, то он не ловится, ни на точке входа(ловит только не нужные), ни на самом call. А если ставлю хардваре бряк по доступу, то все прекрасно ловится ?! И олли говорит : был доступ на выполнение ![]() ![]() |
|
Создано: 24 апреля 2006 14:30 · Личное сообщение · #12 Nimnul пишет: он наверно имел введу что после вызова WriteProcessMemory поток переходит в r0 вызывая сервис ядра через sysenter Именно это и имел ввиду. А то пошли тут про права SYSTEM говорить, которые к ядру отношения никакого не имееют. tundra37 Ничего не понял. По-моему ты с пунктуацией что-то намутил. ![]() |
|
Создано: 24 апреля 2006 14:44 · Личное сообщение · #13 |
|
Создано: 24 апреля 2006 18:50 · Личное сообщение · #14 Ms-Rem, я так понял что tundra37 и NullSession об Олли говорили, вот из этого и решил что это бо Олли: NullSession пишет: А OllyDbg каким-то образом читает память, не меняя разрешений. tundra37 пишет: Ты еще скажи, что он аппаратные точки ставит, не используя переход в System. Секция кода тоже закрыта на запись, тоже скажешь что olly - маг и чародей. Открыл доступ, сделал свое дело и вернул все назад - только и делов. NullSession пишет: В ring-0 он переходит, а не в System. Я ычера-то это трезвый читал - запутался, а тут ещё сегодня ничерта непонатяно ----- Я медленно снимаю с неё UPX... *FF_User* ![]() |
|
Создано: 24 апреля 2006 19:13 · Личное сообщение · #15 |
|
Создано: 24 апреля 2006 20:46 · Личное сообщение · #16 Короче я вот о чем: ринг3 дебугер отлаживает через дебаг АПИ, и ессно ставит бряки изменяя контекст или банально записав в код инт3 на нужное место, и я не думаю что ринг3 дебугер может уйти в рингнуль, потому мне непонятны некоторые фразы, пояснения которых я хотел бы знать. tundra37 пишет: NullSession пишет: А OllyDbg каким-то образом читает память, не меняя разрешений. Ты еще скажи, что он аппаратные точки ставит, не используя переход в System. Секция кода тоже закрыта на запись, тоже скажешь что olly - маг и чародей. Открыл доступ, сделал свое дело и вернул все назад - только и делов. Да, VirtualProtect/Ex может изменить атрибуты памяти, ринг-3 отладчики так и делают. Или я что-то снова не понял? =) И никуда олли не переходит, а если апям надо выполнятся в рингнуле, то они туда нырнут и спрашивать никого не будут. Уложился ![]() ----- Я медленно снимаю с неё UPX... *FF_User* ![]() |
|
Создано: 24 апреля 2006 21:39 · Личное сообщение · #17 AlexZ см. пост Nimnul: Nimnul пишет: он наверно имел введу что после вызова WriteProcessMemory поток переходит в r0 вызывая сервис ядра через sysenter. Ну или int 2Eh для доXP-ишных версий Windows. SetThreadContext - аналогично. Но Олька может вытворять что хочет только с user mode кодом, остальное ей неподвластно, что там Microsoft написала, то в режиме ядра и выполнится. Странно, что это не все помнят. ![]() |
|
Создано: 25 апреля 2006 10:42 · Личное сообщение · #18 Ms-Rem пишет: Хардварные бряки ставятся с помощью SetThreadContext Спрошу еще раз: В олли есть следующие бряки : hardware on execution, memory on access и memory on write. В софтайсе есть BPM aaaa X , BPM aaaa R, BPM aaaa RW. Софтайсовские бряки делаются через аппаратные регистры, в том смысле, что по BL выдается адрес, номер используемого регистра и тип бряка. В олли в регистры попадает лишь hardware on execution. Так вот, существуют программы, которые могут уходить от бряка hardware on execution, при чем избирательно, а бряк memory on access они не отключают. Все это естественно к олли относится, на софтайсе не проверял. +++++++++++++++++++++++++++++++ Будучи администратором, ничто не мешает зарегистрировать и запустить драйвер - вот вам и ринг0 ?! ![]() |
|
Создано: 25 апреля 2006 16:40 · Личное сообщение · #19 Кстати, а что если сделать сплайсинг на системный callback-обработчик исключений, который отвечает за обработку этих исключений? Он же что делает: 1) проверяет, есть ли отладчик. Если Да, посылает ему 2) затем идёт куча медитаций с SEH, VEH и т.п. и отладчиком тоже. Слыхал, что SoftIce на него ставит int 3. Но вроде бы он разный на 98 и NT. Это либо kernel32!UnhandledExceptionFilter либо ntdll!KiUserExceptionDispatcher. Но если воспользоваться сплайсингом, то каждая программа получит свою копию системных dll, или все они будут совместно пользовать одну, а наша получит отдельную? Я уже спрашивал это выше, но не учёл особенностей nt. UnhandledExceptionFilter там совсем другое вроде бы делает. В общем, какие идеи? ![]() |
|
Создано: 28 апреля 2006 18:56 · Личное сообщение · #20 |
![]() |
eXeL@B —› Основной форум —› Когда отладка невозможна? |