RacoonPatriarch Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Здравствуйте! Использую Cheat Engine 6.7 для взлома параметров персонажа в игре Salt and Sanctuary. Хочу найти адрес с числом например: 39.8 (значение параметра Фокус). Выставляю: найти точное значение, Float. Он находит, а потом изменяю параметр в игре и пишу его в Cheat Engine и жму отсеить, но ничего не выходит и ппрограмма показывает 0 адресов. Пробовал найти его и через неизвестное число. При этом другие параметры (здоровье, запас сил) найти могу и быстро, а нужного мне просто нет! Помогите пожалуйста со взломом) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Попробуй искать диапазоном. Например, в игре у тебя 39.8, ищи диапазон 38-41. Далее значение меняется, допустим, на 26.4, ищешь диапазон 25-28. Тип, конечно же, оставляешь float. Должно получиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 (изменено) Попробовал искать чисто диапазоном. Либо первый же отсев показывает 0, либо после 2-3 остается порядка 750 адресов и опять ноль. Изменено 30 апреля, 2018 пользователем RacoonPatriarch Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 2 часа назад, RacoonPatriarch сказал: При этом другие параметры (здоровье, запас сил) найти могу и быстро Раз это находишь, то можешь попробовать поискать все адреса именно в структуре игрока при условии, что одна структура содержит и здоровье, и запас сил, к примеру, ограничиваешь поиск по диапазону адресов начиная с адреса начала структуры до адреса начала структуры + 4096 байт, после ищешь неизвестное во всех типах и меняя значения отсеиваешь изменилось/не изменилось и лучше искать в типе 4 байт для 32 битной игры, и 8 байт для 64 битной игры. Ограничивать здесь Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 44 минуты назад, partoftheworlD сказал: Раз это находишь, то можешь попробовать поискать все адреса именно в структуре игрока при условии, что одна структура содержит и здоровье, и запас сил, к примеру, ограничиваешь поиск по диапазону адресов начиная с адреса начала структуры до адреса начала структуры + 4096 байт, после ищешь неизвестное во всех типах и меняя значения отсеиваешь изменилось/не изменилось и лучше искать в типе 4 байт для 32 битной игры, и 8 байт для 64 битной игры. Ограничивать здесь Извините пожалуйста) Я тут понял, что мало что понял. А можно по подробнее о том, что вы мне по рекомендовали? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 23 минуты назад, RacoonPatriarch сказал: А можно по подробнее о том, что вы мне по рекомендовали? Ну в общем посмотри находится здоровье и выносливость по одинаковому базовому адресу, если это так, то ты можешь искать значения не во всей памяти, а лишь в структуре игрока, которая находится по базовому адресу здоровья и выносливости, для того чтобы проверить ставишь брейкпоинт на запись на этих адресах(здоровья и выносливости) и смотришь инструкции которые пишут в этот адрес, обычно они вида mov [esi+0xoffset], eax для целочисленных значений и movss [esi+ 0xoffset], xmm0 для значений с плавающей точкой, если в обоих случаях значение esi одинаковое как в данном примере, то можешь ограничить поиск лишь по структуре игрока, а для этого в Memory Scan Options в строке Start пишешь значение из esi, а в Stop значение, которое посчитаешь в калькуляторе т.е. esi + 0x4096, этого должно хватить чтобы охватить всю структуру игрока. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 1 час назад, partoftheworlD сказал: Ну в общем посмотри находится здоровье и выносливость по одинаковому базовому адресу, если это так, то ты можешь искать значения не во всей памяти, а лишь в структуре игрока, которая находится по базовому адресу здоровья и выносливости, для того чтобы проверить ставишь брейкпоинт на запись на этих адресах(здоровья и выносливости) и смотришь инструкции которые пишут в этот адрес, обычно они вида mov [esi+0xoffset], eax для целочисленных значений и movss [esi+ 0xoffset], xmm0 для значений с плавающей точкой, если в обоих случаях значение esi одинаковое как в данном примере, то можешь ограничить поиск лишь по структуре игрока, а для этого в Memory Scan Options в строке Start пишешь значение из esi, а в Stop значение которое посчитаешь в калькуляторе т.е. esi + 0x4096, этого должно хватить чтобы охватить всю структуру игрока. Нашел адреса со здоровьем и выносливостью. Когда смотрю инструкции здоровья, мне показывают пустой список, а в запасе сил они есть. Как быть?) Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 1 минуту назад, RacoonPatriarch сказал: Когда смотрю инструкции здоровья, мне показывают пустой список Получи урон Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 4 минуты назад, partoftheworlD сказал: Получи урон В случае с выносом 3 инструкции [esi+0000008C]. В случае со здоровьем только одна инструкция [edx+60] Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Рекомендую сходить на наш канал и посмотреть видео из цикла "Взлом игр от А от Я" 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 6 минут назад, RacoonPatriarch сказал: В случае с выносом 3 инструкции [esi+0000008C]. В случае со здоровьем только одна инструкция [edx+60] Значения у esi и edx равны? Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 3 минуты назад, partoftheworlD сказал: Значения у esi и edx равны? Нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 1 минуту назад, RacoonPatriarch сказал: Нет. Тогда мой вариант не поможет, проще будет игру скачать и посмотреть. Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 1 минуту назад, partoftheworlD сказал: Тогда мой вариант не поможет, проще будет игру скачать и посмотреть. Печально, что не поможет. Простите за наглость, но не могли бы вы глянуть на эту игру? 3 день сижу с этим параметром? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 1 минуту назад, RacoonPatriarch сказал: Простите за наглость, но не могли бы вы глянуть на эту игру? угу, гляну Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 10 минут назад, partoftheworlD сказал: угу, гляну Спасибо большое! Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 2 часа назад, RacoonPatriarch сказал: Спасибо большое! Ну в общем такие дела тут, пришлось даже вики этой игры читать. Фокус рассчитывается как 15 + 5 * Willpower, скрипт ниже изменяет количество очков силы воли(willpower), но тут такое дело, что отладчик от CE не воспринимает некоторый код т.к. игра написана на .Net поэтому нельзя определить откуда, что и где делает это значение, но вчитавшись в вики можно узнать, что выносливость зависит от количества силы воли, а значит вооружившись более подходящим отладчиком dnSpy, можно через выносливость выйти на участок кода который рассчитывает фокус, а так же декомплировать весь код игры. Скрипт. Спойлер { Game : salt.exe Version: Date : 2018-04-30 Author : Alexander This script does blah blah blah } [ENABLE] aobscan(poise,8B 44 82 08 EB 02) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: // eax = 0 Strength // eax = 1 Endurance // eax = 2 Dexterity // eax = 3 Willpower // eax = 4 Magic // eax = 5 Wisdom // cmp eax, 3 jne code mov eax,[edx+eax*4+08] mov eax, #1337 jmp ProjectTower.player.PlayerStats::GetEquipAdjustedStat+33 jmp return code: mov eax,[edx+eax*4+08] jmp ProjectTower.player.PlayerStats::GetEquipAdjustedStat+33 jmp return poise: jmp newmem nop return: registersymbol(poise) [DISABLE] poise: db 8B 44 82 08 EB 02 unregistersymbol(poise) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 115A5E4B ""+115A5E2C: 8B F1 - mov esi,ecx ""+115A5E2E: 8B 5D 08 - mov ebx,[ebp+08] ""+115A5E31: 8B 46 04 - mov eax,[esi+04] ""+115A5E34: 8B 40 04 - mov eax,[eax+04] ""+115A5E37: 3B 45 F0 - cmp eax,[ebp-10] ""+115A5E3A: 7E 15 - jle 115A5E51 ""+115A5E3C: 8B 45 F0 - mov eax,[ebp-10] ""+115A5E3F: 8B 56 04 - mov edx,[esi+04] ""+115A5E42: 3B 42 04 - cmp eax,[edx+04] ""+115A5E45: 0F 83 45 05 00 00 - jae 115A6390 // ---------- INJECTING HERE ---------- ""+115A5E4B: 8B 44 82 08 - mov eax,[edx+eax*4+08] ""+115A5E4F: EB 02 - jmp 115A5E53 // ---------- DONE INJECTING ---------- ""+115A5E51: 33 C0 - xor eax,eax ""+115A5E53: 89 45 EC - mov [ebp-14],eax ""+115A5E56: 33 FF - xor edi,edi ""+115A5E58: 85 DB - test ebx,ebx ""+115A5E5A: 74 2B - je 115A5E87 ""+115A5E5C: A1 7C 38 0E 06 - mov eax,[060E387C] ""+115A5E61: 8B 40 04 - mov eax,[eax+04] ""+115A5E64: 8B 53 0C - mov edx,[ebx+0C] ""+115A5E67: 3B 50 04 - cmp edx,[eax+04] ""+115A5E6A: 0F 83 20 05 00 00 - jae 115A6390 } Ссылка на комментарий Поделиться на другие сайты Поделиться
vagingameh Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Не претендую на правильный asm код. Но значение фокуса в игре нашел. Спойлер При поиске каждый раз создавал новую игру, нового героя. 1-й уровень на корабле. Разумеется адрес динамический?, т.е меняется каждый раз при перезаходе в игру, при переходе на другой уровень и т.д. При этих условиях, искать нужно число float(с точкой) 78. Определил опытным путём. Далее увеличилось, уменьшилось по урокам. Горячие клавиши настроены в CE на паузу, увеличилось, уменьшилось. Одинаковые части в адресах - только буква ЦЭ в конце. Спойлер 2 адреса имеют одинаковое значение(экранное, и реальное). Замораживая поочерёдно можно понять что есть что. Поставил бряк(f5) на чтение на реальное значение 78. Получил 100500 инструкций. При чём срабатывают и добавляются новые и от простоя в игре, и при прыжке, и при прокате через шифт. Просто взял самую 1-ю(это не самый лучший вариант) и запилил скрипт(кривой). Спойлер { Game : salt.exe Version: Date : 2018-04-30 Author : Admin This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscan(focus,D9 82 8C 00 00 00 D9 C0 DF F2 DD D9 7A) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: mov dword ptr [edx+0000008C],(float)78 code: fld dword ptr [edx+0000008C] jmp return focus: jmp newmem nop return: registersymbol(focus) [DISABLE] //code from here till the end of the code will be used to disable the cheat focus: db D9 82 8C 00 00 00 unregistersymbol(focus) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 06628569 06628553: DF F2 - fcomip st(0),st(2) 06628555: DD D9 - fstp st(1) 06628557: 7B 04 - jnp 0662855D 06628559: DD D8 - fstp st(0) 0662855B: EB 09 - jmp 06628566 0662855D: 72 04 - jb 06628563 0662855F: DD D8 - fstp st(0) 06628561: EB 03 - jmp 06628566 06628563: D9 59 28 - fstp dword ptr [ecx+28] 06628566: D9 41 30 - fld dword ptr [ecx+30] // ---------- INJECTING HERE ---------- 06628569: D9 82 8C 00 00 00 - fld dword ptr [edx+0000008C] // ---------- DONE INJECTING ---------- 0662856F: D9 C0 - fld st(0) 06628571: DF F2 - fcomip st(0),st(2) 06628573: DD D9 - fstp st(1) 06628575: 7A 36 - jp 066285AD 06628577: 73 34 - jae 066285AD 06628579: DD D8 - fstp st(0) 0662857B: D9 05 60 5A 13 00 - fld dword ptr [00135A60] 06628581: D8 0D 80 86 62 06 - fmul dword ptr [06628680] 06628587: D8 69 30 - fsubr dword ptr [ecx+30] 0662858A: D9 59 30 - fstp dword ptr [ecx+30] } Держи скрипт на фокус. Твои 3 дня убиты в никуда Теперь наша энергия\фокус не тратится, в игре у себя проверял - работает. Перезапускал игру - не крашит. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 4 минуты назад, vagingameh сказал: Держи скрипт на фокус. У меня не работает на 1.0.0.7, эта инструкция за хп и стамину отвечает в моей игре. Ссылка на комментарий Поделиться на другие сайты Поделиться
vagingameh Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 4 минуты назад, partoftheworlD сказал: У меня не работает на 1.0.0.7 хмм, странно Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 15 минут назад, vagingameh сказал: хмм, странно Фокус это и есть стамина? Я просто другой фокус ломал.? Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 55 минут назад, vagingameh сказал: хмм, странно Скрыть контент Ваш скрипт у меня так же не сработал к несчастью:( 1 час назад, partoftheworlD сказал: Ну в общем такие дела тут Ваш способ работает! Я вот прекрасно зная основные механики игры не додумался накрутить силы воли ? Да и спортивный интерес у меня был: покорить отдельно взятую эту полосочку. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 26 минут назад, RacoonPatriarch сказал: покорить отдельно взятую эту полосочку А что останавливает? Просто если для себя посидеть пару вечеров в ту игру которая нравится и расковырять что-то для интереса — это круто, но всегда есть несколько решений какой-то задачи, вот тебе легкий и быстрый путь, а просто для того чтобы взломать полоску тут надо знать механику игры, а за пару часов можно пройтись только поверхностно даже с вики по игре. 26 минут назад, RacoonPatriarch сказал: Я вот прекрасно зная основные механики игры не додумался накрутить силы воли Это необходимая вещь рассматривать что-то с разных углов и пробовать самые нестандартные методы. Ссылка на комментарий Поделиться на другие сайты Поделиться
RacoonPatriarch Опубликовано 30 апреля, 2018 Автор Поделиться Опубликовано 30 апреля, 2018 1 час назад, partoftheworlD сказал: А что останавливает? Просто если для себя посидеть пару вечеров в ту игру которая нравится и расковырять что-то для интереса — это круто, но всегда есть несколько решений какой-то задачи, вот тебе легкий и быстрый путь, а просто для того чтобы взломать полоску тут надо знать механику игры, а за пару часов можно пройтись только поверхностно даже с вики по игре. Это необходимая вещь рассматривать что-то с разных углов и пробовать самые нестандартные методы. Останавливает незнание языков программирования в большей степени думаю. И отсутствие владения Английским языком на высоком уровне. Нет доступа к огромному пласту информации. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения