• Объявления

    • Garik66

      Пользователям форума   05.11.2017

      Прошу обратить внимание на эту тему (чтобы увидеть ссылку, войдите в объявление - нажмите на заголовок):   
SergBrNord

Saints Row: Gat out of Hell

7 сообщений в этой теме

Кто-нибудь взламывал в этой игре выносливость?

Пробовал неоднократно. При отсеивании остаются 2 динамических значения, отвечающих за камеру и одно статическое, отвечающее за отрисовку шкалы.

 

P.S.

Т.к. игра мало отличается от 4 части, думаю можно рассмотреть процесс и на Saints Row 4.

0

Поделиться сообщением


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

Там вроде бы значение выносливости в integer, 0 когда заполнена, когда уменьшается 1, при восстановлении 3 или 4 точно сказать не могу.

Изменено пользователем partoftheworlD
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 17.07.2016в16:08, SergBrNord сказал:

Кто-нибудь взламывал в этой игре выносливость?

Качнул, поискал, самый долгий поиск неизвестное/float(4 байта)/изменилось - делать влом.

Поэтому нашёл только саму полоску выносливости (видимое значение:

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

{ Game   : SaintsRowGatOutOfHell.exe
  Version: репак от Механиков
  Date   : 2016-07-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(PoloskaStamina,SaintsRowGatOutOfHell.exe,D9 99 DC 00 00 00 8B E5 5D C2 08 00 8B) // should be unique
alloc(newmem,$1000)
label(code)
label(return)

newmem:

code:
  fstp dword ptr [ecx+000000DC]
  mov dword ptr [ecx+000000DC],(float)3.143052578
  jmp return

PoloskaStamina:
  jmp code
  nop
return:
registersymbol(PoloskaStamina)

[DISABLE]

PoloskaStamina:
  db D9 99 DC 00 00 00

unregistersymbol(PoloskaStamina)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SaintsRowGatOutOfHell.exe"+C0A3E5

"SaintsRowGatOutOfHell.exe"+C0A3C8: D9 5D 08              -  fstp dword ptr [ebp+08]
"SaintsRowGatOutOfHell.exe"+C0A3CB: D9 45 08              -  fld dword ptr [ebp+08]
"SaintsRowGatOutOfHell.exe"+C0A3CE: D9 99 DC 00 00 00     -  fstp dword ptr [ecx+000000DC]
"SaintsRowGatOutOfHell.exe"+C0A3D4: 8B E5                 -  mov esp,ebp
"SaintsRowGatOutOfHell.exe"+C0A3D6: 5D                    -  pop ebp
"SaintsRowGatOutOfHell.exe"+C0A3D7: C2 08 00              -  ret 0008
"SaintsRowGatOutOfHell.exe"+C0A3DA: DD 42 08              -  fld qword ptr [edx+08]
"SaintsRowGatOutOfHell.exe"+C0A3DD: 32 C0                 -  xor al,al
"SaintsRowGatOutOfHell.exe"+C0A3DF: D9 5D 08              -  fstp dword ptr [ebp+08]
"SaintsRowGatOutOfHell.exe"+C0A3E2: D9 45 08              -  fld dword ptr [ebp+08]
// ---------- INJECTING HERE ----------
"SaintsRowGatOutOfHell.exe"+C0A3E5: D9 99 DC 00 00 00     -  fstp dword ptr [ecx+000000DC]
// ---------- DONE INJECTING  ----------
"SaintsRowGatOutOfHell.exe"+C0A3EB: 8B E5                 -  mov esp,ebp
"SaintsRowGatOutOfHell.exe"+C0A3ED: 5D                    -  pop ebp
"SaintsRowGatOutOfHell.exe"+C0A3EE: C2 08 00              -  ret 0008
"SaintsRowGatOutOfHell.exe"+C0A3F1: 8B 42 08              -  mov eax,[edx+08]
"SaintsRowGatOutOfHell.exe"+C0A3F4: 8B 52 0C              -  mov edx,[edx+0C]
"SaintsRowGatOutOfHell.exe"+C0A3F7: 89 45 F8              -  mov [ebp-08],eax
"SaintsRowGatOutOfHell.exe"+C0A3FA: 8B C2                 -  mov eax,edx
"SaintsRowGatOutOfHell.exe"+C0A3FC: 81 E2 FF FF FF 7F     -  and edx,7FFFFFFF
"SaintsRowGatOutOfHell.exe"+C0A402: 89 55 FC              -  mov [ebp-04],edx
"SaintsRowGatOutOfHell.exe"+C0A405: DF 6D F8              -  fild qword ptr [ebp-08]
}

 

 Попробовал от неё по коду полазить, но не получилось тоже. Кстати там в регионе памяти (или в структуре) все бары и на здоровье и на стамину, ну и т.д. они все в одном месте.

Ну и от нечего делать написал скрипт на патроны "Unfinite ammo (No reload)":

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

{ Game   : SaintsRowGatOutOfHell.exe
  Version: 
  Date   : 2016-07-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Ammo,SaintsRowGatOutOfHell.exe,0F B7 91 AA 00 00 00 29) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Ammo)

newmem:
  movzx edx,word ptr [ecx+000000AA]
  add [edi],edx
  sub [edi],edx


code:
  jmp return

Ammo:
  jmp newmem
  db 90 90 90 90
return:

[DISABLE]
Ammo:
  db 0F B7 91 AA 00 00 00 29 17

unregistersymbol(Ammo)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SaintsRowGatOutOfHell.exe"+705214

"SaintsRowGatOutOfHell.exe"+7051F6: 56                       -  push esi
"SaintsRowGatOutOfHell.exe"+7051F7: E8 B4 2B FE FF           -  call SaintsRowGatOutOfHell.exe+6E7DB0
"SaintsRowGatOutOfHell.exe"+7051FC: 83 C4 08                 -  add esp,08
"SaintsRowGatOutOfHell.exe"+7051FF: 84 C0                    -  test al,al
"SaintsRowGatOutOfHell.exe"+705201: 75 43                    -  jne SaintsRowGatOutOfHell.exe+705246
"SaintsRowGatOutOfHell.exe"+705203: 83 F9 24                 -  cmp ecx,24
"SaintsRowGatOutOfHell.exe"+705206: 75 06                    -  jne SaintsRowGatOutOfHell.exe+70520E
"SaintsRowGatOutOfHell.exe"+705208: 80 7B 14 00              -  cmp byte ptr [ebx+14],00
"SaintsRowGatOutOfHell.exe"+70520C: 75 38                    -  jne SaintsRowGatOutOfHell.exe+705246
"SaintsRowGatOutOfHell.exe"+70520E: 8B 8D 44 FA FF FF        -  mov ecx,[ebp-000005BC]
// ---------- INJECTING HERE ----------
"SaintsRowGatOutOfHell.exe"+705214: 0F B7 91 AA 00 00 00     -  movzx edx,word ptr [ecx+000000AA]
// ---------- DONE INJECTING  ----------
"SaintsRowGatOutOfHell.exe"+70521B: 29 17                    -  sub [edi],edx
"SaintsRowGatOutOfHell.exe"+70521D: EB 27                    -  jmp SaintsRowGatOutOfHell.exe+705246
"SaintsRowGatOutOfHell.exe"+70521F: F3 0F 10 05 30 DE 6B 01  -  movss xmm0,[SaintsRowGatOutOfHell.exe+12BDE30]
"SaintsRowGatOutOfHell.exe"+705227: 8B 07                    -  mov eax,[edi]
"SaintsRowGatOutOfHell.exe"+705229: 0F 5A C0                 -  cvtps2pd xmm0,xmm0
"SaintsRowGatOutOfHell.exe"+70522C: F2 0F 59 05 50 2B 62 01  -  mulsd xmm0,[SaintsRowGatOutOfHell.exe+1222B50]
"SaintsRowGatOutOfHell.exe"+705234: 33 D2                    -  xor edx,edx
"SaintsRowGatOutOfHell.exe"+705236: F2 0F 2C C8              -  cvttsd2si ecx,xmm0
"SaintsRowGatOutOfHell.exe"+70523A: 2B C1                    -  sub eax,ecx
"SaintsRowGatOutOfHell.exe"+70523C: 85 C0                    -  test eax,eax
}

 

Я только в самом начале, где ГГ падает с девушкой в Ад.

Посмотрел видео-прохождение, ну кто в такое играет?

Мне точно не понравится. Так что я искать не буду - влом.

 

А так совет, если писал GodMod, попробуй в структуре ГГ посмотреть, может стамина там рядом со здоровьем, как и во всех играх.   

Изменено пользователем Garik66
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 17.07.2016в16:08, SergBrNord сказал:

Кто-нибудь взламывал в этой игре выносливость?

Я как то давненько её смотрел, так же нашел 2 адреса зеленых, но они визуальные. Решил оставить на потом, но что то до сех пор и не смотрел более. Надо поглядеть утречком если игр новых не будет :) 

Минут 40 ушло на это дело - задумано конечно как то чудно. 

Я делаю так скрипт - привык, а вы там можете 0 писать и в обще переделывать его уже на своё усмотрение. 

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

[ENABLE]
aobscanmodule(Stamina,SaintsRowGatOutOfHell.exe,A1xxxxxxxx83xxxx0F87xxxxxxxxxxFFxxxxxxxxxxxxxxB9)
alloc(newmem,$1000)
label(code)
label(return)
newmem:
  xor eax,eax
  mov [SaintsRowGatOutOfHell.exe+2AB17D4],eax
code:
  mov eax,[SaintsRowGatOutOfHell.exe+2AB17D4]
  jmp return
Stamina:
  jmp newmem
return:
registersymbol(Stamina)
[DISABLE]
Stamina:
  db A1 D4 17 EB 02
unregistersymbol(Stamina)
dealloc(newmem)

 

Значение визуальное 9000 это значение там загружается и делится на вычтенное как бы, а с верху по коду идет проверка. 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, LIRW сказал:

Минут 40 ушло на это дело

Молодца!!!

Но partoftheworID, как оказалось всё правильно написал здесь.

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

Т.е. нужно было проводить поиск: точное значение/4 байта / 0 - при полной стамине, пробежался, перешёл в СЕ (игра автоматически на паузе) отсев по значению 3, ну и т.д.

А так получаются: 0 - при полной стамине,

                            1 - когда стамина падает

                            3 - пауза (или когда в игре вы остановились, то пару секунд, тоже троойка)

                            4 - когда стамина растёт.  

 

ЗЫ: Но это не сама Stamina, а флаг, который определяет с какой процедурой будет работать адрес Staminы, нужно будет посмотреть теперь по коду и выйти на саму Staminу, думаю она сама во float. 

Изменено пользователем Garik66
2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, LIRW сказал:

Я делаю так скрипт - привык, а вы там можете 0 писать

Разница между инструкциями mov eax,0 и xor eax,eax, вот нашёл очень подробный ответ:

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

Это не коды, а мнемоники инструкций процессоров семейства i80x86.
Обе эти инструкции используются для обнуления регистра eax.

mov eax, 0 просто загружает в регистр ноль.
xor eax, eax выполняет над содержимым регистра операцию поразрядное исключающее или или по-другому функцию XOR. Если соответствующие разряды операндов равны, то результирующий бит будет равен нулю. А так как оба операнда - один и тот же регистр (eax := eax XOR eax), то в результате получится 32-разрядный ноль, как и в случае с mov.

Разница между этими командами:
- в размере кода: mov eax, 0 на три байта длиннее, чем xor eax, eax.
- в оказываемом влиянии на регистр флагов процессора: mov не изменяет никакие флаги, xor сбрасывает CF, AF, SF и устанавливает ZF и PF.
- во времени выполнения команды: mov и xor выполняются разное количество тактов, но на современных суперскалярных процессорах эта разница сходит на нет. Обе инструкции полностью выполнятся, находясь ещё в самом начале конвейера.

Чаще используется xor eax, eax просто потому что она короче и по старой привычке, так как когда-то давно она выполнялась быстрее mov.
mov eax, 0 используют, когда необходимо сохранить состояния флагов после выполнения предыдущей операции.

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

Взято отсюда.

1

Поделиться сообщением


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

Спасибо за помощь. 

А насчёт значения - у меня оно лежало в смещении, ЕМНИП, [ah-4239]. Правда дальше разбирать игру не стал.

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас