![]() |
eXeL@B —› Основной форум —› Про анти-дебажные выкрутасы FRAPS'a |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 07 декабря 2005 12:38 · Поправил: TOG · Личное сообщение · #1 Ломаю прогу FRAPS (v2.7.1, build: 5499, http://www.fraps.com). http://www.fraps.com). Защита: Armadillo (1 процесс). (ZOoMiK ее вроде уже сломал, но я сам хочу). Прога создает 3 потока, и еще ее DLL висит и хучит клавиатурные события. Есть переменная, которая в один прекрасный момент обнуляется. И я никак не могу отследить этот момент. Железный бряк не срабатывает именно при записи в этот байт. Везде вокруг срабатывает, а на этот адрес - нифига! Запускал SuperBPM - тоже бряк не робит. Думал, если она сама дебажные регистры кончает, тоесть вызывает исключение и потом правит поля в структуре CONTEXT, так ведь не вызывает она исключения !! (faults on - поставил, бряк на KiUserExceptionDispatcher). Че за детектив ? Пользуюсь SoftIce. Как она еще может вывернуться ? ![]() |
|
Создано: 07 декабря 2005 13:58 · Поправил: Z0oMiK · Личное сообщение · #2 |
|
Создано: 07 декабря 2005 14:03 · Личное сообщение · #3 |
|
Создано: 07 декабря 2005 14:07 · Личное сообщение · #4 |
|
Создано: 07 декабря 2005 14:10 · Личное сообщение · #5 |
|
Создано: 07 декабря 2005 14:13 · Поправил: Z0oMiK · Личное сообщение · #6 |
|
Создано: 07 декабря 2005 14:31 · Личное сообщение · #7 |
|
Создано: 07 декабря 2005 14:34 · Личное сообщение · #8 |
|
Создано: 07 декабря 2005 14:44 · Личное сообщение · #9 |
|
Создано: 07 декабря 2005 15:05 · Личное сообщение · #10 TOG знаеш мне кажется это может быть проблема в самом айсе. иногда бывало у мнея не срабатывали бряки даже при оладке своих прог (к сожалению счас нет ничего чтом можно было бы привести в пример). да вот еще что может там быть такой прикол ... pop ss mov [01E50010h], x ... вроде после изменения сег. рег стека следующая команда за изменяющей для отладки не видна. ----- power and the money money and the power ![]() |
|
Создано: 07 декабря 2005 15:22 · Поправил: TOG · Личное сообщение · #11 doctor Ice пишет: pop ss Это было очень давно... ![]() Попробую уточнить вопрос: Можно ли писать в структуру CONTEXT не вызывая предварительно исключение ? (SetThreadContext она тоже не вызывает) Я вот смотрю в структуре TIB есль поле GlContext, может это контекст и есть ? Как еще можно дебажные регистры прибить ? ![]() |
|
Создано: 07 декабря 2005 15:34 · Личное сообщение · #12 |
|
Создано: 07 декабря 2005 15:45 · Личное сообщение · #13 |
|
Создано: 07 декабря 2005 15:54 · Личное сообщение · #14 |
|
Создано: 07 декабря 2005 18:52 · Личное сообщение · #15 |
|
Создано: 07 декабря 2005 22:53 · Личное сообщение · #16 Z0oMiK пишет: Аналог глянь DeryOne ;) 1 процесс а есть Нано неверю, такого быть не может =) int3 в арме обрабатывает процесс отладчик, таков там принцип работы... поэтому без второго процесса наномитов в арме быть не может. ЗЫ можно теоритически обрабатывать int3 в одном процессе (используя seh), но _очень_ сомнительно что так делают в арме... хотя самых последних версий армы я не видел (последнее что смотрел было вроде 4,0) ![]() |
|
Создано: 07 декабря 2005 23:45 · Личное сообщение · #17 |
|
Создано: 08 декабря 2005 10:04 · Поправил: TOG · Личное сообщение · #18 Мдяя... Давайте по пунктам. 1. Перед тем как переменная сбросится в ноль, прога входит в wait-функцию - SignalObjectAndWait. После выхода из нее переменная уже равна 0. Я непосредственно перед вызовом wait-функции устанавливаю на страницу памяти, где сидит эта переменная - PAGE_READONLY с помощью VirtualProtect. Включаю "faults on" и действительно при попытке записи в эту страницу всплывает айс с исключением ACCESS_VIOLATION. НО ПРИ ЗАПИСИ ИМЕННО В ЭТУ ПЕРЕМЕННУЮ НИЧЕГО НЕ ПРОИСХОДИТ - айс не всплывает, и кто ее обнуляет я не понимаю. ![]() |
|
Создано: 08 декабря 2005 11:10 · Личное сообщение · #19 |
|
Создано: 08 декабря 2005 11:38 · Личное сообщение · #20 |
|
Создано: 08 декабря 2005 12:12 · Личное сообщение · #21 Что это за чудо-переменная ? на ней свет клином сошёлся ? =) имхо если не ловиццо - и фиг с ней, другие способы надо пробовать... А по поводу HW бряков... арма вроде не затирает их вообще (под олли по крайней мере HW бряки в арме нормально пашут), а вот учитывая что арма запускается в двух процесса по поводу айса - надо (наверно, ибо айсом я мало пользовался) знать в контексте какого процесса будет запись в переменную, тоесть если там через WriteProcessMemory запись в данный процесс делается, то наверно лучше поискать более простой способ решения проблемы чем копание с дебрях системы в попытках найти момент записи =) ![]() |
|
Создано: 08 декабря 2005 13:03 · Личное сообщение · #22 |
|
Создано: 08 декабря 2005 14:09 · Личное сообщение · #23 Mario555 пишет: знать в контексте какого процесса будет запись в переменную Что-то я не фкурил. Надо бряк ставить в контексте того процесса которому принадлежит эта страница памяти (чудо-переменная), а не в контексте процесса который пишет в нее. Марио, так ведь ? Че-то я совсем уже зарылся в дебри. Самая хрень будет, если это действительно глюки айса. doctor Ice спасибо за трейсер. У меня впринципе и свои есть, попробую... ![]() |
|
Создано: 08 декабря 2005 16:38 · Личное сообщение · #24 TOG пишет: Надо бряк ставить в контексте того процесса которому принадлежит эта страница памяти (чудо-переменная), а не в контексте процесса который пишет в нее. Марио, так ведь ? но тогда в процессе B который пишет в переменную в память процесса A (через WriteProcessMemory) нету бряка и ессно срабатывать нечему, т.к. он установлен только в контексте потока процесса A (я об обычных HW бряках, в DR7 есть ещё какие-то global, может айс их юзает, тогда непонятно почему не пашет). вот что про global пишут: "The low-order eight bits of DR7 (L0 through L3 and G0 through G3) selectively enable the four address breakpoint conditions. There are two levels of enabling: the local (L0 through L3) and global (G0 through G3) levels. The local enable bits are automatically reset by the processor at every task switch to avoid unwanted breakpoint conditions in the new task. The global enable bits are not reset by a task switch; therefore, they can be used for conditions that are global to all tasks." TOG пишет: Че-то я совсем уже зарылся в дебри. Самая хрень будет, если это действительно глюки айса. проверь всё-такми все исключения и возможности доступа со стороны второго процесса - вдруг арма таки обнуляет DRx. Попробуй олли, вдруг там получиццо. ![]() |
|
Создано: 08 декабря 2005 16:44 · Личное сообщение · #25 |
|
Создано: 08 декабря 2005 16:49 · Личное сообщение · #26 |
|
Создано: 08 декабря 2005 16:59 · Личное сообщение · #27 |
|
Создано: 08 декабря 2005 17:05 · Личное сообщение · #28 |
|
Создано: 08 декабря 2005 17:11 · Личное сообщение · #29 TOG functions: IsDebuggerPresent flag will be zero OutputDebugStringA will be fucked with code just like retn 4 hying's pe-armor use a M$ backdoor so-called magicnumber to fool unpacker about the trap: the process heap will fill with diffierent things if under debugger or not. there is a flag, which should be 2 on my machine if no debuggin i just set it. so if you get error ,teach me how to improve it X-D the plugin will auto hide dbgr when you load a new target. ![]() ----- Don_t hate the cracker - hate the code. ![]() |
|
Создано: 08 декабря 2005 17:22 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Про анти-дебажные выкрутасы FRAPS'a |