Xipho Опубликовано 14 апреля, 2015 Поделиться Опубликовано 14 апреля, 2015 К сожалению, на выходных не было времени вплотную заняться. Теперь до следующих выходных ждать только. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 14 апреля, 2015 Поделиться Опубликовано 14 апреля, 2015 Олли не поможет, игра 64-битная Олли 64 существует, не понятно почему не поможет. Для интереса введите в поиск в гугле"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. Дампа в теме нет, так что самим делать Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 15 апреля, 2015 Поделиться Опубликовано 15 апреля, 2015 Олли 64 существует Забыл про него совсем ) То есть напрочь ) Я так понял было такое решение, но я его не очень понял Решение как раз понятное. В момент проверки целевая память (которая занята инъекцией) подменяется на сдампленную заранее нетронутую. Я собирался сделать почти также. Только не дампить на жесткий диск, а сдампить в выделенную память те участки, которые инъекцией затрагиваться будут. А суть же точно такая же. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 16 апреля, 2015 Поделиться Опубликовано 16 апреля, 2015 (изменено) Еще способ выйти на инструкцию - поставить брейкпоинт на чтение на адрес инструкции. Т.е. не на выполнение ставить, а как на данные На выполнение не ставить (нажимая F5 в дизассемблере), а скопировать адрес в таблицу CE и поставить брейкпоинт на чтение. Начать играть какое-то время. Если сработает брейкпоинт, то там должен быть код защиты. Этот способ я когда-то применял, но это было так давно, что и забыл про него. Это гениально!!! Я запишу себе куда-нибудь... Как я раньше до этого не додумался?!?!?!?!?!?!P.s. серьезно не знал про такой метод ) А в гта 4 он работает? Изменено 16 апреля, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 апреля, 2015 Поделиться Опубликовано 19 апреля, 2015 Я поставил наконец эту игру. Мое маленькое исследование и теоретическое решение. 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 на новую память, в которой будут подставляться оригинальные байты вместо фейковых. Только-только у меня родилась эта идея и поэтому решил о ней написать. Возможно, скоро я сделаю таблицу как минимум на деньги. Еще кстати есть читы встроенные разрабами и даже должно быть дебаг меню, но пока о них даже не думаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 апреля, 2015 Поделиться Опубликовано 20 апреля, 2015 Вот что получилось, но что-то не работает Написал я таблицу ACU.CT Пока не отладил толком. Если кто будет запускать таблицу, то инструкцию прочти 1. Запускаем CE и на всякий случай ставим VEH дебаг2. Запускаем игру в коне и прям на заставке Alt+Tab и переходим в CE3. Открываем таблицу. На предложение выполнить Луа скрипт отказываем. Он может пригодится только для генерации АА скрипта4. Останавливаем процесс по горячей клавише (назначить её надо) и активируем Umul1 и Emule2, и отпускаем процесс игры. Тут вылет происходит, а его не должно быть5. Если вылета нет, то активировать скрипт денег. Войти в игру потратить и посмотреть изменения. Скрипт денег сделал на скорую руку. Пока такие дела. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 20 апреля, 2015 Поделиться Опубликовано 20 апреля, 2015 Так вот, нам надо сделать фильтры на адреса фейк кода и подставить не фейк байты. Именно об этом способе я выше говорил. Но у меня на лицензии только один адрес проверяющей вылезает. Видимо, мало тестил. Тут все упирается в свободное время. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 апреля, 2015 Поделиться Опубликовано 20 апреля, 2015 Фигово ассемблируется "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 Опубликовано 27 апреля, 2015 Автор Поделиться Опубликовано 27 апреля, 2015 Ковыряет еще кто нибудь эту игру?Или уже все забыли про нее... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Мне не до нее сейчас. Вообще в игры нет времени играть, не то что взламывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 (изменено) Ковыряет еще кто нибудь эту игру?Или уже все забыли про нее...Жаль, что она у меня не пойдёт - видюха не потянет. 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] // 31. Найдём адреса с которыми работает 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 ) Изменено 28 апреля, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Мне не удалось обойти защиту, но ковырять не бросил. Время от времени ковыряю. Внимание собственно привлекло вот, что "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 делать инъекцию кода. Тут надо бы поэкспериментировать чего и как делать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 (изменено) MasterGH, а если добавлять не снизу (где прыжок jmp ACU.exe+55D7AC3), а одну инструкцию сверху xor al,[rdx] для инъекции? PS: Да вспомнил, я именно с таким случаем сталкивался, писал об этом в этой статье (читаем со строчки, где выделено зелёным А теперь ВНИМАНИЕ, где-то в середине статьи).PS1: И ещё одна мысль, нужно посмотреть, какой точно адрес лежит в [rdx], когда инструкции проверяют самих себя, если точно - отсюда "ACU.exe"+55D741F: 32 02, то становится ещё проще:Тогда все три инъекции, нужно делать выше "ACU.exe"+55D741F: 32 02, чтобы инъекцией не затрагивать проверяющие инструкции и перед ними писать в [rdx] адрес 4-ой инструкции, с которой мы ничего не делаем. И соответственно, объединённый скрипт будет включаться всегда - без вылетов. Изменено 28 апреля, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 MasterGH, а если добавлять не снизу (где прыжок jmp ACU.exe+55D7AC3), а одну инструкцию сверху xor al,[rdx] для инъекции? Я не понял, что ты хочешь сделать. Ты решил бы вопрос с установкой игры. Окно игры замораживается когда теряет фокус, а проверка кода не останавливается. Хотя бы просто попробовал бы запустить игру в главном меню или даже до попадания в это меню во время показа видео заставок. Не забудь поставить Вех Дебаггер в CE. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Ты решил бы вопрос с установкой игры.Покупать видюху только из-за одной этой игрушки, нет ни средств, ни желания. Я не понял, что ты хочешь сделать.Делать инъекцию не на этой инструкции xor al,[rdx], а выше её, чтобы в инъекцию не попадал прыжок jmp ACU.exe+55D7AC3. И ещё одна мысль появилась:По идее, что делает этот код:xor al,[rdx]stc Если байты совпадают, то в al всегда будет ноль и stc установит флаг переноса cf в 1. Так может быть сделать просто так:mov al,0stc Может проверка это скушает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Код этой проверки тоже перепроверяется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Мне не удалось обойти защиту, но ковырять не бросил. Время от времени ковыряю. MasterGH - Вопрос такой как попасть на следущую проверку кода после этой xor al,[rdx] Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 мая, 2015 Поделиться Опубликовано 1 мая, 2015 У проверяющей инструкции есть адрес. Добавить его в таблицу и поставить на него брейкпоинт. В окне тут же вылезут инструкции. Так как игра у меня часто вылетает, то я даже не захожу в игру и вообще в неё не играю. После запуска exe, как только пошли ролики сразу alt+tab и открываешь CE и ковыряешь. Даже до меню не доходишь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 мая, 2015 Поделиться Опубликовано 1 мая, 2015 Игру всё-таки установил и не проходя дальше главного меню проверил идею, которую высказывал ранее здесь (вкратце - подмена адреса для проверки).Не сработала - игра вылетает. Если какой-то код прыгает на "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) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 Трейнеры не качал никакие. И читов не писал. у меня игра еле-еле двигается - видюха не соответствует минимальным требованиям.Может пусть Dison, проверит тогда, у него вроде игра идёт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 2 мая, 2015 Автор Поделиться Опубликовано 2 мая, 2015 Может пусть Dison, проверит тогда, у него вроде игра идёт.Я не успел проверить кто то тему подчистил Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 Я подчистил, потому что чужой скрипт из чужого трейнера. Чужие трейнеры используйте по прямому назначению. Да и тема перенесена в открытый раздел. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 2 мая, 2015 Автор Поделиться Опубликовано 2 мая, 2015 А тогда понятно все. MasterGH - А как ты там еще не разобрался с этим обходом по защите? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 А как ты там еще не разобрался с этим обходом по защите? Не, не разобрался. А ты не пробовал искать цепочки указателей на адрес денег, здоровья и прочего? Чем не выход? Не хочешь попробовать? Только что-то на здоровье у меня не получилось рабочий адрес найти.Garik66, чтобы игра меньше тормозила попробуй поставить все поминимум в настройках и минимальное возможное разрешение и 16 битный режим на монитор. Например, можешь поставить разрешение 1024 на 768 на дисплей и разрешение игры 640 на 480. Может даже сможешь поиграть и пройти пролог, ну и читы потестить свои. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 2 мая, 2015 Автор Поделиться Опубликовано 2 мая, 2015 Не, не разобрался. А ты не пробовал искать цепочки указателей на адрес денег, здоровья и прочего? Чем не выход? Не хочешь попробовать? Только что-то на здоровье у меня не получилось рабочий адрес найти.Я пытался найти указатели, нет у меня вообще нечего не получилось.Да и вообще пробовал как авто-поиском искать так и вручную и нечего не вышло.Может что-то и не то делаю.В других играх получалось найти цепочки указателей.Но опять же не факт что они будут постоянно работать... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения