Перейти к содержанию

Assassin Creed Unity Обход защиты


Рекомендуемые сообщения

Олли не поможет, игра 64-битная

 

Олли 64 существует, не понятно почему не поможет.

EjhuPLa.jpg

 

Для интереса введите в поиск в гугле

"xor al,[rdx]"

 

Найдете несколько интересных тем. Например, такую. Я так понял было такое решение, но я его не очень понял

I tested something today. I've dumped the target at OEP and fixed PE header (contained lots of crap). Then did the following:

 

[ENABLE] alloc( hook, 256 )alloc( dummy, 120000 )label( originalcode )loadbinary( dummy, C:\Documents and Settings\Administrator\Desktop\dumped.exe ) // our dumped dummy hook:push eaxpush ecxmov eax,[ebp] // get address from [ebp]mov ecx,target.exe // get ImageBasesub eax,ecx // get offsetadd eax,dummy // find location in dumped dummymov [ebp],eax // swap checked addresspop ecxpop eaxoriginalcode:neg dlsar dl,clmov edx,[ebp]jmp 40CCA4 // return back 40CC9D:jmp hook // hooked handler [DISABLE] 40CC9D:neg dlsar dl,clmov edx,[ebp] dealloc( hook )dealloc( dummy )
This one actually works. Fun fact is active memory is not checked anymore. If there would be other checkers, re-routing would be done in the same way, I guess.

 

Дампа в теме нет, так что самим делать

Ссылка на комментарий
Поделиться на другие сайты

Олли 64 существует

 

Забыл про него совсем ) То есть напрочь )

 

 

 

 

Я так понял было такое решение, но я его не очень понял

 

Решение как раз понятное. В момент проверки целевая память (которая занята инъекцией) подменяется на сдампленную заранее нетронутую. Я собирался сделать почти также. Только не дампить на жесткий диск, а сдампить в выделенную память те участки, которые инъекцией затрагиваться будут. А суть же точно такая же.

Ссылка на комментарий
Поделиться на другие сайты

Еще способ выйти на инструкцию - поставить брейкпоинт на чтение на адрес инструкции. Т.е. не на выполнение ставить, а как на данные

 

На выполнение не ставить (нажимая F5 в дизассемблере), а скопировать адрес в таблицу CE и поставить брейкпоинт на чтение. Начать играть какое-то время. Если сработает брейкпоинт, то там должен быть код защиты.

 

Этот способ я когда-то применял, но это было так давно, что и забыл про него. 

Это гениально!!! Я запишу себе куда-нибудь... Как я раньше до этого не додумался?!?!?!?!?!?!

P.s. серьезно не знал про такой метод ) А в гта 4 он работает?

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Я поставил наконец эту игру. Мое маленькое исследование и теоретическое решение.

 

1. Когда мы меняем код, то через какое-то время 3 участка могут проверить его

2. Проверяющий код проверяет сам себя (!) и другой код

 

Теоретическое решение, оно такое простое, что лежит перед носом.

 

Когда инструкция читает адрес с нашим фейк кодом, то читает фейк байты и обнаруживает ошибку, и происходит вылет из игры.

 

Так вот, нам надо сделать фильтры на адреса фейк кода и подставить не фейк байты. Это надо сделать 3 раза для проверки кода самого себя и + 3*N раз на инъекцию чит-кода.

ACU.exe+55D741F - 32 02 - xor al,[rdx] // 1ACU.exe+55D658F - 32 02 - xor al,[rdx] // 2ACU.WriteData+22C8 - 32 02 - xor al,[rdx] // 3На 1 проверить 2,3 и N раз для читаНа 2 проверить 1,3 и N раз для читаНа 3 проверить 1,2 и N раз для чита
 

Для того чтобы не писать лишнего кода можно попробовать придумать вызов call на новую память, в которой будут подставляться оригинальные байты вместо фейковых.

 

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

Ссылка на комментарий
Поделиться на другие сайты

Вот что получилось, но что-то не работает

post-3-0-57727400-1429498980_thumb.png

 

Написал я таблицу ACU.CT Пока не отладил толком.

 

Если кто будет запускать таблицу, то инструкцию прочти

 

1. Запускаем CE и на всякий случай ставим VEH дебаг

2. Запускаем игру в коне и прям на заставке Alt+Tab и переходим в CE

3. Открываем таблицу. На предложение выполнить Луа скрипт отказываем. Он может пригодится только для генерации АА скрипта

4. Останавливаем процесс по горячей клавише (назначить её надо) и активируем Umul1 и Emule2, и отпускаем процесс игры. Тут вылет происходит, а его не должно быть

5. Если вылета нет, то активировать скрипт денег. Войти в игру потратить и посмотреть изменения. Скрипт денег сделал на скорую руку.

 

Пока такие дела.

 

Ссылка на комментарий
Поделиться на другие сайты

Так вот, нам надо сделать фильтры на адреса фейк кода и подставить не фейк байты.

 

Именно об этом способе я выше говорил. 

Но у меня на лицензии только один адрес проверяющей вылезает. Видимо, мало тестил. Тут все упирается в свободное время.

Ссылка на комментарий
Поделиться на другие сайты

Фигово ассемблируется "call адрес" на CE 64 Bit, но не всегда, а вроде когда адрес находится в каком-то диапазоне, то ли значительно до адреса инъекции. Поэтому пришлось написать вроде этого

push rcxmov rcx, адрес // где адрес в новой памятиcall rcxpop rcx

У меня  только один адрес проверяющей вылезает

 

Так это зависит от того, что ты делаешь. Если ставить один раз бряк на доступ на инструкцию и больше ничего не делать, то вылезет одна инструкция и ты даже не узнаешь, что код проверяет сам себя... Нужно ставить брейкпоинты на каждой новой появившейся инструкции в окне брейкпоинтов.

 

Тогда узнаешь:

 

Адрес1: код работающий с адресом денег

Адрес2: Код проверки адреса1

Адрес3: Код проверки адреса2 и адреса3

Адрес4: Код проверки адреса3 и адреса4

 

Справа указаны оригинальные байты, которые затираются прыжком на выделенную память и их(оригинальные байты) нужно читать вместо фейковых

Адрес1: ACU.exe+55D741F : 32 02 F9 E9 9C 06 00 00

Адрес2 : ACU.exe+55D658F : 32 02 F6 C3 9B

Адрес3 : ACU.WriteData+22C8 : 32 02 F5 A8 3F

Адрес4(Money) : ACU.exe+FAB5BE : 8B 53 28 03 43 38

Ссылка на комментарий
Поделиться на другие сайты

Ковыряет еще кто нибудь эту игру?

Или уже все забыли про нее...

Жаль, что она у меня не пойдёт - видюха не потянет.

 

Dison, попробуем доработать идею MasterGH.

 

Но это только мои предположения, к сожалению проверить их сам не могу. Идея основана на том, что в [rdx] лежит адрес (он конечно постоянно меняется и их очень много) инструкции, который побайтно проверяет xor al,[rdx] и если постоянно подменять в [rdx] адрес, на адрес инструкции, с которой мы ничего делать не будем, то проверка успешно это скушает.

 

Посчитаем, что есть только 3 проверки и MasterGH их нашёл:

ACU.exe+55D741F - 32 02 - xor al,[rdx] // 1ACU.exe+55D658F - 32 02 - xor al,[rdx] // 2ACU.WriteData+22C8 - 32 02 - xor al,[rdx] // 3

1. Найдём адреса с которыми работает 1 инструкция - ну ты знаешь - правой кнопкой в Отладчике на этой инструкции ACU.exe+55D741F - 32 02 - xor al,[rdx] и выбрать из контекстного меню "Найти адреса, получающие доступ к этой инструкции".

2. Выбери любой адрес, который ты точно не будешь использовать в своих читах (скриптах). Это и будет адрес //4.

Допустим мы получили:

ACU.exe+0000004 - XX XX XX XX - инструкция // 4 

3. Теперь для каждой инструкции из первых 3-x сделай инъекции (скрипт):

 

4. Теперь можно объединить все 3 полученных скрипта в один.

5. И если моя идея оказалась верной, то писать свои скрипты (читы).

PS: Ещё немного мыслей.

При включении объединённого скрипта, мне кажется, будет лотерея, т.е. в какой момент мы включили скрипт.

Если в момент проверки самих себя, то скорее всего будет вылет из игры, если нет - то скрипт сработает.

 

И, если моя идея всё-таки окажется верной, то лучше один раз пропатчить игру (я это точно не знаю как делать, но примерно представляю), т.е. не восстанавливать оригинальный код, чтобы все 3 инструкции прыгали на участок памяти, где постоянно получали адрес 4 инструкции, чем постоянно пытаться включать наш скрипт.

[ENABLE]alloc(hook, 128)label(originalcode)label(returnbaсk) hook:mov [rdx],ACU.exe // в [rdx] записываем адрес той 4 инструкции, add [rdx],0000004 // которую мы трогать не будем. originalcode:xor al,[rdx]      // оригинальные инструкции, сколько нужно - их тоже не трогаем..............jmp  returnbaсk ACU.exe+55D741F:nop               // сколько нужноjmp hook returnbaсk: [DISABLE]ACU.exe+55D741F: xor al,[rdx]      // оригинальные инструкции, сколько нужно..............dealloc( hook )
Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Мне не удалось обойти защиту, но ковырять не бросил. Время от времени ковыряю.

 

Внимание собственно привлекло вот, что

 

"ACU.exe"+55D741A: E9 50 AA FF FF           -  jmp ACU.exe+55D1E6F// ---------- INJECTING HERE ----------"ACU.exe"+55D741F: 32 02                    -  xor al,[rdx]"ACU.exe"+55D7421: F9                       -  stc "ACU.exe"+55D7422: E9 9C 06 00 00           -  jmp ACU.exe+55D7AC3// ---------- DONE INJECTING  ----------"ACU.exe"+55D7427: E9 26 59 FF FF           -  jmp ACU.exe+55CCD52
 

Я не проверял(кстати надо бы проверить) слишком уж часто попадаются на глаза короткие инструкции и безусловные прыжки следующие за ними через несколько байт и или же прыжки до коротких инструкций. Если какой-то код прыгает на "ACU.exe"+55D7422, а там уже была инъекция кода, то это вызовет исключение и возможно вылет. Три байта 32 02 F9 слишком мало чтобы в "ACU.exe"+55D741F делать инъекцию кода. Тут надо бы поэкспериментировать чего и как делать.

Ссылка на комментарий
Поделиться на другие сайты

MasterGH, а если добавлять не снизу (где прыжок jmp ACU.exe+55D7AC3), а одну инструкцию сверху xor al,[rdx] для инъекции?

 

PS: Да вспомнил, я именно с таким случаем сталкивался, писал об этом в этой статье (читаем со строчки, где выделено зелёным А теперь ВНИМАНИЕ, где-то в середине статьи).


PS1: И ещё одна мысль, нужно посмотреть, какой точно адрес лежит в [rdx], когда инструкции проверяют самих себя, если точно - отсюда "ACU.exe"+55D741F: 32 02, то становится ещё проще:

Тогда все три инъекции, нужно делать выше "ACU.exe"+55D741F: 32 02, чтобы инъекцией не затрагивать проверяющие инструкции и перед ними писать в [rdx] адрес 4-ой инструкции, с которой мы ничего не делаем. И соответственно, объединённый скрипт будет включаться всегда - без вылетов. 

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

MasterGH, а если добавлять не снизу (где прыжок jmp ACU.exe+55D7AC3), а одну инструкцию сверху xor al,[rdx] для инъекции?

 

Я не понял, что ты хочешь сделать.

 

Ты решил бы вопрос с установкой игры. Окно игры замораживается когда теряет фокус, а проверка кода не останавливается. Хотя бы просто попробовал бы запустить игру в главном меню или даже до попадания в это меню во время показа видео заставок. Не забудь поставить Вех Дебаггер в CE.

Ссылка на комментарий
Поделиться на другие сайты

Ты решил бы вопрос с установкой игры.

Покупать видюху только из-за одной этой игрушки, нет ни средств, ни желания.

 

Я не понял, что ты хочешь сделать.

Делать инъекцию не на этой инструкции xor al,[rdx], а выше её, чтобы в инъекцию не попадал прыжок  jmp ACU.exe+55D7AC3.

 

 

И ещё одна мысль появилась:

По идее, что делает этот код:

xor al,[rdx]stc 

Если байты совпадают, то в al всегда будет ноль и stc установит флаг переноса cf в 1.

 

Так может быть сделать просто так:

mov al,0stc 

Может проверка это скушает?

Ссылка на комментарий
Поделиться на другие сайты

Мне не удалось обойти защиту, но ковырять не бросил. Время от времени ковыряю.

 

MasterGH - Вопрос такой как попасть на следущую проверку кода после этой xor al,[rdx]

Ссылка на комментарий
Поделиться на другие сайты

У проверяющей инструкции есть адрес. Добавить его в таблицу и поставить на него брейкпоинт. В окне тут же вылезут инструкции.

 

Так как игра у меня часто вылетает, то я даже не захожу в игру и вообще в неё не играю. После запуска exe, как только пошли ролики сразу alt+tab и открываешь CE и ковыряешь. Даже до меню не доходишь.

Ссылка на комментарий
Поделиться на другие сайты

Игру всё-таки установил и не проходя дальше главного меню проверил идею, которую высказывал ранее здесь  (вкратце - подмена адреса для проверки).

Не сработала - игра вылетает.

 

Если какой-то код прыгает на "ACU.exe"+55D7422, а там уже была инъекция кода, то это вызовет исключение и возможно вылет.

На этот адрес всего 1 прыг, использовал этот твой Plugin (ставил даже 20000 адресов), так что вылеты у меня не из-за него.

 

Проверил также идею, которую высказывал здесь.  Тоже не сработала - вылет.

 

На PG.ru есть трейнеры от двух авторов (судя по сообщениям - рабочие) - значит защиту всё-таки кто-то сумел обойти.

[ENABLE]alloc(newMem1, 64)alloc(newMem2, 64)alloc(newMem3, 64)label(returnHere1)label(returnHere2)label(returnHere3)newMem1:push rcxmov rcx,ACU.exeadd rcx,771634Amov rdx,rcxpop rcxxor al,[rdx]stc jmp ACU.exe+55D7AC3jmp returnHere1newMem2:push rcxmov rcx,ACU.exeadd rcx,55CFAA4mov rdx,rcxpop rcxxor al,[rdx]test bl,-65jmp returnHere2newMem3:push rcxmov rcx,ACU.exeadd rcx,55D5599mov rdx,rcxpop rcxxor al,[rdx]cmctest al,3Fjmp returnHere3ACU.exe+55D741F:jmp newMem1db 90 90 90returnHere1:ACU.exe+55D658F:jmp newMem2returnHere2:ACU.WriteData+22C8:jmp newMem3returnHere3:[DISABLE]ACU.exe+55D741F:xor al,[rdx]stc jmp ACU.exe+55D7AC3ACU.exe+55D658F:xor al,[rdx]test bl,-65ACU.WriteData+22C8:xor al,[rdx]cmctest al,3Fdealloc(newMem1)dealloc(newMem2)dealloc(newMem3) 
Ссылка на комментарий
Поделиться на другие сайты

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

Может пусть Dison, проверит тогда, у него вроде игра идёт.

Ссылка на комментарий
Поделиться на другие сайты

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

 

Да и тема перенесена в открытый раздел.

Ссылка на комментарий
Поделиться на другие сайты

А как ты там еще не разобрался с этим обходом по защите?

 

Не, не разобрался. А ты не пробовал искать цепочки указателей на адрес денег, здоровья и прочего? Чем не выход? Не хочешь попробовать? Только что-то на здоровье у меня не получилось рабочий адрес найти.

Garik66, чтобы игра меньше тормозила попробуй поставить все поминимум в настройках и минимальное возможное разрешение и 16 битный режим на монитор. Например, можешь поставить разрешение 1024 на 768 на дисплей и разрешение игры 640 на 480. Может даже сможешь поиграть и пройти пролог, ну и читы потестить свои.

Ссылка на комментарий
Поделиться на другие сайты

Не, не разобрался. А ты не пробовал искать цепочки указателей на адрес денег, здоровья и прочего? Чем не выход? Не хочешь попробовать? Только что-то на здоровье у меня не получилось рабочий адрес найти.

Я пытался найти указатели, нет у меня вообще нечего не получилось.

Да и вообще пробовал как авто-поиском искать так и вручную и нечего не вышло.

Может что-то и не то делаю.

В других играх получалось найти цепочки указателей.

Но опять же не факт что они будут постоянно работать...

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.