![]() |
eXeL@B —› Программирование —› Interrupt Descriptor Table - формат, перехват, изменение dpl |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 08 января 2009 22:15 · Поправил: ARCHANGEL · Личное сообщение · #1 Всем hello, вопрос такой - пишу драйверок для модификации IDT. Драйверок на асме, а документацию нашёл только с примерами на С++ (любимый и ненаглядный язык, как он мне дорог:s1 ![]() Code:
Можно ли это лицезреть на асме? И на асме примеры с перехватом и модификацией dpl. Added В общем, ситуация не много изменилась. Теперь вопрос в обходе антиотладочного трюка, основанного на Int 2D, под олькой. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 января 2009 11:43 · Поправил: Clerk · Личное сообщение · #2 ARCHANGEL Не понятно. Можно увидеть пример такой антиотладки ? А на счёт возврата из прерывания, прсто бряк на адрес Int0x2D + 3 поставь, ведь изза взведённого RF по возврату через iretd трассировочное исключение не генерируется сразу, а только после исполнения этой инструкции. [Кстати Гордон, оказываетсо выносил систему кривой перехватчик сисера, при невалидном указателе на строку возникает необработанное исключение, сисер фильтрует только BREAKPOINT_PRINT(Eax = 1), не проверяя валидность указателя ![]() ![]() |
|
Создано: 10 января 2009 15:34 · Личное сообщение · #3 Clerk пишет: Не понятно. Можно увидеть пример такой антиотладки ? Вот. Это то, что я сам накодил. В реально исследуемой проге таких мест может быть много, сколько - точно неизвестно, т.к. код заморфлен да и нет никакой необходимости точно знать, если сделать механизм, который будет это обходить. Я так понял, что исключение вызывает не само прерывание, а инструкция, идущая следом за ним, т.е. непосредственно следующая. И ещё, возвращает ли это прерывание в юзермоде какие-либо значение в регистры? ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 января 2009 15:50 · Поправил: Clerk · Личное сообщение · #4 ARCHANGEL Щас не дома, ограниченая учётка - отладчик не идёт сурцов нет, приду отпишу. Насколько помню вроде не изменяет регистры кроме Eax. А обычно после Int0x2D стоит инструкция останова(Int3), которая исключение и вызывает. Не могу посмотреть пока код, но мне кажетсо что это всё сводится к RF/Int3, аналогично: Int 0x2A Int 3 Походу поведение будет аналогичное. Обойти это никакой проблемы не будет. ![]() |
|
Создано: 10 января 2009 16:05 · Личное сообщение · #5 |
|
Создано: 10 января 2009 17:51 · Личное сообщение · #6 Любопытно, например, в моём примере, который я накодил, всё происходит так, как сказано --> Здесь <-- http://www.openrce.org/reference_library/anti_reversing_view/34/INT%202D%20Debugger%20Detection/ , а в проге, которую ломаю, как --> Там <-- http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx . Почему есть различия? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 января 2009 18:49 · Личное сообщение · #7 ARCHANGEL Понятно. Эта всё из за ошибок в оле. При простой трассировка посредством дебугапи ничего подобного не происходит, тоесть как и должно быть вырабатывается исключение при вызове прерывания(инфокласс BREAKPOINT_BREAK). В чём разница не знаю, ибо не читал что там по линкам находится, впрочем это всё элементарно обходится. Чтобы не епацца с глюченой олей рекомендую посредством ядерного отладчика брякнутся куда следует, а далее можно и олю приаттачить(если нет защиты от аттача). У меня больше вопросов и впечатлений нет. ![]() |
|
Создано: 10 января 2009 19:11 · Личное сообщение · #8 Clerk Собственно, как я понял, оля создаёт процесс с флагами DEBUG_PROCESS+DEBUG_ONLY_THIS_PROCESS, далее вызывает WaitForDebugEvent в бесконечном цикле, когда же в отлаживаемом процессе происходит исключение BREAKPOINT_BREAK, то оля его обрабатывает, но криво. Поэтому чтоб это исправить, надо патчить ольку, так? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 января 2009 19:15 · Личное сообщение · #9 |
|
Создано: 10 января 2009 19:29 · Личное сообщение · #10 ARCHANGEL Да, но возможно уже существует пропатченая оля, в сети много модификаций её. BREAKPOINT_BREAK это не исключение, а инфокласс для сервиса обслуживаемого 2D прерыванием, в данном случае исключение #BP и соответственно его код STATUS_BREAKPOINT. _frmn Ядерные отладчики на совершенно ином уровне и принципе работают, так что там всё окей, я на сисере проверял, как и должно работает, иначе быть не может. ![]() |
|
Создано: 10 января 2009 19:37 · Личное сообщение · #11 |
|
Создано: 10 января 2009 23:03 · Личное сообщение · #12 |
<< . 1 . 2 . |
![]() |
eXeL@B —› Программирование —› Interrupt Descriptor Table - формат, перехват, изменение dpl |
Эта тема закрыта. Ответы больше не принимаются. |