Сейчас на форуме: zds, tyns777, JustLife, 2nd, morgot, Rio, CDK123 (+4 невидимых)

 eXeL@B —› Программирование —› Interrupt Descriptor Table - формат, перехват, изменение dpl
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 января 2009 22:15 · Поправил: ARCHANGEL
· Личное сообщение · #1

Всем hello, вопрос такой - пишу драйверок для модификации IDT. Драйверок на асме, а документацию нашёл только с примерами на С++ (любимый и ненаглядный язык, как он мне дорог:s1. Может кто поможет доками на асме? Меня интересует структура IDT entrie, т.е. что такое:
Code:
  1. typedef struct
  2. {
  3.       unsigned short LowOffset;
  4.       unsigned short selector;
  5.       unsigned char unused_lo;
  6.       unsigned char segment_type:4; //0x0E is interrupt gate
  7.       unsigned char system_segment_flag:1;
  8.       unsigned char DPL:2; // descriptor privilege level
  9.       unsigned char P:1; // present
  10.       unsigned short HiOffset;
  11. } IDTENTRY;

Можно ли это лицезреть на асме? И на асме примеры с перехватом и модификацией dpl.

Added
В общем, ситуация не много изменилась. Теперь вопрос в обходе антиотладочного трюка, основанного на Int 2D, под олькой.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 10 января 2009 11:43 · Поправил: Clerk
· Личное сообщение · #2

ARCHANGEL
Не понятно. Можно увидеть пример такой антиотладки ?
А на счёт возврата из прерывания, прсто бряк на адрес Int0x2D + 3 поставь, ведь изза взведённого RF по возврату через iretd трассировочное исключение не генерируется сразу, а только после исполнения этой инструкции.
[Кстати Гордон, оказываетсо выносил систему кривой перехватчик сисера, при невалидном указателе на строку возникает необработанное исключение, сисер фильтрует только BREAKPOINT_PRINT(Eax = 1), не проверяя валидность указателя ]




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 января 2009 15:34
· Личное сообщение · #3

Clerk пишет:
Не понятно. Можно увидеть пример такой антиотладки ?
Вот. Это то, что я сам накодил. В реально исследуемой проге таких мест может быть много, сколько - точно неизвестно, т.к. код заморфлен да и нет никакой необходимости точно знать, если сделать механизм, который будет это обходить. Я так понял, что исключение вызывает не само прерывание, а инструкция, идущая следом за ним, т.е. непосредственно следующая. И ещё, возвращает ли это прерывание в юзермоде какие-либо значение в регистры?

b4f9_10.01.2009_CRACKLAB.rU.tgz - AntiDebug.exe

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 10 января 2009 15:50 · Поправил: Clerk
· Личное сообщение · #4

ARCHANGEL
Щас не дома, ограниченая учётка - отладчик не идёт сурцов нет, приду отпишу. Насколько помню вроде не изменяет регистры кроме Eax. А обычно после Int0x2D стоит инструкция останова(Int3), которая исключение и вызывает. Не могу посмотреть пока код, но мне кажетсо что это всё сводится к RF/Int3, аналогично:
Int 0x2A
Int 3
Походу поведение будет аналогичное. Обойти это никакой проблемы не будет.



Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2009 16:05
· Личное сообщение · #5

ARCHANGEL, ставишь бряк после int 2d и все ок.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 10 января 2009 18:49
· Личное сообщение · #7

ARCHANGEL
Понятно. Эта всё из за ошибок в оле. При простой трассировка посредством дебугапи ничего подобного не происходит, тоесть как и должно быть вырабатывается исключение при вызове прерывания(инфокласс BREAKPOINT_BREAK). В чём разница не знаю, ибо не читал что там по линкам находится, впрочем это всё элементарно обходится. Чтобы не епацца с глюченой олей рекомендую посредством ядерного отладчика брякнутся куда следует, а далее можно и олю приаттачить(если нет защиты от аттача). У меня больше вопросов и впечатлений нет.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2009 19:15
· Личное сообщение · #9

>Поэтому чтоб это исправить, надо патчить ольку, так?
огаога. или заюзать другой отладчик.
>посредством ядерного отладчика брякнутся куда следует
не факт что они тож нормально это обрабатывают. надо буит в виндбг ща потестеть



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 10 января 2009 19:29
· Личное сообщение · #10

ARCHANGEL
Да, но возможно уже существует пропатченая оля, в сети много модификаций её.
BREAKPOINT_BREAK это не исключение, а инфокласс для сервиса обслуживаемого 2D прерыванием, в данном случае исключение #BP и соответственно его код STATUS_BREAKPOINT.
_frmn
Ядерные отладчики на совершенно ином уровне и принципе работают, так что там всё окей, я на сисере проверял, как и должно работает, иначе быть не может.



Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2009 19:37
· Личное сообщение · #11

ну ВинДбг просто весело брякнулсо на инструкции после int 2d, так что можно счетать все ок




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 января 2009 23:03
· Личное сообщение · #12

Clerk пишет:
возможно уже существует пропатченая оля
Существует фантик, и он нам расскажет, как надо патчить Рип, это, конечно, нехорошо, но кому щас легко?

-----
Stuck to the plan, always think that we would stand up, never ran.



<< . 1 . 2 .
 eXeL@B —› Программирование —› Interrupt Descriptor Table - формат, перехват, изменение dpl
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати