SergBrNord Опубликовано 17 июля, 2016 Поделиться Опубликовано 17 июля, 2016 Кто-нибудь взламывал в этой игре выносливость? Пробовал неоднократно. При отсеивании остаются 2 динамических значения, отвечающих за камеру и одно статическое, отвечающее за отрисовку шкалы. P.S. Т.к. игра мало отличается от 4 части, думаю можно рассмотреть процесс и на Saints Row 4. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 17 июля, 2016 Поделиться Опубликовано 17 июля, 2016 (изменено) Там вроде бы значение выносливости в integer, 0 когда заполнена, когда уменьшается 1, при восстановлении 3 или 4 точно сказать не могу. Изменено 17 июля, 2016 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июля, 2016 Поделиться Опубликовано 18 июля, 2016 (изменено) В 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, попробуй в структуре ГГ посмотреть, может стамина там рядом со здоровьем, как и во всех играх. Изменено 18 июля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 18 июля, 2016 Поделиться Опубликовано 18 июля, 2016 В 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 июля, 2016 Поделиться Опубликовано 19 июля, 2016 (изменено) 14 часа назад, LIRW сказал: Минут 40 ушло на это дело Молодца!!! Но partoftheworID, как оказалось всё правильно написал здесь. Я пробовал его метод, но как теперь выяснил у меня была ошибка при поиске - при постановке игры на паузу, значение становится равным 3, а я ставил либо 1, когда стамина падала, либо 4 - когда росла. Т.е. нужно было проводить поиск: точное значение/4 байта / 0 - при полной стамине, пробежался, перешёл в СЕ (игра автоматически на паузе) отсев по значению 3, ну и т.д. А так получаются: 0 - при полной стамине, 1 - когда стамина падает 3 - пауза (или когда в игре вы остановились, то пару секунд, тоже троойка) 4 - когда стамина растёт. ЗЫ: Но это не сама Stamina, а флаг, который определяет с какой процедурой будет работать адрес Staminы, нужно будет посмотреть теперь по коду и выйти на саму Staminу, думаю она сама во float. Изменено 19 июля, 2016 пользователем Garik66 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 июля, 2016 Поделиться Опубликовано 19 июля, 2016 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 25 июля, 2016 Автор Поделиться Опубликовано 25 июля, 2016 Спасибо за помощь. А насчёт значения - у меня оно лежало в смещении, ЕМНИП, [ah-4239]. Правда дальше разбирать игру не стал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения