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

Помогите, не могу понять.


aleksandr9

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

Вообщем решил сделать первый трейнер, многофункциональный на игру Plants vs. Zombies... Лично для себя. Вообщем захотел сделать функцию  телепортации зомби назад. Нашел адрес проверил работает, пошел дальше брейкпоинт на запись, вообще нашел вот такую вещь fstp dword ptr [esi+2C] как его изменить  через автоссемблер чтоб зомби телепортировало обратно?? Если заменить fstp dword ptr [esi+2C] нупами то зомби замораживаются а точнее идут на месте, а как сделать так чтоб изменив fstp dword ptr [esi+2C] их телепортировало обратно ? я просто ума не приложу). Кто хочет помочь лично скайп alexandr-kovalenko-98. 
 
 

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

Привет! Не стоит надеяться на то, что NOP может решить все проблемы. Почитай внимательно, что делает инструкция. Если коротко, то процессор сам по себе умеет работать только с целыми числами, а когда понадобились дробные - к нему сбоку "прикрутили" дополнительные регистры и сделали специальные инструкции для работы с ними. FST\FLD - это сокращения от "Float Store" и "Float Load", то есть они считывают и записывают дробные числа между "обычными" регистрами и специальными. У тебя получается такая ситуация, что ESI+2C хранит положение зомби (или скорость, что-нибудь такое), и игра меняет эту цифру, а затем переводит из дробного числа в целое и сохраняет себе. Следовательно, где-то выше по коду игра что-то с числом делает - например, прибавляет или отнимает. Или умножает, тут особой разницы нет. Эту инструкцию тебе и нужно искать.

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

я имел ввиду то что если заменить 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]  затереть нупами и тогда они моментально телепортируются в чем связь я хз

 

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

Не, давай еще раз. Ты нашел инструкцию, которая *записывает* текущее положение зомби. Меняется это положение не этой инструкцией, а где-то раньше. Следовательно, саму инструкцию можно вообще не трогать. По сути, она является эквивалентом чего-то такого:

 

zombie.Position = pos

 

Как вариант, можно в скрипте читать текущее значение, отнимать из него какое-то число, а потом уже записывать.

 

PS: Исходный код и скрипты принято заворачивать в тег "spoiler" (кнопка с глазом на панели редактирования поста).

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

так все получилось причем в двух вариантах 1 вариант телепортирует всего лишь 1 зомби почему то 

Скрытый текст

 

  1. function CEButton1Click(sender)
  2. GameName = 'PlantsVsZombies'
  3. if(getProcessIDFromProcessName(GameName) == nil) then
  4. showMessage("Игру ука запусти")
  5. return
  6. end
  7. result = AOBScan("D9 5E 2C 0F 85 A0 00 00 00")
  8. if(result == nil) then
  9. showMessage("не удалась ука твоя махинация")
  10. return
  11. end
  12. address = getAddress(stringlist_getString(result,0))
  13. debug_setBreakpoint(address)
  14. debug_removeBreakpoint(address)
  15. writeFloat(telAddress,718)
  16. end
  17. function debugger_onBreakpoint()
  18. telAddress = ESI + 0x2C
  19. return 1
  20. 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

 

 

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

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

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

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