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

[Turmoil] Взлом денег в уровне


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

Всем привет, хочу взломать деньги на уровне в Turmoil, чтобы каждый раз не искать их значение, но проблема в том что тип данных у денег Double и у меня возникают проблемы с написанием скрипта. Я также нашёл на форуме тему с такой же проблемой, там я нашёл 3 способа от MasterGH как можно записать значение в Double, на 1-ом способе я и писал скрипт. При бряке на чтение на значение денег есть одна инструкция которая работает всегда, писал скрипт я именно на неё попутно посмотрел работает ли она ещё с чем, а работает она ещё с 8-ю адресами, посмотрел структуру этих адресов но значений которые бы никогда не менялись не нашёл. В игре начальный баланс на уровне всегда 2000$, поэтому решил делать фильтр сравнивая с 2000, получился вот такой скрипт, но игру при запуске скрипта крашит, что именно мне сделать/поправить чтобы игру не крашило?

Скрытый текст

{ Game   : TurmoilSteam.exe
  Version: 
  Date   : 2017-07-27
  Author : misha

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(money)
newmem:
cmp [ebp+00],(double)2000
jne code
fld qword ptr [money]
fstp qword ptr [ebp+00]
code:
  fld qword ptr [ebp+00]
  pop edi
  fstp qword ptr [esi]
  jmp return
  money:
  dq (double)10000
INJECT:
  jmp newmem
  nop
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db DD 45 00 5F DD 1E

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TurmoilSteam.exe"+12881C

"TurmoilSteam.exe"+12880C: 39 78 08              -  cmp [eax+08],edi
"TurmoilSteam.exe"+12880F: 75 5E                 -  jne TurmoilSteam.exe+12886F
"TurmoilSteam.exe"+128811: 5F                    -  pop edi
"TurmoilSteam.exe"+128812: 89 70 08              -  mov [eax+08],esi
"TurmoilSteam.exe"+128815: 5E                    -  pop esi
"TurmoilSteam.exe"+128816: 5D                    -  pop ebp
"TurmoilSteam.exe"+128817: B0 01                 -  mov al,01
"TurmoilSteam.exe"+128819: 5B                    -  pop ebx
"TurmoilSteam.exe"+12881A: 59                    -  pop ecx
"TurmoilSteam.exe"+12881B: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TurmoilSteam.exe"+12881C: DD 45 00              -  fld qword ptr [ebp+00]
"TurmoilSteam.exe"+12881F: 5F                    -  pop edi
"TurmoilSteam.exe"+128820: DD 1E                 -  fstp qword ptr [esi]
// ---------- DONE INJECTING  ----------
"TurmoilSteam.exe"+128822: 5E                    -  pop esi
"TurmoilSteam.exe"+128823: 5D                    -  pop ebp
"TurmoilSteam.exe"+128824: B0 01                 -  mov al,01
"TurmoilSteam.exe"+128826: 5B                    -  pop ebx
"TurmoilSteam.exe"+128827: 59                    -  pop ecx
"TurmoilSteam.exe"+128828: C3                    -  ret 
"TurmoilSteam.exe"+128829: 8B 55 00              -  mov edx,[ebp+00]
"TurmoilSteam.exe"+12882C: 5F                    -  pop edi
"TurmoilSteam.exe"+12882D: 89 16                 -  mov [esi],edx
"TurmoilSteam.exe"+12882F: 5E                    -  pop esi
}

 

 

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

В [ebp+00], может быть все что угодно, т.к это:

 

Регистры ESP и EBP соответственно указатель стека (stack pointer) и указатель базы (base pointer). Эти регистры используются для управления вызовами функций и операциями со стеком. Когда функция вызвана, аргументы функции перемещаются (проталкиваются) в стек и следуют по адресу возврата. Регистр ESP указывает на самый верх стека, поэтому он будет указывать на адрес возврата. Регистр EBP указывает на самый низ стека вызовов. В некоторых случаях компилятор может использовать оптимизацию для удаления регистра EBP как указателя кадра, в этих случаях регистр EBP освобождается и может использоваться точно так же, как любой другой регистр общего назначения.

 

Ищи где кладется значение в ebp+00, в том месте и пиши скрипт.

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

Попробуй так, хотя не уверен

 

409F4000 - это вторая часть от double значения. Первая часть забита нулями. Для второй части смещение ebp+04. Регистр edi свободный, т.к. идет в оригинале pop edi.

 

Скрытый текст

[ENABLE]

aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55)
alloc(newmem, $1000)
alloc(newmem2, $1000)

newmem2:
  money:
    dq (double)10000

newmem:
  cmp [ebp+04],409F4000
  mov edi, ebp
jne code
  mov edi, money
code:
  fld qword ptr [edi]
  pop edi
  fstp qword ptr [esi]
  jmp return
  
INJECT:
  jmp newmem
  nop
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db DD 45 00 5F DD 1E

unregistersymbol(INJECT)
dealloc(newmem)

 

 

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

32 минуты назад, MasterGH сказал:

Попробуй так, хотя не уверен

 

409F4000 - это вторая часть от double значения. Первая часть забита нулями. Для второй части смещение ebp+04. Регистр edi свободный, т.к. идет в оригинале pop edi.

 

  Показать содержимое


[ENABLE]

aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55)
alloc(newmem, $1000)
alloc(newmem2, $1000)

newmem2:
  money:
    dq (double)10000

newmem:
  cmp [ebp+04],409F4000
  mov edi, ebp
jne code
  mov edi, money
code:
  fld qword ptr [edi]
  pop edi
  fstp qword ptr [esi]
  jmp return
  
INJECT:
  jmp newmem
  nop
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db DD 45 00 5F DD 1E

unregistersymbol(INJECT)
dealloc(newmem)

 

 

Работает, большое спасибо! В структуре ebp+00 первая часть забита нулями, если поставить тип на double то значение 2000, получается 409F4000 это те же 2000 только другим значением?

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

Да. Я посмотрел в CE на dobule как на 4 байта и 4 байта. Первые 4 байта из нулей. Вторые 4 байта имеют значение 409F4000. Поэтому можно сравнить 4 байта вместо заморочек с double сравнением.

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

13 минуты назад, MasterGH сказал:

Да. Я посмотрел в CE на dobule как на 4 байта и 4 байта. Первые 4 байта из нулей. Вторые 4 байта имеют значение 409F4000. Поэтому можно сравнить 4 байта вместо заморочек с double сравнением.

Понятно, ещё раз спасибо, почему я не могу добавить никому репутацию за помощь?

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

49 минут назад, misha5343 сказал:

Понятно, ещё раз спасибо, почему я не могу добавить никому репутацию за помощь?

 

Я думаю, это могут делать форумчане из группы Разработчики

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

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

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

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