Sanic Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 Пытаюсь взломать одну Java игру, вроде бы значения нахожу, инструкцию, которая меняет значение нахожу, делаю типичный инжект кода со скриптом. Но оказалось что хитрая Java постоянно меняет адреса инструкций(слыхал, что это сделано ради оптимизации). Я ставлю jmp, игра следует за ним и выполняет все, что после jmp-а но потом java решает "сдвинуть" память и в результате чего мой jmp затирается херней да и нужная инструкция находится по другому адресу теперь. В лучшем случае чит просто перестает работать а в худшем - краш. Смена адресов инструкций происходит где то раз в 3-5 минут. Это можно как то решить? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 4 минуты назад, Sanic сказал: Это можно как то решить? А аобскан? Не? Ссылка на комментарий Поделиться на другие сайты Поделиться
MEDBEDb Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 2 часа назад, Garik66 сказал: А аобскан? Не? Он же вроде автоматом ставится в скрипт? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 1 час назад, MEDBEDb сказал: Он же вроде автоматом ставится в скрипт? А, по-видимому я не так понял ТС. Ну пусть хотя-бы свой скрипт выложит, чтобы понятнее стало. (может он без аоба деляет) Ссылка на комментарий Поделиться на другие сайты Поделиться
MEDBEDb Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 1 час назад, Garik66 сказал: А, по-видимому я не так понял ТС. Ну пусть хотя-бы свой скрипт выложит, чтобы понятнее стало. (может он без аоба деляет) Если шаблоны из CE не берет, либо Full Injection... Ещё если я правильно понял, игра сдвигает инструкции по мере выполнения, а скрипт про то, что игра сдвигает инструкции не знает, ну если я правильно понял. Если это так, то нужно как-то найти переменную таймера перемещения инструкций, после чего заставить CE, при значении этой переменной равной нулю перезапустить скрипт, используя AOBScan Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 21 минуту назад, MEDBEDb сказал: игра сдвигает инструкции Эт я то понял при втором прочтении (какой- нить call edx - инструкция меняет адрес). Первоночально сбила с толку фраза ТС: 6 часов назад, Sanic сказал: Я ставлю jmp, игра следует за ним и выполняет все, зачем эта информация, я так и не понял. Но что тут гадать без участия ТС. А так вообще-то возможно. что он просто пишет без аоба по адресам (старый СЕ например стоит и смотрел старые уроки) Ссылка на комментарий Поделиться на другие сайты Поделиться
MEDBEDb Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 3 часа назад, Garik66 сказал: зачем эта информация, я так и не понял Чтоб донести, что в принципе, скрипт работает, только вот... Не долго. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 1 января, 2019 Автор Поделиться Опубликовано 1 января, 2019 Сори, если неясно рассказал Дело вот в чем: пытаюсь взломать например золото в java-игре age of civilizations 2 https://prnt.sc/m1yhkr Нахожу значение, выясняю, какие инструкции обращаются к значению моего золота, решаю инжектить на той, которая работает только с золотом игрока, чтобы не пришлось отфильтровывать среди 400 ботов. https://prnt.sc/m1yjls Вижу, что инструкция находится в динамической памяти, поэтому использую AOB injection. Вот мой скрипт: Спойлер { Game : javaw.exe Version: Date : 2019-01-01 Author : Home This script does blah blah blah } [ENABLE] aobscan(MONEY,8B 72 08 8B 7A 0C B8) // should be unique alloc(newmem,$100) label(code) label(return) label(gold_base) registersymbol(gold_base) //По скольку адрес с золотом 8-байтный но игра 32-битная, с ним работают 2 инструкции, каждая обрабатывает половину адреса // [edx+08] - первая 4-байтная половина, а [edx+0C] - вторая 4-байтная половина newmem: mov [gold_base],edx //делаю указатель на золото игрока(моё золото) mov [edx+08],#999999 // накручиваю себе лям золота записав в первую 4-байтную половину 999999 mov [edx+0C],0 //обнуляю другую половину от греха подальше, а то без этого иногда игра насчитывала мне -18 лямов вместо желаемых 999 тысяч code: mov esi,[edx+08] mov edi,[edx+0C] jmp return gold_base: dd 0 //выделяю 4-байтный адрес для указателя MONEY: jmp newmem nop return: registersymbol(MONEY) [DISABLE] MONEY: db 8B 72 08 8B 7A 0C unregistersymbol(MONEY) unregistersymbol(gold_base) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 024E9CE1 ""+24E9CB2: B8 FF FF FF FF - mov eax,FFFFFFFF ""+24E9CB7: E8 44 1D 81 FF - call 01CFBA00 ""+24E9CBC: 83 F8 00 - cmp eax,00 ""+24E9CBF: 0F 84 12 00 00 00 - je 024E9CD7 ""+24E9CC5: 81 78 04 80 4F BD 1C - cmp [eax+04],1CBD4F80 ""+24E9CCC: 0F 85 D8 12 00 00 - jne 024EAFAA ""+24E9CD2: E9 00 00 00 00 - jmp 024E9CD7 ""+24E9CD7: 8B D0 - mov edx,eax ""+24E9CD9: 8B C2 - mov eax,edx ""+24E9CDB: 8B 90 B4 00 00 00 - mov edx,[eax+000000B4] // ---------- INJECTING HERE ---------- ""+24E9CE1: 8B 72 08 - mov esi,[edx+08] ""+24E9CE4: 8B 7A 0C - mov edi,[edx+0C] // ---------- DONE INJECTING ---------- ""+24E9CE7: B8 00 00 00 00 - mov eax,00000000 ""+24E9CEC: BA 00 00 00 00 - mov edx,00000000 ""+24E9CF1: 2B F0 - sub esi,eax ""+24E9CF3: 1B FA - sbb edi,edx ""+24E9CF5: 0F 8D 13 02 00 00 - jnl 024E9F0E ""+24E9CFB: BA B0 5E 5F 14 - mov edx,145F5EB0 ""+24E9D00: 64 8B 0C 25 00 00 00 00 - mov ecx,fs:[00000000] ""+24E9D08: 8B 49 F4 - mov ecx,[ecx-0C] ""+24E9D0B: 8B 41 34 - mov eax,[ecx+34] ""+24E9D0E: 8D 78 18 - lea edi,[eax+18] } Вроде скрипт работает, золото накручено, указатель сделан https://prnt.sc/m1ypaj Но теперь я запускаю скрипт и уйду в АФК на 2-3 минуты(Включу автопропуск ходов ибо игра пошаговая) И через время я замечаю, что золото начало уменьшатся, захожу в дизассемблер, чтобы посмотреть, что случилось. А случилось то, что игра сама убрала мой jmp(Cheat engine все еще видит скрипт активированным), но в этот раз мне крупно повезло, инструкции почему-то остались на месте. https://prnt.sc/m1yr9t Перезапускаю скрипт и включаю еще автопропуск ходов на пару минут https://prnt.sc/m1yuw8 Прошло еще пару минут, золото опять начало уменьшатся, в этот раз повезло меньше, игра затерла мой jmp но инструкции на свое место не вернулись. https://prnt.sc/m1yw2r Большую проблему устраивает так же то, что если я отключу(уже нерабочий) скрипт, Cheat engine попытается восстановить код в адрес, помеченый как "MONEY" где игра уже не ждет того кода, иногда вызывая вылет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 января, 2019 Поделиться Опубликовано 1 января, 2019 1 час назад, Sanic сказал: По скольку адрес с золотом 8-байтный но игра 32-битная, с ним работают 2 инструкции, каждая обрабатывает половину адреса Не адрес а значение золота у тебя 8 байт. 1 час назад, Sanic сказал: игра затерла мой jmp но инструкции на свое место не вернулись. Больше похоже на защиту . Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 2 января, 2019 Автор Поделиться Опубликовано 2 января, 2019 57 минут назад, Garik66 сказал: Не адрес а значение золота у тебя 8 байт. Упс, оговорочка) 58 минут назад, Garik66 сказал: Больше похоже на защиту . Врядли, я даже просто находил инструкцию и наблюдал за ней, и пару минут целая функция перезаписывалась. Это вроде особенность работы джавы, она использует JIT-компиляцию(типо компиляция "налету",) для оптимизации. Эта игра была сделана одним человеком, врядли он бы стал парится над античитом. П. Я лично первый раз с таким сталкиваюсь. Ссылка на комментарий Поделиться на другие сайты Поделиться
MEDBEDb Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 (изменено) Эмм... Знаешь что? Эм... Конечно идея скорее всего очень и очень тупая, но по скольку это реально похоже на защиту, попробуй ка ты поставить бряк на чтение значения твоего золота и отойди на 2-3 минуты... Потом посмотри, если инструкции отъехали то посмотри окно чтения инструкций, если там появилась новая инструкция чтения, которая использовалась только 1 раз, то это из функции защиты игры... Попробуй сломать эту функцию, либо расковырять её в IDA и отключить. Изменено 2 января, 2019 пользователем MEDBEDb Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 25 минут назад, MEDBEDb сказал: попробуй ка ты поставить бряк на чтение значения твоего золота не на значения золота, а на адрес инструкции. 6 часов назад, Sanic сказал: и пару минут целая функция перезаписывалась Некоторые из проверочных инструкций срабатывают и через 40 минут - посмотри ТЫК Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 8 часов назад, Sanic сказал: Вроде скрипт работает, золото накручено Судя по скрину ( у тебя дельта золота красная.) ты нашёл либо видимое значение, либо за правильное золото отвечает именно дельта золота (вторая цифра вверху слева) - вот её, я думаю, и нужно искать. зеленая - правильно это не правильно, Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 PS: хотя это наверное показано соотношение доходов и расходов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 2 января, 2019 Автор Поделиться Опубликовано 2 января, 2019 18 минут назад, Garik66 сказал: PS: хотя это наверное показано соотношение доходов и расходов. Да, то соотношение доходов и расходов, причина, по которой при 999 999 золота такой большой минус, это инфляция, которая появляется у тебя при накоплении огромного количества золота ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 3 минуты назад, Sanic сказал: Да, то соотношение доходов и расходов, причина, по которой при 999 999 золота такой большой минус, это инфляция, которая появляется у тебя при накоплении огромного количества золота ? Сейчас выложу маненький видос. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 36 минут назад, Sanic сказал: Да Блин. выбрал инструкцию, которая появляется только через (больше десятка) несколько ходов. Так что видео наверное не будет. Короче я скачал игру (благо маленькая). но она у меня 64 битная. Адреса золота да меняются, адреса инструкций не меняются, после перезагрузки игры само-собой меняются и чуть чуть меняется сигнатура, если выкинуть байты из сигны, которые меняются. То скрипт работает постоянно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 2 января, 2019 Автор Поделиться Опубликовано 2 января, 2019 6 минут назад, Garik66 сказал: Блин. выбрал инструкцию, которая появляется только через (больше десятка) несколько ходов. Так что видео наверное не будет. Короче я скачал игру (благо маленькая). но она у меня 64 битная. Адреса золота да меняются, адреса инструкций не меняются, после перезагрузки игры само-собой меняются и чуть чуть меняется сигнатура, если выкинуть байты из сигны, которые меняются. То скрипт работает постоянно. Инструкции вроде меняют адрес, только если пропускать ходы, можешь нажимать на плюс возле даты(пока не напишет "Speed 6" и затем жми "ентер" для включения быстрого автопропуска ходов, чтобы вручную не пропускать. У меня инструкции прыгают через 50-100 ходов. На моих скринах тоже видно номера ходов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 2 января, 2019 Автор Поделиться Опубликовано 2 января, 2019 2 часа назад, MEDBEDb сказал: Эмм... Знаешь что? Эм... Конечно идея скорее всего очень и очень тупая, но по скольку это реально похоже на защиту, попробуй ка ты поставить бряк на чтение значения твоего золота и отойди на 2-3 минуты... Потом посмотри, если инструкции отъехали то посмотри окно чтения инструкций, если там появилась новая инструкция чтения, которая использовалась только 1 раз, то это из функции защиты игры... Попробуй сломать эту функцию, либо расковырять её в IDA и отключить. Вроде по приколу пытался выследить, но особо не разбирался и решил занопить то, что переписывает инструкции напрямую, ну и как ожидается, краш игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 января, 2019 Поделиться Опубликовано 2 января, 2019 1 час назад, Sanic сказал: Вроде по приколу Обещанный видос: Скрипт: Спойлер { Game : javaw.exe Version: 1.0 Date : 01-02-19 Author : Garik66 Version CE: 6.5 Make by aamaker Lua plagin Version 2.4.0.G66.1 :) [EN] Technical support: http://forum.cheatengine.org/viewtopic.php?p=5645967 [RU] Техническая поддержка: https://forum.gamehacklab.ru/index.php?/topic/1415-plugin-aa-maker-создание-аа-скриптов } [ENABLE] aobscan(gold,48xxxxxx48xxxxxxxxxxxxxxxxxxxx3bxx48xxxxxxxxxxxxxxxxxx48xxxxxxxxxxxxxxxxxx0f8dxxxxxxxx48xxxxxxxxxxxxxxxxxx48xxxxxx48xxxxxx48xxxxxx0f8dxxxxxxxx48xxxxxxxxxxxxxxxxxx49) alloc(newmem,$1000,033F1014) label(code) label(return) label(P_gold) registersymbol(P_gold) registersymbol(gold) newmem: lea esi,[rdx+10] mov [P_gold],esi //add [rdx+10],#100 mov [rdx+10],#666666 code: mov rsi,[rdx+10] mov rdx,0000000000000000 jmp return P_gold: dd 0 gold: jmp newmem db 90 90 90 90 90 90 90 90 90 90 return: [DISABLE] gold: db 48 8B 72 10 48 BA 00 00 00 00 00 00 00 00 unregistersymbol(P_gold) unregistersymbol(gold) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 03D3BD9C ""+3D3BD5C: 48 83 86 98 01 00 00 01 - add qword ptr [rsi+00000198],01 ""+3D3BD64: 48 BA 20 62 81 00 00 00 00 00 - mov rdx,0000000000816220 ""+3D3BD6E: 8B B2 DC 00 00 00 - mov esi,[rdx+000000DC] ""+3D3BD74: 83 C6 08 - add esi,08 ""+3D3BD77: 89 B2 DC 00 00 00 - mov [rdx+000000DC],esi ""+3D3BD7D: 48 BA F0 AC DE 23 00 00 00 00 - mov rdx,0000000023DEACF0 ""+3D3BD87: 81 E6 F8 FF 7F 00 - and esi,007FFFF8 ""+3D3BD8D: 83 FE 00 - cmp esi,00 ""+3D3BD90: 0F 84 7C 6B 00 00 - je 03D42912 ""+3D3BD96: 8B 90 B8 00 00 00 - mov edx,[rax+000000B8] // ---------- INJECTING HERE ---------- ""+3D3BD9C: 48 8B 72 10 - mov rsi,[rdx+10] ""+3D3BDA0: 48 BA 00 00 00 00 00 00 00 00 - mov rdx,0000000000000000 // ---------- DONE INJECTING ---------- ""+3D3BDAA: 48 3B F2 - cmp rsi,rdx ""+3D3BDAD: 48 BA 00 79 A8 23 00 00 00 00 - mov rdx,0000000023A87900 ""+3D3BDB7: 48 BE C8 01 00 00 00 00 00 00 - mov rsi,00000000000001C8 ""+3D3BDC1: 0F 8D 0A 00 00 00 - jnl 03D3BDD1 ""+3D3BDC7: 48 BE D8 01 00 00 00 00 00 00 - mov rsi,00000000000001D8 ""+3D3BDD1: 48 8B 3C 32 - mov rdi,[rdx+rsi] ""+3D3BDD5: 48 8D 7F 01 - lea rdi,[rdi+01] ""+3D3BDD9: 48 89 3C 32 - mov [rdx+rsi],rdi ""+3D3BDDD: 0F 8D E4 0A 00 00 - jnl 03D3C8C7 ""+3D3BDE3: 48 BA 28 10 06 00 01 00 00 00 - mov rdx,0000000100061028 } Видео: javaw.CT 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 2 января, 2019 Автор Поделиться Опубликовано 2 января, 2019 11 часов назад, Garik66 сказал: Обещанный видос: Попробуй в одной катке пропускать хода. Заснял видео как игра меняет адреса инструкций, в начале я фигню делал, пытался найти нормальную инструкцию, промотай до десятой минуты, именно в тот момент инструкции переписываются. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость fataxd Опубликовано 9 мая, 2019 Поделиться Опубликовано 9 мая, 2019 Если по судить логически, то тут как в жизни чем больше людей, тем больше денег. Делаем много людей и у нас много денег. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения