Сейчас на форуме: _MBK_ (+7 невидимых)

 eXeL@B —› Основной форум —› Статья SafeDisk 4.6
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 26 июля 2007 11:54
· Личное сообщение · #1

Вот распаковав этот протектор решил написать свою вторую статью. Прежде всего я хотел бы услышать мнения по ней, а также неточности, ошибки. Сам прот снимал с игры Цивилизация 4
Вот ссылка: rapidshare.com/files/45119414/SD.rar.html




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 27 июля 2007 14:35
· Личное сообщение · #2

VaZeR
Я тут ещё раз глянул насчёт антиотладки.
Там ведь не только эта константа фигурирует.Как я уже говорил,значение регистра dr7 -- этот механизм кстати,по-моему,используется самым первым и палит отладчик на сто процентов(ну,если только ntice.sys не был пропатчен).
Далее там существует ещё одна сигнатура: 58803194/58811284.
Так что придётся ещё патчить.

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 июля 2007 15:23
· Личное сообщение · #3

У меня помойму проверка dr7 осуществляется в самой первой проверке где сосредоточены ring 3. Там в конце и есть вызов драйвера. Насчёт твоих констант, я такие первый раз вижу. Но я проверу в драйвере их, есть ли они. Игра у меня нормально запускается. Нужно только обходить первую проверку, а так все ОК.
Я сейчас только нашёл Trigger table. Теперь попробую восстановить их.




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 июля 2007 15:24
· Личное сообщение · #4

Кстати игру я уже прошёл и вроде бы все нормально работает и без trigger table.




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 июля 2007 19:10
· Личное сообщение · #5

Да действительно в драйвере есть эти константы, но возможно они не всегда используются.

.text:00011888 cmp [ebp+var_8], 587C1194h
.text:0001188F jnz short loc_11894
.text:00011894 add ebx, 84h
.text:000118A8 test eax, eax
.text:000118AA jnz short loc_118B7
.text:000118AC mov eax, [ebp+arg_8]
.text:000118AF mov dword ptr [eax], 58811284h
.text:000118B5 jmp short loc_118C4
.text:000118B7 mov ecx, [ebp+arg_8]
.text:000118BA shl eax, 0Fh
.text:000118BD or eax, 58803194h
.text:000118C2 mov [ecx], eax
.text:000118C4 mov eax, [ebp+arg_C]

DillerInc ты можеш написать какая именно из констант означает, что отладчик обнаружен?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 27 июля 2007 23:18
· Личное сообщение · #6

VaZeR пишет:
какая именно из констант означает, что отладчик обнаружен?

...та что 58811284 означает,что отладчик не обнаружен.

Я тут начал долбать наномиты.У меня возник вопрос насчёт определения адреса,куда записываются кэшируемые значения адресов наномитов.Так вот для нахождения этого адреса ты подсовываешь левые адреса в [esp+24h] или же адреса настоящих наномитов??Я как-то не могу так определить этот адрес,куда прописываются кешируемые адреса.Можешь как-то прокомментировать??

Кстати,структура,содержащая зашифрованную информацию про наномит,имеет размер восемь DWORD'ов, т.е. 32 десятичных байта,а не 16 как ты написал в статье.

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 28 июля 2007 04:43
· Личное сообщение · #7

DillerInc Адреса можешь подавать любые, так как все они кэшируются.
Чтобы найти эту секцию можно идти от условного перехода, который отвечает за "правильность наномита", но в любом случае откуда бы не начав копать код, все ниточки ведут к этой секции.
Также можно поискать твои адреса во всей области памяти. Там их не должно быть много.
После, тебе нужно отловить запись, которая идёт со смешение. Прокрути несколько адрессов, а потом посмотри где они у тебя записались. Тебе нужно такое место где с каждым адресом записывается 8 dword данных. Скорее всего это запись которая осуществляется последней.

Спасибо насчёт 16 и 32. Это я ошибся когда писал.

Восстановил я Trriger table, но вот не понял почему нужно именно так оформлять таблицу? Сама у меня только одна trriger table. Там если одна структура то все три указателя на неё будут одинаковыми.
Также посмотрел я ещё и версию драйвера. У меня она 4.0. Возможно он одинаковый для всех версий протектора. Посмотри какая версия у тебя.




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 28 июля 2007 04:48
· Личное сообщение · #8

Если константа 58811284 отвечает, что отладчик не обноружен, то в драйвере нужно занопить условный переход по адресу 118AA (в приведёном листинге). В какой именно игре она используется?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 28 июля 2007 09:45
· Личное сообщение · #9

VaZeR пишет:
Восстановил я Trriger table, но вот не понял почему нужно именно так оформлять таблицу?

...это спрашивай у каких-нибудь команд типа Reloaded,я,честно говоря,сам не знаю,почему именно так.

У меня версия драйвера 4.0.60.0.
Константа эта использовалась,если не ошибаюсь,в игре Call of Duty (SD 3.10.20).

В общем,каким-то образом я нашёл примерный регион,куда кешируются эти адреса.Потом нашёл все четыре условных перехода.
Если что,то я смотрю игру Call of Duty 2 -- там тоже SD 4.60, только похоже не Advanced.

И теперь у меня самый глупый наверно вопрос: когда необходимо передавать управление на пропатченый код??

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 28 июля 2007 10:32
· Личное сообщение · #10

Ну если ты нашёл все места в программе, которые нужно пропатчить то перезагрузи программу. Опять пропатч всё как надо, а далее как управление перейдёт к тебе в OllyDbg так и запускай. Разницы особой нет. Так как тебе нужна просто восстановленая секция кода, которую ты можешь уже вставить в свой дамп.
Настёт trigger table не всё так просто как кажется. Там где находится код ответственный за обработку структурных данных тоже имеется ужё третий оператор CASE со 16 ветвлениями. По умолчанию я иду по 9 -тому. Но кода там очень много. Поэтому однозначно сказать, что там такое происходит довольно трудно. А если есть ветвления значит и таблицы могут быть не всегда одинаковыми.
Если с 64 таблицами мне было понятно как этот код действует. То с этими таблицами не как не могу понять как они работают.
Ещё вопрос ты когда востанавливаешь trigger table то у тебя тот код нормально работают не вылетают не какие ошибки? Ты просто ставишь eip на SDAPI и начинаешь трасировать и таким образом доходишь до места где берутся указатели на массив SafeDisk тот который в выделеной памяти?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 28 июля 2007 10:59
· Личное сообщение · #11

VaZeR пишет:
Ты просто ставишь eip на SDAPI и начинаешь трасировать и таким образом доходишь до места где берутся указатели на массив SafeDisk тот который в выделеной памяти?

...что-то я уже и не помню(давно это было).По-моему,можно было брякнуться в каком-то месте после OEP,где обрабатывались эти таблицы, т.е. ситуация с таблицей тогда должна была быть верной,раз обращение к ней происходило в общем ходе выполнения программы.Естественно,что предварительно нужно было найти в секции кода место,где идёт обращение к таблице.Тогда в шестнадцатом обработчике можно было найти указатель на выделенную память.А если мы находим один указатель,то мы тут же находим и все остальные,если они есть.

Кстати,с этой олькой у меня постоянно падал отладчик протектора.В конце концов,я забил на неё и отладил всё это дело SoftICE.

Вроде удалось восстановить наномиты следующим образом:
Я сделал так,что поймал отладчик,когда он возвращается из функции WaitForDebugEvent, т.е. я отпустил защищённую программу с OEP.Потом начал потихоньку патчить.Дал выполнится функции ContinueDebugEvent,затем пропатчил её.И уже тогда стал выполнятся наш исправительный код,так сказать,в полном смысле.Вроде все наномиты восстановились,сколько я смог проверить.
Иначе я не знаю,когда можно более грамотно запускать наш код.

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 28 июля 2007 12:19
· Личное сообщение · #12

Функцию ContinueDebugEvent можно и не выполнять зачем она нужна. Как вышел с WaitForDebugEvent вписал патч и запустил. В смысле падает, завершает работу или какой - нибудь сбой при записи или ещё что то. Если завершает приложение то там в том коде, насколько я понял только один выход это после проверки функции ContinueDebugEvent там ещё посмотри.
Я сам делал так, чтобы снять в последствии дамп на OEP то я вместо цикла EBFE вписал CCCC тем самым программа вообще не будет выполнять свой код. Потом когда попал остановился на выходе WaitForDebugEvent с адресом OEP затем вписываю патч и запускаю.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 28 июля 2007 14:26
· Личное сообщение · #13

VaZeR
Распаковал я этот Call of Duty 2.Восстановил сначала импорт и прочие хитрости с помощью патча,размещённого в заголовке файла.Переход туда я сделал после того,как игра была зациклена на прыжке на OEP.Потом просто выполнил любой произвольный наномит,ну а дальше как я уже описывал выше.

В общем,метод восстановления наномитов довольно хороший,но всё-таки предназначен для ручной распаковки.

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 28 июля 2007 16:07
· Личное сообщение · #14

А я не как не могу понять, что к чему в этих trigger table. Скачал NoCD к своей игре. Там тоже они востановлены аналогичным образом. Откуда RELOADED взяли эти значения, наверное, не с неба же.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 30 июля 2007 01:09
· Личное сообщение · #15

VaZeR пишет:
что к чему в этих trigger table

...попробуй смотреть код отладочных обработчиков.Там хоть почти нет метаморфа.
Я немного смотрел как-то -- что-то связано там с выделением какой-то памяти,типа RtlAllocateHeap,если я не ошибаюсь,на основе данных из таблицы.
VaZeR пишет:
Откуда RELOADED взяли эти значения

...на то они и Reloaded.

-----
the Power of Reversing team





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 30 июля 2007 04:50
· Личное сообщение · #16

Благодаря этим таблицам инициализируется одно значение, которое записывается тоже в эту же таблицу, там где один dword нулей, Сама инициализация этого значения зависит только опять же от одного значения из таблицы. Больше не какие не используются. И это значение находится как раз в неизменом виде в выделеной области протектора. На моей игре я не могу не чего проверить, так как эти таблицы у меня почти не используются. Надо будет NFS Most Wanted посмотреть. Там ты говоришь от них зависит многое.
В отладочных обработчиках находится код инициализации значения. Больше я там не чего не нашёл.




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 31 июля 2007 03:46
· Личное сообщение · #17

Всем спасибо за хорошие отзывы к статье. Статью подправил и скоро должна будет появится в разделе "Скачать". Всё тема закрыта.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 31 июля 2007 20:25
· Личное сообщение · #18

[offtop]
Почему в разделе "Скачать"??Выложи в раздел "RAR-статьи".
VaZeR пишет:
Всё тема закрыта.

...у тебя там должна быть такая кнопочка внизу типа "Закрыть тему".
[/offtop]

-----
the Power of Reversing team



<< . 1 . 2 .
 eXeL@B —› Основной форум —› Статья SafeDisk 4.6
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати