eXeL@B —› Основной форум —› Анти-отладочный трюк против срабатывания точек останова |
Посл.ответ | Сообщение |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 29 ноября 2014 17:55 · Личное сообщение · #1 В некоторых протекторах реализован трюк с динамическим блокированием работы точек останова. ring3 !!! Не с проверкой, а именно динамическим блокированием (ну или я не знаю, как этот термин правильно обозвать). А именно: ставлю я бряк (и не важно - аппаратка/программка). Управление докатывается до точки (100% уверен, что докатывается) и ... процесс завершается (точнее вываливается сообщение системное, что single step на адресе, где стоит точка остнова-терминате процесс ор дебаг). Складывается ощущение, что ИЛИ стоит хук между бряком и передачей брозд правления отладчку. НО ГДЕ ЕГО СТАВЯТ? KiUserApcDispatcher и тд - там чисто все. ИЛИ может защитный механизм счищает каллбеки отладчика... зы: На крайняк, хотя бы дайте литературу, как именно реализован механизм срабатывания точек останова в ольке (за KiUserApcDispatcher читал у Криса, но тут скорее всего не он). |
|
Создано: 29 ноября 2014 18:10 · Личное сообщение · #2 KiUserApcDispatcher к исключениям не имеет отношения-это раз, KiUserExceptionDispatcher имеет. Второй-коль single step на адресе, то это обычный TF или DR бряк, который ты нефига не поймал, и он свалил программу. Так что скорее всего ищи косяк у себя, если код твой. Если олька, видимо, криво исключения там обрабатываются. А схема исключений простая: исключение-уход в ядро-вызов отладчика-вызов KiUserExceptionDispatcher, он уже вызывает вехи, сехи и Unhandled. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 29 ноября 2014 18:31 · Личное сообщение · #3 |
|
Создано: 29 ноября 2014 19:06 · Личное сообщение · #4 ELF_7719116 4716_29.11.2014_EXELAB.rU.tgz - test.zip ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 30 ноября 2014 10:27 · Личное сообщение · #5 |
|
Создано: 30 ноября 2014 17:03 · Личное сообщение · #6 ELF_7719116 может оно? 5.3. ThreadHideFromDebugger This technique uses the API ntdll!NtSetInformationThread() which is usually used for setting a thread’s priority. However, the said API can also be used to prevent debugging events to be sent to the debugger. The parameters to NtSetInformationThread() are shown below. To perform this technique, TheadHideFromDebugger (0x11) is passed as the ThreadInformationClass parameter, ThreadHandle is usually set to the current thread handle (0xfffffffe): NTSTATUS NTAPI NtSetInformationThread( HANDLE ThreadHandle, THREAD_INFORMATION_CLASS ThreadInformationClass, PVOID ThreadInformation, ULONG ThreadInformationLength ); Internally, ThreadHideFromDebugger will set the HideThreadFromDebugger field of the ETHREAD16 kernel structure. Once set, the internal kernel function DbgkpSendApiMessage(), whose main purpose is to send events to the debugger is never invoked. |
eXeL@B —› Основной форум —› Анти-отладочный трюк против срабатывания точек останова |