· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Исследование Starforce 3 Pro

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>

Посл.отвђт Сообщенiе


Дата: Окт 11, 2004 12:43:42

СФ опрашивает порты встроенного IDE контроллера, которые изменить пока не получается (возможно, кто-нибудь знает что-либо по этому поводу?) Имеется в виду переназначение портов 170-177 и 1f0-1f7 (я думаю, это можно сделать через PnP BIOS или прямым вторжением в ESCD на этапе загрузки BIOS extension - например, сменить порты IDE на порты COM1/COM2 - система все равно получит от PNP верную информацию из ESCD и будет действовать сообразно полученным данным, а СФ обломается) - я проверял (отключал второй канал в BIOS и вешал на освободившиеся 170-177 CMD 0649 PCI RAID Controller - несмотря на обращение к нему через scsiport СФ успешно определяет на нем ATAPI девайс - хотя после изменения портов на соседние успехи в определении заканчиваются)


Дата: Окт 11, 2004 13:20:32

ECk
[Offtop]
Как там статья по SF3 поживает?
[/Offtop]


Дата: Окт 11, 2004 14:40:07

Для ECk

Хм. Я что имел ввиду.
Если будет написан драйвер, который будет вешаться на порты 170-177 и т.д. и в зависимости от настроек будет пропускать или непропускать запросы на эти порты.

Ведь можно же вести отладку по обращениям к портам.

Вопрос как я понимаю в том, что нужно как-то перенаправить вызовы sf на свою программу.

В самом крайнем случае поможет только правка материнской прошивки.


Дата: Окт 11, 2004 15:49:10

Для DenKor
На самом деле там все значительно ниже - запросы на эти порты идут не через драйвер, а прямой записью в порты из пкода СФ - таким образом, единственный путь заставить СФ двигаться официальными путями - переназначить порты IDE. К тому же, правка содержимого BIOS - едва ли удовлетворяющее всех решение (решение то нужно всем), а обращение к функциям PNP BIOS - практически generic way для этого.

Для ozzman
Статья пока не готова, т.к. они с каждой версией модифицируются, параллельно с написанием приходится поспевать за их стараниями. К тому же, там многослойный пкод - то есть, один код, помимо осуществления своих целей параллельно собирает на стеке и выполняет всякие мелочи вроде проверки через rdtsc через каждые два-три опкода во избежание трассировки, предварительно формируя из crc участка кода перед выполнением значение для всех следующих переходов внутри пкода.


Дата: Окт 12, 2004 08:22:49 · Поправил: DenKor

Для EcK

Я где-то в конференциях видел как кто приводил пример в котором были указаны читаемые сектора и время доступа к ним. Т.е. я понимаю, что кто-то все таки перехватывал обращение sf по доступу к диску.
_http://forum.ru-board.com/topic.cgi?forum=55&topic=0519&start=540

Вот мне и интересно как он это сделал. И хочется сделать такой анализ самому на своей игре Князь Тьмы.

Если ты копался в коде программы, то можно ли сделать перехват портов (сбрасывается ли регистр cr4 в части перехвата обращений).


Дата: Окт 12, 2004 09:53:54

Для DenKor
До cr4 дело не доходит, т.к там на протяжении пкода активно юзаются dr0-dr7, в связи с этим для перехвата сначала придется избавляться от этого; вторая ложка дегтя - периодически занимаемые различными обработчиками int1 / int3 - я в принципе это обошел, разместив в драйверах вместо их обработчиков свои, восстанавливающие парный вектор (int 1 восстанавливает int3, int 3 восстанавливает int 1); плюс, если есть желание потрассировать после восстановления int1/int3 - нужно выдрать зубы у prosync1.vxd (я привожу все свои примеры применительно к работе под 9Х - в некоторых аспектах там проще исследовать СФ) - prosync1.vxd блокирует все IRQ - прямо через контроллер прерываний 8259 (порты 20-а0) (master&slave) - если в prosync1 не вырубить эту фишку, будет примерно следующее: ты всплывешь в Айсе и все - ни F8 нажать, ни Ctrl-D - IRQ клавиатуры на СФ, в таких случаях поможет только reset (или устранение препятствия в виде функции из prosync1, ответственной за это - если не ошибаюсь, юзаемая по DEVICE_IO_CONTROL).
К тому же, относительно номеров секторов, которые перехватывались драйвером - в данной версии СФ это не применяется (запись/чтение идут через прямой доступ к портам контроллеров IDE за исключением случаев, когда драйв/контроллер установлен как SCSI).
Другое дело, можно использовать для этого драйвер Uniata - в поисковике можно найти страницу, где и исходники и последняя версия - это универсальный драйвер для IDE/ATA/ATAPI контроллеров, поддерживающий несколько основных контроллеров - с его помощью можно пересадить обычный on-board IDE controller на scsi и убрать из поля зрения СФ - вот тогда запросы к нему будут полностью контроллируемые.


Дата: Окт 20, 2004 18:47:57

Некоторые дополнительные подробности - перед каждой операцией с портами встроенного IDE контроллера происходит проверка регистра cr4 на DE - и делается видимость использования dr0-dr3 (mov dr0-dr3,eax - но сохраненного там значения никто не использует вплоть до следующей записи в dr0-dr3). А в остальном - ничего нового там не придумано (вся процедура проверки на наличие ATAPI девайсов ограничена 0хEC (IDENTIFY_DRIVE) в порты контроллера по одному для каждого девайса master/slave) на обоих каналах - чтение происходит через rep insw. Наверное, можно установить GD и после обращения к dr0-dr3 устанавливать DE в cr4 (а после отлова каждой записи/чтения вновь его скидывать и устанавливать GD). Единственное "но" на сегодняшний день - на int 1 находится callgate для перевода ДЛЛ в ring0.


Дата: Окт 20, 2004 18:53:06

ECk

Изумительная работа. Молодец.


Дата: Окт 20, 2004 20:33:26

ECk
на сегодняшний день - на int 1 находится callgate для перевода ДЛЛ в ring0

это что же получается замечательная дырка в системе безопасности - любой может через старфорс пролезть в ядро?


Дата: Окт 20, 2004 20:42:21

Об этой дырке уже упоминали Sten и AsMax - репорт был отправлен куда-то там... Забыл. У них спроси.


Дата: Окт 20, 2004 23:34:52

Max
Обработчик int1/int3 находится в IDT только на время проведения проверки диска (причем, для int3 - несколько), хотя код для callgate находится в драйвере prohlp02.sys - теоретически можно, пользуясь кодом из этого драйвера устанавливать callgate, переходить в 0, а затем восстанавливать оригинальный обработчик (в драйверах сохранена копия оригинальной IDT) - более того: это можно делать через создание \\.\PRODRV06 - после создания на int1 установлен callgate. Единственное "но" - на время вызова CreateFile,"\\.\PRODRV06" надо прятать Айс (под 9Х хватает изменения в DDB идентификатора и символьного имени на любые другие, под NT/XP/2K не пробовал, но в драйверах видел открытие NTICExxxx из драйвера через IoCreateSymbolicLink - в части, предназначенной для ХР) - если драйвер находит Айс в памяти, CreateFile возвращает INVALID_HANDLE, если Айс спрятан - возвращает нормальный хэндл (для закрытия callgate хэндл можно просто закрыть).
Причем, дыра получается реальная (что под 9Х, что под ХР - т.к код для чтения портов находится в ДЛЛ, а она при загрузке в usermode).


Дата: Окт 21, 2004 03:17:58

Мдя, я тут тоже уже давно занимаюсь старфорсом 3 и всё как-то не сильно... Тут попала мне гама Panzers называется, с поломанным Starforce(именно поломанным). Заметил что в сломанном фале отсуствует 2 секции, .start и .brick, добавилась новая .revolt называается ))). Видно чуваки из револта его распаковали и сняли защиту....
Если интересно для изучения могу прислать оба ЕХЕ ориг и крякед...


Дата: Окт 21, 2004 03:19:28

Да забыл добавить, протект.длл и остальные драйвера старфорса п*х....(они не юзаються)


Дата: Окт 21, 2004 21:23:28

Причем, дыра получается реальная (что под 9Х, что под ХР - т.к код для чтения портов находится в ДЛЛ, а она при загрузке в usermode).

Да, ходили под NT в ring-0 через SF.
Правда, насколько я знаю, разработчики SF собирались код подписывать цифровой подписью, чтобы всякие левые вещи через эту дыру не просочились. И вроде бы в новых версиях это уже сделано.

Я сам не смотрел насколько это все эффективно реализовано.


Дата: Окт 21, 2004 21:55:34

там ДЛЛ с драйвером имеют нечто вроде протокола шифрованного - длина входного/выходного буфера по 40 байт, передаются: номер АПИ в драйвере (4 байта) и аргументы (не более 9 штук по 4 байта). Передаются в зашифрованном виде, но шифр детский :)
Через этот интерфейс доступны АПИ для маппинга кода из ring3 в ring0, установка callgate и адреса для выхода, установка обработчиков на любое из прерываний и т.д

Интересно, если эту дыру вместе с протоколом обмена опубликовать в сети, как долго они просуществуют в текущей версии? И сколько патчей им придется одномоментно выпустить? И насколько меньше разработчиков в дальнейшем воспользуются СФ?

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074