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

Crysis - Бесконечные Патроны


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

Всем привет!

Прошу строго не судить . это мои первые шаги в СЕ. руководствовался видеоуроками от KENG. Оговорюсь сразу я поклонник игры CRYSIS,

Суть моего вопроса в следующем ,

. Решил начать с простого , с бесконечных патрон для пистолета.. Код нашел, ,все работает,когда замораживаешь значение, добрался до скрипта, вроде все работает, но , как всегда есть НО !

Как только я ночинаю стрелять ,патроны уменьшаются до определенного количества и потом не кончаются, т.е.было в магазине 20 пуль,начинаю стрелять доходит до 16 и потом не кончаются, Вроде можно стрелять и радоваться,но я то знаю, что на нормальных тренерах таких вещей не происходит. Прошу помощи, помогите, подскажите,

Вот мой скрипт

[ENABLE]
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
mov dword ptr [esp+20],(float)1
mov edx,[esp+20]
mov [eax+14],edx

exit:
jmp returnhere

"CryGame.dll"+141F53:
jmp newmem
nop
nop
returnhere:



[DISABLE]
"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx

Прошу прощения но я не нашел как сделать текст скрипта скрытым. подскажите и с этим,

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


[ENABLE]
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem:
mov [esp+20],(float)99 - Запись в иструкцию Nнного значения делается под строчкой newmem: И командой mov делается запись, без dword ptr.

originalcode:
mov edx,[esp+20]
mov [eax+14],edx

exit:
jmp returnhere

"CryGame.dll"+141F53:
jmp newmem
nop
nop
returnhere:

[DISABLE]
"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx

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

Привет всем!

Ac1d Подправил скрипт,так ка ты подсказал,но результат прежний.Колличество пуль определяют цифры ,которые стоят радом с float

поставил 99 так патроны замерли на 84 . поставил 1.5 потроны замерли на 20. Хотелось бы что бы патроны замерли в том колличестве при котором был включен тренер,

live_4_ever ты написал Напиши inc edx (мож пронесё) кудаже прописать inc edx подскажи куда писать,я в этом деле новичек, то что для вас пустяк для меня наука, может клочек скрипта для наглядности пропишешь?

Есть еще вопрос Иногда в скриптах есть такое,

часть скрипта


[DISABLE]
"Crysis.exe"+668C:
pop esp
and al,1C
mov [esp+20],edi
//Alt: db 5C 24 1C 89 7C 24 20 - ЧТО ЭТО ЗА ЗНАЧЕНИЕ И ОТ КУДА ОНО ВЗЯЛОСЬ(К ЧЕМУ ПРИВЯЗАНО)

За ранее благодарен.

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

По указанному в скрипте вопросу - это значение - "опкоды" инструкций, то есть, это то же самое, что показано чуть выше (в секции DISABLE), только выраженное цифрами, а не дизассемблерным кодом (именно "цифры" и понимает процессор). По сути, это не принципиально, пока учишься. Как твои навыки станут чуть больше, ты сам поймешь суть этих цифр. Ну, а если не поймешь, то мы с радостью объясним, но только тогда, когда твой уровень достигнет той отметки, при которой ты сможешь правильно понять наши объяснения )

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

Привет всем!

Ac1d Подправил скрипт,так ка ты подсказал,но результат прежний.Колличество пуль определяют цифры ,которые стоят радом с float

поставил 99 так патроны замерли на 84 . поставил 1.5 потроны замерли на 20. Хотелось бы что бы патроны замерли в том колличестве при котором был включен тренер,

live_4_ever ты написал Напиши inc edx (мож пронесё) кудаже прописать inc edx подскажи куда писать,я в этом деле новичек, то что для вас пустяк для меня наука, может клочек скрипта для наглядности пропишешь?

Есть еще вопрос Иногда в скриптах есть такое,

часть скрипта


[DISABLE]
"Crysis.exe"+668C:
pop esp
and al,1C
mov [esp+20],edi
//Alt: db 5C 24 1C 89 7C 24 20 - ЧТО ЭТО ЗА ЗНАЧЕНИЕ И ОТ КУДА ОНО ВЗЯЛОСЬ(К ЧЕМУ ПРИВЯЗАНО)

За ранее благодарен.

прописать inc edx под newmem.


[DISABLE]
"Crysis.exe"+668C:
pop esp
and al,1C
mov [esp+20],edi
//Alt: db 5C 24 1C 89 7C 24 20 - CE перехватил начало и конец работы инструкции 5с это pop esp а 24 20 esp+20 проверочные байты.

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

NEMO

Вот, что я имел ввиду (И дополню ZOCKIR'а). По твоему скрипту, смотри:


[ENABLE]
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem:
inc edx // увеличивается значение edx на 1.
//Можно написать add edx. Только тогда нужно указывать на сколько увеличивать.
//Например: add edx,63. Если значение float надо указать (float)63.
//Только писать на сколько увеличивать, надо в шестнадцатеричной системе счисления (hex).
//В этом может помочь калькулятор переключенный в инженерный вид.

originalcode:
mov edx,[esp+20]
mov [eax+14],edx

exit:
jmp returnhere

"CryGame.dll"+141F53:
jmp newmem
nop
nop
returnhere:

[DISABLE]
"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx

Хотелось бы что бы патроны замерли в том колличестве при котором был включен тренер.

Тогда можешь просто нопить. Так даже лучше.

db 90 90 90 90 //ставить 90 столько, сколько байт занимает инструкция. Писать тоже под newmem

ЗЫ Админам: Если можно, перенесите эту тему из раздела "Статьи для новичков" в "Вопросы по взлому игр".

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


[ENABLE]
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem:
inc edx // увеличивается значение edx на 1.
//Можно написать add edx. Только тогда нужно указывать на сколько увеличивать.
//Например: add edx,63. Если значение float надо указать (float)63.
//Только писать на сколько увеличивать, надо в шестнадцатеричной системе счисления (hex).
//В этом может помочь калькулятор переключенный в инженерный вид.



originalcode:
mov edx,[esp+20]
mov [eax+14],edx

exit:
jmp returnhere
"CryGame.dll"+141F53:
jmp newmem
nop
nop
returnhere:

[DISABLE]
"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx

Немного от себя. Как мне показалось логичнее будет увеличивать (inc) значение в регистре (esp) со смещением +20, то есть inc [esp+20]

Так же если у вас число число с точкой (float), то написав add [esp+20],(float)63 у вас ничего не выйдет. Правильнее будет так: fadd [esp+20], если же всё равно что то хотите добавить, то add [esp+20],#1234567890 НО, Число будет заоблачное. И не обязательно писать на сколько прибавить (add), т.е add [esp+20] - число, патрон допустим 123 будет становиться в два раза больше при выстреле - 123 выстрел, 246, выстрел, 369...

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

я себе делал так и все пашет норм было 21 патрон стрельнул стало 20 включил тренер и так стойт 20 )


[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
pop esp
and al,1C
mov [esp+20],edi
exit:
jmp returnhere
"Crysis.exe"+668C:
jmp newmem
nop
nop
returnhere:



[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Crysis.exe"+668C:
pop esp
and al,1C
mov [esp+20],edi
//Alt: db 5C 24 1C 89 7C 24 20

Ac1d: можно по другому для примера так я делал

newmem:

mov [esp+20], 0000014E

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

Всем привет! Спасибо что не оставляете мои вопросы без внимания.. Начнем по порядку.

ive_4_ever писал следующее


newmem:
inc edx // увеличивается значение edx на 1.
//Можно написать add edx. Только тогда нужно указывать на сколько увеличивать.
//Например: add edx,63. Если значение float надо указать (float)63.
//Только писать на сколько увеличивать, надо в шестнадцатеричной системе счисления (hex).
//В этом может помочь калькулятор переключенный в инженерный вид.

пробовал разные варианты и результат такой


inc edx 41A00000 ,inc edx 20 - ошибка
inc edx ,inc edx 0000014 ,inc edx ,(float)1,inc edx ,(byte)0000014 - не работает
add edx ,add edx ,(float)63 - НЕ РАБОТАЕТ
add edx ,(float)41A00000 - ошибка

Ac1d писал


Немного от себя. Как мне показалось логичнее будет увеличивать (inc) значение в регистре (esp) со смещением +20, то есть inc [esp+20]
Так же если у вас число число с точкой (float), то написав add [esp+20],(float)63 у вас ничего не выйдет. Правильнее будет так: fadd [esp+20], если же всё равно что то хотите добавить, то add [esp+20],#1234567890 НО, Число будет заоблачное. И не обязательно писать на сколько прибавить (add), т.е add [esp+20] - число, патрон допустим 123 будет становиться в два раза больше при выстреле - 123 выстрел, 246, выстрел, 369

Результат


fadd [esp+20]#1,fadd [esp+20] - игра слетает
add [esp+20]#1,add [esp+20] - не принимает код(ошибка)

Но есть и хорошая новость!!!


inc [esp+20] - патроны остаются в том колличестве при котором был запущен тренер,но не у всего оружия

Все это я прописывал в своем скрипте(который выложен в первом посту) под пунктом newmem:(как вы мне и подсказали)

Во время проб со скриптом ,заметил такое ,

При этом коде


mov [esp+20],(float)99

у всех видов оружия работает без лимит патрон( на технике не пробовал)но как я уже писал выше патроны останавливаются при определенном колличестве.

а при


inc [esp+20]

патроны остаются в том колличестве при котором был запущен тренер,но не у всего оружия

Не стану скрывать что искал значение только для пистолета,

Поделитесь своими соображениями,

Строго прошу не судить мои эксперименты ,наверняка что то где то не так написал ,поэтому и не все ваши подсказки у меня получились в деле.

Я ведь только учусь!!! За ранее благодарен за помощь.

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

Найди инструкции которые пишут в адрес с патронами, и напиши нужный тебе скрипт.

Если же тебе надо, чтобы значение осталось таким же как и было (а не 999 например), ищи инструкцию, которая пишет в твой адрес при выстрели, а потом проверь что ещё к ней обращается, если же там только твой адрес, можешь нопить её и всё.

Если там ещё чужие адреса окажутся, делай фильтр (как его сделать можно найти на форуме).

ACID, нет разницы - указал ты конкретное число или будет браться тоже самое число только с какого-нибудь регистра.

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

ACID, нет разницы - указал ты конкретное число или будет браться тоже самое число только с какого-нибудь регистра.

Я этой строчки не понял, но всё равно я остаюсь при своих методах...

NEMO, add [esp+20]#1 - Тут утеряна запятая add [esp+20],#1

И вообще посоветую найти другую инструкцию, чтобы записать (mov) допустим 99 и не париться ;)

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

Всем привет!.

Проверил add [esp+20],#1 тот же самый эфект что и inc [esp+20] - патроны остаются в том колличестве при котором был запущен тренер,но не у всего оружия.

Не в первый раз здесь пишут о том ,что можно НОПИТЬ ,NOP,

live_4_ever писал о таком способе


Тогда можешь просто нопить. Так даже лучше.
db 90 90 90 90 //ставить 90 столько, сколько байт занимает инструкция. Писать тоже под newmem

Результата никакого.

Может напишете свой способ ,как нужно нопить,и если можно по подробней или более наглядно в скрипте,

Спасибо

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

Поробуйте так.


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
mov [esp+20],(int)999
originalcode:
mov edx,[esp+20]
mov [eax+14],edx
exit:
jmp returnhere
"CryGame.dll"+141F53:
jmp newmem
nop
nop
returnhere:
[DISABLE]
"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx
dealloc(newmem)

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

Всем привет!

ZOCKIR спасибо за помощь. протестил твою подсказку ,работает на всем оружии,правда только значение пуль в магазинах имеет 9 или 99 или 999, я сэтим делом поэксперементировал , т.е. подставлял здесь


mov [esp+20],(int)999

в место 999 и 10 и 1 и т.д.

Может я конечно излишне дотошный ,но мне все же хочется сделать так чтобы после включения тренера колличество пуль оставалось не изменным . т.е. если в магазине 15 вкл тренер то и 15 осталось пока не отключил.

Если поставить такое значение


inc [esp+20]
add [esp+20],#1

то пули замирают в том колличестве при котором вкл тренер.но не на всем оружии,если оружие имеет магазин в трехзначное число(в моем случае 500) . Пули также не кончаются но замирают в колличестве 1шт.

Просто я никак не пойму причину,почему одна команда может увеличить боезапас везде,а другая команда заморвживает патроны не везде,ведь код один и тот же.

ZOCKIR в том скрипте что ты написал я заметил в самом низу строку


"CryGame.dll"+141F53:
mov edx,[esp+20]
mov [eax+14],edx
dealloc(newmem) - ВОТ ЭТУ!!!

что она означает. скрипт работает как с ней так и без нее.

Спасибо!!!

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


dealloc(newmem)

Очень полезная штука. Создаем новую память при активации чит а при деактивации очищаем ранее создаваемую память то ист убираем мусор за собой.

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

NEMO, патроны, магазины... Что ты конкретно хочешь сломать то? Сами пули заряженые в пушку? (Чит No reload) или колличество пуль в магазине? (Infinite ammo). Если и то и то, то для этих значений две инструкции будет.

Может я конечно излишне дотошный ,но мне все же хочется сделать так чтобы после включения тренера колличество пуль оставалось не изменным . т.е. если в магазине 15 вкл тренер то и 15 осталось пока не отключил.

Тут Nop в помощь... Как я понимаю если записать 99, то индикатор пуль либо пропадает, либо вылазит за пределы рамок.

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

На сколько я понимаю пули хранятся в магазине, и когда стреляешь, они то и убавляются в первую очередь. А остальное это боезапас, по крайней мере так меня учили))

Мне нужно No reload ,но чтобы патроны оставались в том колличестве при котором был включен тренер.

Другие вопросы я не понял, слишком по умному записал.

Все мы люди разные и обесняемся по своему.Я только учусь не будьте ко мне строги,просто пытаюсь понять суть дела,

Как только освою все термины ,надеюсь нам будет проще понять друг друга.

Спасибо

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

Не, вопрос по правде я не догнал.

Допустим. в игре 9 разных оружие:

Пистолет= 12 в магазине

Снайпер = 3 в магазине

Ингерм= 36 в магазине

Пулемет =380 в магазине пуль.

и тд.

Если записать


newmem:
mov [esp+20],(int)9

Все выше перечисленные оружие пуль будет равен 9.

Я так понял ты хочешь чтоб было заморозить как есть:

Пистолет= 12

Снайпер = 3

Ингерм= 36

Пулемет =380

Примерно так понял.

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

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

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

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