SER[G]ANT Опубликовано 2 октября, 2010 Поделиться Опубликовано 2 октября, 2010 Собственно, имеем какую-либо из версий этой игры (версия не важна, т.к.,в плане взлома, все одно и то же).Для примера возьмем King's Bounty. Перекрестки миров (NoDVD SKIDROW).Будем ломать ресурсы, а также остальные значения в меню героя.Для всех ресурсов в меню героя, при бряке, выскакивает только одна инструкцияЗначит будем лазить по структуре и искать значения8 - золотоbc - яростьd0 - максимальная ярость1ac - красные руны224 - синие руны29с - зеленые руны6d4 - текущая экспа дракона6e8 - максимальная экспа драконаи т.д.пишем тестовый скрипт[ENABLE] alloc(_newmem,2048) label(_returnhere) label(_originalcode)_newmem: //синие руны //mov [esi+224],63 //99 ;esi, ecx - все равно что использовать. mov [ecx+224],63 //99_originalcode: mov eax,[ecx+08] ret 0004 //jmp _returnherekb.exe+30E70: jmp _newmem nop_returnhere:[DISABLE]kb.exe+30E70: mov eax,[ecx+08] ret 0004 dealloc(_newmem)и игра вылетает.жмакаем кнопку HEX и ищем адрес со значением ECX, находим и ставим бряк.Получаем инструкцию из скрипта Recifense (http://forum.cheatengine.org/viewtopic.php?t=476074)Но т.к. мы не копируем чужие скрипты, то продолжаем находится в тупике, т.к. структуры и тут не спасают нас.Была идея, читать значение регистра ecx, а потом просто прибавлять к нему смещение и записывать значение, но скрипт[ENABLE] alloc(_newmem,2048) label(_returnhere) label(_originalcode) label(_addr) registersymbol(_addr)_newmem: mov [_addr],ecx_originalcode: mov eax,[ecx+08] ret 0004 //jmp _returnhere_addr: dd 0kb.exe+30E70: jmp _newmem nop_returnhere:[DISABLE]kb.exe+30E70: mov eax,[ecx+08] ret 0004 dealloc(_newmem) unregistersymbol(_addr)выдает не правильное значение ecx. Да и способ этот, в любом случае, геморный.Один из самый важных вселенских вопросов "Что делать ?", продолжает тяготеть в голове. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 октября, 2010 Поделиться Опубликовано 2 октября, 2010 Привет.mov eax,[ecx+08] это инструкция вероятно типа C(A). Рис.1 Специально поставлены нопы (из-за бага CE...). Стрелкой показано определение адресов. Значения по некоторым адресам весьма большие, возможно это даже не значения, а адреса на другие значения. Она работает со структурами относящихся к главному герою, если это не так тогда будет C(В). Если хочешь внедрять именно в это место, то придётся писать фильтр. Пока я не понял какой, правда у человека у которого ты взял скрипт уже фильтры "готовы" и можно их применить в своём скрипте. Нельзя делать фильтр только на ecx, т.к. ecx недостаточно - все ecx принадлежат например герою, но есть ещё критерии и их нужно найти.Однако я советую, т.к. к этой инструкции идёт частое обращение по всяким "лишним адресам", то попытаться найти 1) три участка кода для каждого ресурса которые вычитают ресурсы - внедрить в них новое условие, которое не позволяет ресурсам уменьшаться2) при активации читов для ресурсов, должен быть ещё один скрипт, который установит ресурсы и они сразу отобразятся.Если у меня сегодня/завтра будет настроение, то попробую сделать эти два пункта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения