Сейчас на форуме: _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Основной форум —› Статья SafeDisk 4.6 |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 26 июля 2007 11:54 · Личное сообщение · #1 |
|
Создано: 26 июля 2007 12:21 · Личное сообщение · #2 |
|
Создано: 26 июля 2007 13:25 · Личное сообщение · #3 |
|
Создано: 26 июля 2007 13:28 · Личное сообщение · #4 |
|
Создано: 26 июля 2007 14:06 · Личное сообщение · #5 |
|
Создано: 26 июля 2007 14:13 · Личное сообщение · #6 |
|
Создано: 26 июля 2007 14:36 · Личное сообщение · #7 |
|
Создано: 26 июля 2007 14:41 · Личное сообщение · #8 |
|
Создано: 26 июля 2007 15:01 · Личное сообщение · #9 |
|
Создано: 26 июля 2007 15:25 · Личное сообщение · #10 |
|
Создано: 26 июля 2007 16:01 · Поправил: VaZeR · Личное сообщение · #11 |
|
Создано: 26 июля 2007 16:01 · Поправил: VAD87 · Личное сообщение · #12 buddy пишет: А первую статью можно заценить? первая статья здесь в RAR статьях находится, там про активацию электронной подписи в WinRar, мне та статья понравилась. VaZeR, эта статья покруче первой будет ;) Имхо зач0т, пиши исчо и хоть изредка появляйся в ирк ;) Хех, сам вазер на 5сек. опередил меня с ответом)) ![]() |
|
Создано: 26 июля 2007 16:03 · Личное сообщение · #13 |
|
Создано: 26 июля 2007 16:39 · Личное сообщение · #14 VAD87 пишет: там про активацию электронной подписи в WinRar А лицензионным RAR'ом открывать архивы с подписью сделанной ломанным, таким образом как в статье, RAR'ом пробовал ? ![]() Имхо деблэклистер рулит ![]() ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 26 июля 2007 17:25 · Личное сообщение · #15 |
|
Создано: 26 июля 2007 19:05 · Личное сообщение · #16 VaZeR Ну вот и я. Спасибо HoBleen'у за ссылку. Статья действительно получилась довольно мощная.И по охваченному материалу,и по глубине исследования. Я бы хотел остановится на некоторых моментах.Итак по-порядку: 1. Мне понравилось,что была затронута тема ring0-антиотладки.Я сам её не так давно поборол.Только мне не очень нравится твоя реализация.Ты предлагаешь патчить условные переходы в то время,как это всё можно сделать гораздо элегантнее ![]() Кстати,между делом,важные процедуры,которые ответственны за эту антиотладку не только сильно обфусцированы,но и шифруются/дешифруются каждый раз при входе/выходе.Но прикол состоит в том,что,если пропатчить такую процедуру,то патч после зашифровки/дешифровки всё равно остаётся. Под словом "элегантнее" я понимаю перехват вызова функции DeviceIoControl,анализ передаваемых ей параметров и последующее корректирование возвращаемых данных. Дело в том,что вся эта антиотладка происходит в драйвере SedDrv.sys,а функция DeviceIoControl является посредником между нулевым и третьим кольцами. Также можно сказать,что эта антиотладка встречается далеко невсегда.В часто в протекторе используется только простая версия,которая обходится действительно правкой нескольких байт либо подменой содержимого регистра EAX в контексте потока. 2. Наконец-то кто-то преподнёс альтернативный способ восстановления наномитов,надо будет обязательно проверить.Потому как способ,описываемый mr_magico в его статье про третий SafeDisc,имеет явные недостатки.Так что если что,то я как-нибудь с тобой проконсультируюсь ещё на эту тему,если ты не против ![]() 3. Часть про импорт не сказала ничего нового.Всё это уже было описано в статье того же mr_magico про вторую версию протектора.Но с другой стороны,в контексте общей статьи по снятию протектора с определённого приложения,это,на мой взгляд,вполне допустимо. Сколько я ни встречал т.н. LongJumps в различных играх,защищённых SD, -- все шли с шестым мусорным байтом и преобразовывались в команду CALL [dword], т.е. вызов какого-нибудь импорта. mr_magico как-то в статье про второй SD описывал код восстановления импорта,который вызывается через регистры.Я скажу честно: я никогда не пытался восстанавливать этот момент,и никогда из-за этого не возникало проблем. Моё мнение что т.н. эмулируемые команды -- это есть ни что иное как SDAPI 1. Только встречаются они обычно в очень простой форме,т.е. восстанавливают сами себя.Этих самых команд JMP EAX обычно две.Одна действительно используется,а вторая это как рудимент от сильной вариации SDAPI 1. Вы где-нибудь видели NoCD к игре The Sims 2(кроме того выкидыша от команды Money,где они просто как-то пропатчили протектор,не снимая его)??Так вот в этой игре используется механизм SDAPI 1 во всей красе.Однако мне всё же удалось его побороть и у меня есть распакованный файл Sims2. 4. Сразу хочется задать немного несуразный вопрос: ты читал до написания своей статьи какие-то другие материаты по SDAPI 2??Фразы у тебя некоторые уж больно похожи на мои ![]() ![]() Массивы,которые использует протектор и которые находятся в секции данных,восстанавливаются значительно проще.Но с другой стороны,это по-любому тебе на пользу,что ты копнул протектор в этом направлении.Если хочешь знать,как они восстанавливаются проще,то смотри мою статью про SDAPI 2 тут в RAR-статьях и смотри исходник прилагающийся к ней.Там даже есть два варианта этих массивов -- зависит от версии протектора. Далее в версии 4.60 отладочные обработчики присутствуют всегда.Их нет в версиях 4.50, 4.01 и наверно каких-то ещё,которых я не встречал.Отсутствие обработчиков усложняет снятие протектора в разы,но тем не менее это реально сделать.Я снимал протектор с The Godfather (4.50), а также с некоторых игр линейки вторых Симов (4.01).Это местами довольно муторно,но возможно. Кстати,в версии протектора 4.70 обработчики есть,просто они немного изменены,но это уже не играет особого значения,раз они есть. Фух,вроде всё. И напоследок -- нет такого слова ложим -- есть слово кладём. ![]() В любом случае,ты молодец -- это показывает,что Наши тоже могут писать хорошие статьи и при этом выкладывать их на паблик,а не только всякие там ARTeam. ----- the Power of Reversing team ![]() |
|
Создано: 26 июля 2007 19:53 · Личное сообщение · #17 Большое спасибо DillerInc за ответ. 1. Настёт антиотладки возможно твой вариант легче надо будёт поиследовать, но это ужё наверное как то в другой статье опишу ![]() 2. Мой способ востановления наномитов намного легче чем у МАГИКА, он если не ошибаюсь ишёт наномиты в секции кода программы и таким образом восстанавливает, а это нудное занятие. Если нужна помошь то готов помочь всегда. 3. Насчёт эмулированых опкодов, то что они это SDAPI v1, возможно так оно и есть. Второй JMP EAX у меня тоже есть, только нерабочий. Насчёт сильной версии SDAPI v1 надо будет посмотреть. Только у меня на Sims 2 Старфорс. 4. Твою статью про SDAPI v2 читал поэтому и похожи ![]() Насчёт слова ложим - исправлю ![]() ![]() |
|
Создано: 26 июля 2007 20:09 · Личное сообщение · #18 |
|
Создано: 26 июля 2007 20:17 · Личное сообщение · #19 |
|
Создано: 26 июля 2007 20:30 · Личное сообщение · #20 |
|
Создано: 26 июля 2007 21:04 · Личное сообщение · #21 overwriter Честно говоря,всё находится либо в голове,либо на бумаге.Но на бумаге не статьи,а лишь заметки.Так что пользуйтесь пока тем,что есть.Потом посмотрим. VaZeR пишет: Настёт антиотладки возможно твой вариант легче надо будёт поиследовать, но это ужё наверное как то в другой статье опишу ...он не то чтобы легче.Он более практичный что-ли.Если хочешь я могу тебе более подробно рассказать что там и как. VaZeR пишет: можешь написать в общих чертах как работает этот SDAPI v1 в Sims 2 ...принцип работы SDAPI 1 основан на шифровании отдельных функций,например такой код:
Так вот этот вариант вызова при определённых ухищрениях восстанавливается сам.На месте вызова и мусора появляется следующее:
Вот второй тип вызовов не восстанавливается.Я исследовал это дело,и если в случае с первым вызовом я находил где-то в памяти байты,которые вписывались вместо мусора,то во втором случае вместо байт были нули или какой-то мусор.Команды просто эмулировались протектором где-то глубоко в процедурах известной библиотеки.Всё это естественно было разбавлено доброй порцией полиморфа. В общем,в итоге на месте вызовов протектора должны были получится примерно такие команды:
----- the Power of Reversing team ![]() |
|
Создано: 26 июля 2007 22:56 · Личное сообщение · #22 |
|
Создано: 27 июля 2007 03:29 · Личное сообщение · #23 DillerInc насчёт антиотладки расскажи более подробно. Потому что поиск условных переходов, как я делал в статье, не совсем легкое занятие. Насчёт Trigger Tables я не смог найти их. У меня есть команды mov dword ptr [esp+XX], data и по адресу data нули. Но рядом с такими командами нет вызова SDAPI, а он насколько я думаю должен быть. Во-вторых, нет "известного байта", там одни сплошные нули. Сама игра работает нормально. Хотя может эти Trigger Tables отвечают за какие-нибудь элементы в гемплее. Например, если не будет несколько персонажей или чего то другого, то заметить это не возможно. Или они необходимы приложению? ![]() |
|
Создано: 27 июля 2007 03:33 · Личное сообщение · #24 |
|
Создано: 27 июля 2007 10:15 · Личное сообщение · #25 VaZeR Ну,если в секции данных только нули по нужным смещениям и нет "известного" байта,то тогда они действительно могут не использоваться в этой конкретной реализации защиты.Если не восстановить Trigger Tables, то в игре должны наблюдатся серьёзные глюки(так было в NFSMW, в других случаях я не экспериментировал). VaZeR пишет: Кстати ещё один вопрос "известный байт" он всегда 0С или он может быть любым? ...он может быть любым.Главное чтобы он был, т.к. с помощью него мы потом находим нужную таблицу в выделенной памяти. VaZeR пишет: DillerInc насчёт антиотладки расскажи более подробно ...функция DeviceIoControl имеет среди остальных параметров входной и выходной буферы.Когда мы перехватываем функцию,мы должны сохранить необходимые нам параметры функции.После того как функция отработает и мы получим управление снова в наши руки,мы проверяем сохранённые параметры.Нас прежде всего интересует IOCTL-код,передаваемый драйверу.Существуют два подобных кода,которые означают запрос антиотладки у драйвера.Далее мы проверяем входной буфер.На основе содержимого входного буфера мы уже будем знать,что искать в выходном.Существуют в основном два варианта: * это либо проверка регистра dr7 -- тогда в выходном буфере по определённому смещению будет лежать значение этого регистра * либо всякие другие проверки,названия которых ты приводил у себя в статье -- тогда в выходном буфере будет лежать сигнатура,которая фигурировала в одном из твоих листингов в статье И мы просто правим необходимое значение в выходном буфере и всё. В итоге,этот вариант как бы проще и логичнее,просто найти все эти моменты в том метаморфе было не так-то легко. ----- the Power of Reversing team ![]() |
|
Создано: 27 июля 2007 10:39 · Личное сообщение · #26 DillerInc Твой способ я понял. У меня находятся наверное сигнатуры в буфере. У меня это 587С1284 - нет отладчика. И 587С1194 - когда он есть. Сегодня я посмотрел этот способ и нашёл ещё более легкий. Нужно пропатчить сам драйвер SecDrv.sys. Благо константа находится в открытом виде в памяти и нужно только изменить условный переход, как на рисунке. ![]() ![]() |
|
Создано: 27 июля 2007 10:55 · Личное сообщение · #27 |
|
Создано: 27 июля 2007 11:04 · Личное сообщение · #28 |
|
Создано: 27 июля 2007 11:05 · Личное сообщение · #29 |
|
Создано: 27 июля 2007 14:22 · Личное сообщение · #30 DillerInc пишет: Просто мой способ более "программерский" да-да, это гуд как сто пудофф! (когда защита посложнее будет), но в данном случае лучше запатчить, чтобы говнописателям защит обиднее было и чтобы не думали что, сделав драйвер типа "усе, всех пабедиле" %) топег зачетный, статью пока не читал (мну как всегда времени нет (позже обязательно прочту), но из топика видно, что гуд)… сталобыть зачет! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Статья SafeDisk 4.6 |
Эта тема закрыта. Ответы больше не принимаются. |