|
|
| Посл.отвђт | Сообщен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 изменять... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061 |