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

[age of civilizations 2] Cheat Engine и Java Что то идет не так.


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

Пытаюсь взломать одну Java игру, вроде бы значения нахожу, инструкцию, которая меняет значение нахожу, делаю типичный инжект кода со скриптом. Но оказалось что хитрая Java постоянно меняет адреса инструкций(слыхал, что это сделано ради оптимизации). Я ставлю jmp, игра следует за ним и выполняет все, что после jmp-а но потом java решает "сдвинуть" память и в результате чего мой jmp затирается херней да и нужная инструкция находится по другому адресу теперь.  В лучшем случае чит просто перестает работать а в худшем - краш. Смена адресов инструкций происходит где то  раз в 3-5 минут. Это можно как то решить?

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

1 час назад, MEDBEDb сказал:

Он же вроде автоматом ставится в скрипт?

А, по-видимому я не так понял ТС.

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

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

1 час назад, Garik66 сказал:

А, по-видимому я не так понял ТС.

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

Если шаблоны из CE не берет, либо Full Injection... Ещё если я правильно понял, игра сдвигает инструкции по мере выполнения, а скрипт про то, что игра сдвигает инструкции не знает, ну если я правильно понял.

Если это так, то нужно как-то найти переменную таймера перемещения инструкций, после чего заставить CE, при значении этой переменной равной нулю перезапустить скрипт, используя AOBScan 

 

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

21 минуту назад, MEDBEDb сказал:

игра сдвигает инструкции

Эт я то понял при втором прочтении (какой- нить call edx - инструкция меняет адрес). Первоночально сбила с толку фраза ТС:

6 часов назад, Sanic сказал:

Я ставлю jmp, игра следует за ним и выполняет все,

зачем эта информация, я так и не понял.

 

Но что тут гадать без участия ТС.

А так вообще-то возможно. что он просто пишет без аоба по адресам (старый СЕ например стоит и смотрел старые уроки)
 

 

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

Сори, если неясно рассказал

Дело вот в чем: пытаюсь взломать например золото в 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" где игра уже не ждет того кода, иногда вызывая вылет.

 

 

 

 

 

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

1 час назад, Sanic сказал:

По скольку адрес с золотом 8-байтный но игра 32-битная, с ним работают 2 инструкции, каждая обрабатывает половину адреса

Не адрес а значение золота у тебя 8 байт.

1 час назад, Sanic сказал:

игра затерла мой jmp но инструкции на свое место не вернулись.

Больше похоже на защиту .

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

57 минут назад, Garik66 сказал:

Не адрес а значение золота у тебя 8 байт.

Упс, оговорочка)

58 минут назад, Garik66 сказал:

Больше похоже на защиту .

Врядли, я даже просто находил инструкцию и наблюдал за ней, и пару минут  целая функция перезаписывалась. Это вроде особенность работы джавы, она использует JIT-компиляцию(типо компиляция "налету",) для оптимизации. Эта игра была сделана одним человеком, врядли он бы стал парится над античитом.

П.

Я лично первый раз с таким сталкиваюсь.

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

Эмм... Знаешь что? Эм... Конечно идея скорее всего очень и очень тупая, но по скольку это реально похоже на защиту, попробуй ка ты поставить бряк на чтение значения твоего золота и отойди на 2-3 минуты... Потом посмотри, если инструкции отъехали то посмотри окно чтения инструкций, если там появилась новая инструкция чтения, которая использовалась только 1 раз, то это из функции защиты игры... Попробуй сломать эту функцию, либо расковырять её в IDA и отключить.

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

25 минут назад, MEDBEDb сказал:

попробуй ка ты поставить бряк на чтение значения твоего золота

не на значения золота, а на адрес инструкции.

6 часов назад, Sanic сказал:

и пару минут  целая функция перезаписывалась

Некоторые из проверочных инструкций срабатывают и через 40 минут - посмотри ТЫК 

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

8 часов назад, Sanic сказал:

Вроде скрипт работает, золото накручено

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

 

зеленая - правильно  image.png.b6bc013fb44dffa964cc57c2f1ab0351.pngimage.png.0c8640502f9b80ad2f32bdeabecf1880.png это не правильно,

 

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

18 минут назад, Garik66 сказал:

PS: хотя это наверное показано соотношение доходов и расходов.

Да, то соотношение доходов и расходов, причина, по которой при 999 999 золота такой большой минус, это инфляция, которая появляется у тебя при накоплении огромного количества золота ?

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

3 минуты назад, Sanic сказал:

Да, то соотношение доходов и расходов, причина, по которой при 999 999 золота такой большой минус, это инфляция, которая появляется у тебя при накоплении огромного количества золота ?

Сейчас выложу маненький видос.

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

36 минут назад, Sanic сказал:

Да

Блин. выбрал инструкцию, которая появляется только через (больше десятка) несколько ходов.

Так что видео наверное не будет.

Короче я скачал игру (благо маленькая). но она у меня 64 битная.

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

То скрипт работает постоянно. 

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

6 минут назад, Garik66 сказал:

Блин. выбрал инструкцию, которая появляется только через (больше десятка) несколько ходов.

Так что видео наверное не будет.

Короче я скачал игру (благо маленькая). но она у меня 64 битная.

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

То скрипт работает постоянно. 

Инструкции вроде меняют адрес, только если пропускать ходы, можешь нажимать на плюс возле даты(пока не напишет "Speed 6" и затем жми "ентер" для включения быстрого автопропуска ходов, чтобы вручную не пропускать. У меня инструкции прыгают через 50-100 ходов. На моих скринах тоже видно номера ходов.

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

2 часа назад, MEDBEDb сказал:

Эмм... Знаешь что? Эм... Конечно идея скорее всего очень и очень тупая, но по скольку это реально похоже на защиту, попробуй ка ты поставить бряк на чтение значения твоего золота и отойди на 2-3 минуты... Потом посмотри, если инструкции отъехали то посмотри окно чтения инструкций, если там появилась новая инструкция чтения, которая использовалась только 1 раз, то это из функции защиты игры... Попробуй сломать эту функцию, либо расковырять её в IDA и отключить.

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

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

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
Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Garik66 сказал:

Обещанный видос:

Попробуй в одной катке пропускать хода. 

 

Заснял видео как игра меняет адреса инструкций, в начале я фигню делал, пытался найти нормальную инструкцию, промотай до десятой минуты, именно в тот момент инструкции переписываются.

 

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

  • 4 месяца спустя...
×
×
  • Создать...

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

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