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

 WASM Phorum —› WASM.RESEARCH —› safedisc 3

. 1 . 2 . >>

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


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

У меня такой вот вопрос: я ломаю exe call of duty (safedisc3), но у меня нет оригинального диска с файлом 00000001.tmp, содержащим ключ для распаковки программы. Так вот можно ли распаковать exe с помощью 00000001.tmp от doom3?(в нем тоже safedisc3). Или ключи распаковки для всех игр разные?


Дата: Окт 22, 2004 14:01:26

Ключи разные, но ходят упорные слухи что можно снять и без диска, т.е. ключ как-то можно забрутфорсить за приемлимое время.


Дата: Окт 22, 2004 15:28:11

Как это забрутфорсить? Там ведь ключ из 38 байт?..


Дата: Окт 22, 2004 19:15:23

rddvl
А вот тоже ломаю щас SafeDisc 3.20.
Олии чует за версту. Никакие плагины не спасают (в том числе HideDebugger 1.2).


Дата: Окт 22, 2004 19:39:21

FEUERRADER
> Никакие плагины не спасают (в том числе HideDebugger 1.2)

И не спасут, может там антитрейс.
Ещё нужно пропатчить в самом OllyDbg.exe класс окна.
Вообще Olly не правильно с плагинами работает, плагины нужно грузить до создания главного окна, тогда можно и класс окна в рантайме патчить будет.

> А вот тоже ломаю щас SafeDisc 3.20.

Если это игра(OpenGL, Direct 3D) full screen mode, то отладчик ring-3 тебе вообще не поможет.


Дата: Окт 22, 2004 19:44:54

Защиту от отладчика я благополучно обезвредил одним только Olly, не скажу, что раз плюнуть, но и не так уж сложно. Основная сложность в этом самом ключе. Вот если бы достать где-нибудь 00000001.tmp с лицензионного диска...
FEUERRADER
А можно поинтересоваться, какую именно игру ты ломаешь? Может чем поможем друг другу?


Дата: Окт 23, 2004 00:40:33

Asterix
> И не спасут, может там антитрейс.
не факт... я тут пакер один распаковывал, дык вот в нём для антиотладки используются SetUnhandledExceptionFilter (защита - патч UnhandledExceptionFilter) и CheckRemoteDebuggerPresent (защита - патч самой этой апи, чтоб она всегда 0 возвращала). Допиши плз их в свой плагин, а то как-то лениво вручную при каждом запуске патчить, хотя можно конечно скрипт для пачта написать, но его всё-равно запускать надо, а плагин сразу "автоматом" патчит... =)


Дата: Окт 23, 2004 01:07:43

Mario555
> я тут пакер один распаковывал

Что за пакер? Колись, нужно ж на чем то тестить ;-)

> в нём для антиотладки используются SetUnhandledExceptionFilter (защита - патч UnhandledExceptionFilter)

Тут у меня пробел в знаниях, зачем нужны эти функции, не нанесу ли я вред приложению запатчив. Вобщем без понимания смысла я не врубаюсь как корректно запатчить. Кажется кстати IceExt тоже их патчит??

> CheckRemoteDebuggerPresent

Это вообще какая-то новая API, в моей борландовской справке такой даже нету, нужно в msdn топать смотреть..


Дата: Окт 23, 2004 03:44:54 · Поправил: Asterix

Mario555
Так, просветился я уже насчет UnhandledExceptionFilter у Рихтера, но не понял что ты хочешь там пропатчить?

А насчет CheckRemoteDebuggerPresent, дык вобще не актуально, она имеется только в OS >= XP(Sp1), у меня таких нет ;-)


Дата: Окт 23, 2004 16:24:54 · Поправил: Mario555

Asterix
> Что за пакер? Колись, нужно ж на чем то тестить ;-)
Обсидиум 1.2, правда там из нового, по сравнению с 1.1, только вот эта антиотладка и есть =)

> но не понял что ты хочешь там пропатчить?
если использовать SetUnhandledExceptionFilter, то при наличие отладчика управление на Unhandled исключение передаётся ему, а без отладчика управление передаётся функции обработчика адрес которого задан через SetUnhandledExceptionFilter. Сама эта апи у меня выглядит так:
77E7E5A1 MOV ECX,DWORD PTR [ESP+4]
77E7E5A5  MOV EAX,DWORD PTR [77ED73B4]
77E7E5AA  MOV DWORD PTR [77ED73B4],ECX
77E7E5B0  RETN 4

адрес обработчика записывается в 77ED73B4, а в UnhandledExceptionFilter есть такое:
77E93101  CALL DWORD PTR [<&ntdll.NtQueryInformationProcess>]
77E93107  TEST EAX,EAX
77E93109  JL SHORT kernel32.77E93114
77E9310B  CMP DWORD PTR [EBP-20],ESI
77E9310E  JNZ kernel32.77E937D9 // тут прыгаем, если под отладчиком
77E93114  MOV EAX,DWORD PTR [77ED73B4] // ! адрес обработчика
77E93119  CMP EAX,ESI
77E9311B  JE SHORT kernel32.77E93132
77E9311D  PUSH EDI
77E9311E  CALL EAX // к обработчику

тоесть если условный переход по адресу 77E93109 поменять на безусловный, то и под отладчиком управление будет передаваться на заданный прогой обработчик.
PS кста оказывается есть уже плагин к оле, который подобным образом (нопит переход по адресу 77E9310E) патчит UnhandledExceptionFilter.

> А насчет CheckRemoteDebuggerPresent, дык вобще не актуально
ещё как актуально... ибо OS >= XP(Sp1) - очень распостранены =)


Дата: Окт 23, 2004 16:41:04

И ещё, насколько я понял, в обеих этих апи (UnhandledExceptionFilter и CheckRemoteDebuggerPresent) проверка на наличие отладчика сводится к вызову ZwQueryInformationProcess с параметрами:
|hProcess = FFFFFFFF
|InfoClass = 7
|Buffer = XXXXXXXX
|Bufsize = 4
\pReqsize = NULL


Дата: Окт 23, 2004 17:01:16

Так, теперь понятна суть проблемы, но патчить(nop'ить) переходы думаю нужно в последнюю очередь, только если нельзя решить проблему "изящными" методами, гораздо интереснее узнать откуда функция UnhandledExceptionFilter берёт инфу о том что процесс под отладчиком, судя по приведённому тобой коду она вызывает NtQueryInformationProcess, далее хотелось бы проследить куда эта функция лезет за информацией и какие там права доступа на чтение/запись, если раскопаешь было бы неплохо, я сейчас качну этот обсидиум ;-)

> ибо OS >= XP(Sp1) - очень распостранены =)

Всё равно актуальность сомнительна, ибо в наше время любой может себе позволить иметь установленными 2-3 OS, у меня 3-и =)


Дата: Окт 23, 2004 17:57:38 · Поправил: Mario555

Asterix
> далее хотелось бы проследить куда эта функция лезет за информацией
дык в ринг0 лезет... куда ж ещё =) Но вот пропатчить её вызов наверно можно. Посмотри в своих 3-х осях - какие параметры передаются ZwQueryInformationProcess, если так же hProcess = FFFFFFFF и InfoClass = 7, то тут:
77F76035   >MOV EAX,9A
77F7603A    >MOV EDX,7FFE0300
77F7603F    >CALL EDX
77F76041    >RETN 14

ставим "jmp свой код", в котором проверяются эти параметры , и если совпали, то в переменную которая XXXXXXXX (Buffer) кладём 0 и выход из функции, если параметры вызова не совпали, то пусть себе лезет в ринг0.


Дата: Окт 23, 2004 18:20:55

> InfoClass = 7

Это InfoClass = ProcessDebugPort
естественно во всех NT эта функция в этом месте вызывается с InfoClass = 7 (ProcessDebugPort)

> ставим "jmp свой код"

Я знаю как патчить ;-)
Нехорошо это, очень грубо.

> дык в ринг0 лезет... куда ж ещё =)

Я имел ввиду что за инфой она наверняка полезет в какую-нибудь недокументированную или слабо документированную структуру, задача - узнать в какую ;-)

> и если совпали, то в переменную которая XXXXXXXX (Buffer) кладём 0

Лучше InfoClass подменить, пусть проверяет что-нить другое с заведомо предсказуемым возвращаемым значением ;-)


Дата: Окт 23, 2004 18:23:16

а, не, глючу =) кроме как в [Buffer] класть ноль, нужно ещё регистры eax, ecx, edx изменять...

. 1 . 2 . >>


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