aleksandr9 Опубликовано 30 сентября, 2016 Поделиться Опубликовано 30 сентября, 2016 Вообщем решил сделать первый трейнер, многофункциональный на игру Plants vs. Zombies... Лично для себя. Вообщем захотел сделать функцию телепортации зомби назад. Нашел адрес проверил работает, пошел дальше брейкпоинт на запись, вообще нашел вот такую вещь fstp dword ptr [esi+2C] как его изменить через автоссемблер чтоб зомби телепортировало обратно?? Если заменить fstp dword ptr [esi+2C] нупами то зомби замораживаются а точнее идут на месте, а как сделать так чтоб изменив fstp dword ptr [esi+2C] их телепортировало обратно ? я просто ума не приложу). Кто хочет помочь лично скайп alexandr-kovalenko-98. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 сентября, 2016 Поделиться Опубликовано 30 сентября, 2016 Привет! Не стоит надеяться на то, что NOP может решить все проблемы. Почитай внимательно, что делает инструкция. Если коротко, то процессор сам по себе умеет работать только с целыми числами, а когда понадобились дробные - к нему сбоку "прикрутили" дополнительные регистры и сделали специальные инструкции для работы с ними. FST\FLD - это сокращения от "Float Store" и "Float Load", то есть они считывают и записывают дробные числа между "обычными" регистрами и специальными. У тебя получается такая ситуация, что ESI+2C хранит положение зомби (или скорость, что-нибудь такое), и игра меняет эту цифру, а затем переводит из дробного числа в целое и сохраняет себе. Следовательно, где-то выше по коду игра что-то с числом делает - например, прибавляет или отнимает. Или умножает, тут особой разницы нет. Эту инструкцию тебе и нужно искать. Ссылка на комментарий Поделиться на другие сайты Поделиться
aleksandr9 Опубликовано 30 сентября, 2016 Автор Поделиться Опубликовано 30 сентября, 2016 я имел ввиду то что если заменить fstp dword ptr [esi+2C] нупами то зомби стоят идут на месте. а я хочу сделать так чтоб их телепотриовало обратно но я незнаю как это сделать по скольку я новенький в этом деле вот что я накидал Скрытый текст function CEButton1Click(sender) GameName = 'PlantsVsZombies' if(getProcessIDFromProcessName(GameName) == nil) then showMessage("Игру запусти") return end result = AOBScan("D9 5E 2C 0F 85 A0 00 00 00") if(result == nil) then showMessage("не удалась твоя махинация") return end address = getAddress(stringlist_getString(result,0)) debug_setBreakpoint(address) debug_removeBreakpoint(address) writeInteger(telAddress,1143745486) end function debugger_onBreakpoint() telAddress = ESI + 0x12C return 1 end возможно нужно вместо writeInteger нужно writedouble или float вообщем я незнаю) напишите скрипт который нужен для этого или исправьте этот.. так вот что получилось у меня пока что сначало пишу скрипт автосемблера вот так с float 718 это и есть начало от куда выходи зомби Скрытый текст [ENABLE] alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) newmem: mov dword ptr [esi+2C],(float)718 originalcode: fstp dword ptr [esi+2C] jne PlantsVsZombies.exe+13B4EC exit: jmp returnhere "PlantsVsZombies.exe"+13B443: jmp newmem nop nop nop nop returnhere: [DISABLE] dealloc(newmem) "PlantsVsZombies.exe"+13B443: fstp dword ptr [esi+2C] jne PlantsVsZombies.exe+13B4EC но он просто так не работает его надо заморозить и потом структуру fstp dword ptr [esi+2C] затереть нупами и тогда они моментально телепортируются в чем связь я хз Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 сентября, 2016 Поделиться Опубликовано 30 сентября, 2016 Не, давай еще раз. Ты нашел инструкцию, которая *записывает* текущее положение зомби. Меняется это положение не этой инструкцией, а где-то раньше. Следовательно, саму инструкцию можно вообще не трогать. По сути, она является эквивалентом чего-то такого: zombie.Position = pos Как вариант, можно в скрипте читать текущее значение, отнимать из него какое-то число, а потом уже записывать. PS: Исходный код и скрипты принято заворачивать в тег "spoiler" (кнопка с глазом на панели редактирования поста). Ссылка на комментарий Поделиться на другие сайты Поделиться
aleksandr9 Опубликовано 30 сентября, 2016 Автор Поделиться Опубликовано 30 сентября, 2016 так все получилось причем в двух вариантах 1 вариант телепортирует всего лишь 1 зомби почему то Скрытый текст function CEButton1Click(sender) GameName = 'PlantsVsZombies' if(getProcessIDFromProcessName(GameName) == nil) then showMessage("Игру ука запусти") return end result = AOBScan("D9 5E 2C 0F 85 A0 00 00 00") if(result == nil) then showMessage("не удалась ука твоя махинация") return end address = getAddress(stringlist_getString(result,0)) debug_setBreakpoint(address) debug_removeBreakpoint(address) writeFloat(telAddress,718) end function debugger_onBreakpoint() telAddress = ESI + 0x2C return 1 end Второй вариант телепортиует всех зомби вот Скрытый текст [ENABLE] alloc(newmem,2048) label(returnhere) label(exit) newmem: mov dword ptr [esi+2C],(float)718 jne PlantsVsZombies.exe+13B4EC exit: jmp returnhere "PlantsVsZombies.exe"+13B443: jmp newmem nop nop nop nop returnhere: [DISABLE] dealloc(newmem) "PlantsVsZombies.exe"+13B443: fstp dword ptr [esi+2C] jne PlantsVsZombies.exe+13B4EC Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения