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

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

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

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

 

P.S.

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

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

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

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

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

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