Сейчас на форуме: Rio, johnniewalker, vsv1 (+6 невидимых) |
eXeL@B —› Крэки, обсуждения —› По взлому SpellForce перезагружается комп. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 25 мая 2011 18:04 · Поправил: neutronion · Личное сообщение · #1 Пытаюсь отвязать игру от cd, после вызова функции DeviceIoControl этот запрос направляются драйверу, которая игра установила. После выполнения этой функции, следующая команда в отладчике вызывает перезагрузку компа. По аргументам функции видно, что передаетя код операции и адрес одной из секций программы. В самом драйвере проводятся манипуляции с переданным адресом, вызываются такие функции как MmProbeAndLockPages, MmMapLockedPagesSpecifyCache. Вопрос такой по какой причине может перезагружаться комп. Дамп указывает ошибку в неком модуле crthook.sys. |
|
Создано: 25 мая 2011 18:09 · Личное сообщение · #2 |
|
Создано: 25 мая 2011 18:16 · Личное сообщение · #3 В дампах слабоват я, вот он, посмотрите, добрые люди. eb41_25.05.2011_EXELAB.rU.tgz - Mini052411-05.dmp |
|
Создано: 25 мая 2011 20:24 · Личное сообщение · #4 |
|
Создано: 25 мая 2011 20:39 · Поправил: inffo · Личное сообщение · #5 neutronion во-первых, проблема не в "crthook.sys", а в cpthook.sys. А во-вторых, у тебя видимо установлена DriverStudio (SoftIce) попробуй либо обновить ее, либо удалить если не нужна ADD: Ты случайно не под виртуальной машиной сидел (VirtualBox)? А то в логах дампа встречалась билиотека с VBoxDrv.sys. |
|
Создано: 25 мая 2011 20:52 · Личное сообщение · #6 Под виртуалкой запускается, но выполняется другой код, который говорит, что под отладчиком запускаться не будет, хотя в вируалке нет установленного softice. Хак делаю на основной машине. Дошел успешно до расжатия protect.dll, в ней в принципе найдена функция, которая проверяет сд, однако до ее вызова выше, совсем не далеко, есть вызов DeviceIOControl, после которого ручной трейс отправляет машину спать. Драйвера юзаются 3 штуки: sfdrv01, sfhlp02, sfsync02. |
|
Создано: 25 мая 2011 20:54 · Личное сообщение · #7 |
|
Создано: 25 мая 2011 21:17 · Личное сообщение · #8 |
|
Создано: 25 мая 2011 21:37 · Поправил: neutronion · Личное сообщение · #9 |
|
Создано: 25 мая 2011 21:49 · Поправил: inffo · Личное сообщение · #10 neutronion пишет: Какой файл, извините я плоховато соображаю?cpthook.sys? Да. Из твоего дампа видно, что ошибка произошла при чтении памяти. И драйвер причины указан cpthook.sys. Найди его в своей системе (в папке с установленной Windows) и переименуй. После попробуй проверь будет ли "машина спать" после вызова DeviceIOControl и ручного трейса |
|
Создано: 25 мая 2011 22:23 · Поправил: Nightshade · Личное сообщение · #11 Судя по этим названиям sfdrv01, sfhlp02, sfsync02 это 100% стар. Там виртуальная машина исполняется в ядре. Без хуков int1 и int3 отладчик грузить нельзя, иначе сразу хапнешь бсод. Если напишешь хукер - можно будет смотреть дальше. А пока кури маны релоадед. инт1 не помню точно зачем используют, но вызовов должно быть мало(установка хуков чтоли...) инт3 используют для вызовов вм в ring0. Суть в том что твой дров должен проверять исключение отладчика произошло или нет. Если не отладчика - отдаем исключение защите. |
|
Создано: 26 мая 2011 10:24 · Личное сообщение · #12 |
|
Создано: 26 мая 2011 10:53 · Личное сообщение · #13 |
|
Создано: 26 мая 2011 13:28 · Личное сообщение · #14 |
|
Создано: 26 мая 2011 19:24 · Личное сообщение · #15 |
|
Создано: 26 мая 2011 19:27 · Личное сообщение · #16 |
|
Создано: 26 мая 2011 19:30 · Личное сообщение · #17 |
|
Создано: 26 мая 2011 19:38 · Личное сообщение · #18 |
|
Создано: 26 мая 2011 19:47 · Личное сообщение · #19 |
|
Создано: 26 мая 2011 19:51 · Личное сообщение · #20 |
|
Создано: 26 мая 2011 19:53 · Личное сообщение · #21 |
|
Создано: 26 мая 2011 20:11 · Личное сообщение · #22 |
|
Создано: 26 мая 2011 21:24 · Личное сообщение · #23 |
|
Создано: 26 мая 2011 22:22 · Личное сообщение · #24 Ты правильно понял. Драйвер защиты воспринимает исключения отладки как команды сделать определенные действия. Например обычный бряк он воспримет как вызов вм. Потом посмотрит где бряк, не найдет код который должен выполнить и мы получим бсод. Поэтому надо писать свой драйвер или не пользоваться бряками и трассировкой |
|
Создано: 26 мая 2011 22:57 · Личное сообщение · #25 ну и кстати будет то, что сф 3 точно патчил кусок кода в KiDispatchInterrupt, где проводится переключения контекста записью в cr3, и при каждом переключении на защищенный процесс, сф3 вписывает в идт свои хендлеры на инт1/инт3. Была идея перехватывать запись хуков в идт и исключений по инт1/инт3 путем перемещения части 1-й части идт в страницу с NO_ACCESS аттрибутами, чтоб по GP_FAULT отлавливать вызовы в вм, но тут риск при следущем исключении словить triple-fault, после чего идет ребут На DeviceIoControl забей. Там протект.длл напрямую из юзермода командует IDE-портом, естественно перед этим подправив маску доступа на прямое обращение к портам. Если используется стар бейсик без выполнения частей кода в вм, то 3 сф снимает чуть потяжелее упх без извращений с написанием собственной дровины и дебага р0 |
|
Создано: 26 мая 2011 23:59 · Личное сообщение · #26 Чтобы написать свой драйвер, нужно очень хорошо изучить, что делает старовский дров. Это что же, полностью реверсить нужно весь дров? Боюсь, у меня уровень не дотягивает до этого. Лет 10 буду этим заниматься. Хотя ида конечно позволяет получить си код, с помощью своего плагина. Про хэндлеры в инт1\3 это интересная мысля, то есть, если я подставлю свои обработчики вместо старовских, то стар будет отдыхать и соответственно более не утомлять перезагрузкой? Или может сначала найти эти обработчики и проанализировать их, почему они отправляют комп в лимбо? |
|
Создано: 27 мая 2011 00:15 · Личное сообщение · #27 |
|
Создано: 27 мая 2011 09:58 · Личное сообщение · #28 |
|
Создано: 27 мая 2011 10:24 · Поправил: ARCHANGEL · Личное сообщение · #29 neutronion пишет: попробую в СофтАйсе установить останов на обработчики int1\3 Вы не поняли суть проблемы. Давайте по-простому. При переключении контекста из EPROCESS берётся значение каталога страниц и записывается в cr3. Там ещё немного добавляется кода при наличии LDT, т.е. если она есть, то дескрипторы меняются, но это по сути и всё, контекст переключён. Далее дравйвер патчит обработчики из IDT, заменяя их на свои. Если вы в айсе или каком-то другом дебаггере поставите бряк на код, то перед тем, как айс обработает отладочный иксепш, его вначале получит и обработает старфорс. Если вы снимете хуки и с помощью своего драйвера добьётесь того, чтоб старфорс их не ставил, то и это не решит проблему, т.к. по отладочным иксепшенам работает виртуальная машина ядра, которая при снятии хуков работать перестанет, код не распакуется, и процесс (или вся система) рухнет. Первый вариант заключается в написании своего драйвера, который поддерживает пул брейкпоинтов, установленных вами. Проще говоря, вы поставили бряк (опкодом СС), перед его срабатыванием ваш драйвер проверяет, находится ли адрес, по которому сработал бряк, в пуле бряков. Если да, то исключение получает айс, если нет, то значит его поставили не вы, а защита, и исключение получает старфорс. Я когда-то видел на Мне кажется, что стоит использовать альтернативный метод. А именно - поменять местами _KiTrap01/_KiTrap03 с какими-то неиспользуемыми прерываниями. Т.е. ещё до запуска старфорса (или антируткит алгоритмами) определяете истинные адреса обработчиков. Меняете их местами. И можно дебажить любым адаптированным под это дело дебаггером. Даже олькой, если пропатчите её. Патчить нужно вставку бряка, ведь теперь вам нужно лепить не опкод инструкции int 3, а какой-то другой int X, и такая инструкция уже будет двухбайтовой. Значит перед установкой бряка (и после его снятия) надо читать два байта (и восстанавливать 2). Но на рабочей системе так делать не рекомендую, поскольку у вас могут быть софтины, которые не будут адаптированы под это дело, и будут юзать, например, отладочный цикл в его прежней реализации. Плюс это подойдёт для программных бряков, а для трассировки там свои заморочки. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 27 мая 2011 13:15 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Крэки, обсуждения —› По взлому SpellForce перезагружается комп. |