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

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


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

[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

mov [esp+20],#999 <----- Делать вот так "mov [esp+20],(float)1" нельзя от этого толку мало

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

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

MachneGin. под

 [DISABLE]

надо записать

dealloc(newmem)

засорять в памяти игры за собой не убирать эт очень плохо.

NEMO ответ на №20

Не во всех скриптах, если в памяти игры создаем новую память в СЕ

newmem:

.

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

Ребята, вы лезете в дебри. Если нужно, чтобы патроны просто перестали отниматься при выстрелах - Нужно:

1. Найти адрес патронов какого-либо оружия

2. Найти инструкцию, которая выполняется при выстреле (отнимает какое-то количество патронов)

3. Забить эту инструкцию нопами безо всяких кейвов.

К примеру, на скрине выше (в посте ZOCKIR) такой инструкцией является dec [eax+78] и нопить нужно именно ее, а не ту, которая выбрана на том же скрине. Ибо выбрана "читающая" инструкция, и если ее забить нопами, это может привести к непредсказуемому результату вплоть до вылета игры.

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

Скрипт для первой части Crysis (Все патроны и гранаты = 999)

[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

mov [eax+14],000003E7

originalcode:

mov eax,[eax+14]

pop ecx

ret 0004

exit:

jmp returnhere

cryaction.dll+1C02F:

jmp newmem

nop

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

cryaction.dll+1C02F:

mov eax,[eax+14]

pop ecx

ret 0004

//Alt: db 8B 40 14 59 C2 04 00

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

  • 2 недели спустя...

Всем привет! Большое спасибо ,что неоставляете мои вопросы,без внимания.(не смотря на то что я некоторое время отсутствовал)

Еще раз хочу сказать что речь идет о игре Crysis часть 1(т.к. были рассуждения на эту тему) .Хочу так же сказать что Crysis1 выбран не случайно,т.к. на Crysis1 можно создать свой серв . и сидеть на нем пока не надоест и тебя не удалять за бездействие как например в Crysis 2.

Ну а теперь о главном.

Я много поэксперементировал и хочу сказать что результатами доволен..

Единственное с "этими NOPами" не так все гладко.. После того как включишь скрипт с NOPами все работает,но отключить не получается.Только после выхода из игры.

К примеру, на скрине выше (в посте ZOCKIR) такой инструкцией является dec [eax+78] и нопить нужно именно ее, а не ту, которая выбрана на том же скрине. Ибо выбрана "читающая" инструкция, и если ее забить нопами, это может привести к непредсказуемому результату вплоть до вылета игры.

Но у меня только одна инструкция..как быть в таком случае?

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

После того как включишь скрипт с NOPами все работает,но отключить не получается.Только после выхода из игры.

А в CE функция [ENABLE] и [DISABLE] для чего?

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

Но у меня только одна инструкция..как быть в таком случае?

Нажимаешь на эту инструкцию, а потом на кнопку "Показать Дизассемблер" ("Show Disassembler"). Посмотри немного вверх/. Может там будет похожая инструкция dec, sub.

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

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

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

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

в своих скриптах я не прописывал этот пункт


dealloc(newmem)

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

Может ли быть причина сбоя в этом?

W-7 32bit(оригинал) Специально установил 32 битную систему,т.к. на 64 тренер не всегда создавался,выдавало ошибку, Спасибо за внимание.

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

№38, привет!

Фишка тут в том, когда именно скрипт выполняет функцию dealloc. Вкратце, как это работает:

1. alloc(size) - выделяет в адресном пространстве процесса игры кусок памяти размером size байт, возвращает адрес первого байта (начала куска).

Дальше ты пишешь туда код скрипта, всякие mov, dec, inc, fld, nop и прочие команды.

Это всё находится в секции enable редактора скриптов. Когда же ты скрипт отключаешь - вызывается секция disable, которая должна привести игровой код к оригиналу (вместо jmp script_address сделать original code, а память, выделенную под скрипт через alloc - очистить). Очищать память - это вообще круто, потому что она не резиновая. Проблема тут в том, что если игра попытается обратиться к памяти, которой нету (её уже очистили) - игра умрёт. Т.е. всегда нужно сначала восстанавливать оригинальную инструкцию и только после этого очищать память под скрипт, выделенную через alloc, т.е. вызывать dealloc.

Проверь код скрипта, возможно проблема в этом.

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

post 38: "в своих скриптах я не прописывал этот пункт dealloc(newmem). ..Может ли быть причина сбоя в этом?"

Нет. Могут быть причины: античиты, вирусы и системные ошибки в Windows или кривые дрова у видеокарты, или перегрев оборудования... У синего экрана есть код ошибки. Было бы возможно яснее если бы ты его привёл.

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

NEMO зачем трогать инструкцию

 mov edx,[esp+20]

когда есть

mov eax,[eax+14]

получается если изменять [esp+20] получаем вылет или что то другое при загрузке карты в игре, при активации.

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

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

И вообще, по возможности с такими инструкциями лучше не связываться.

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

Изменение данных стека и регистров актуально сразу после вызова call. Обычно ближайшие к вершине стека данные фиксированы по смещениям от начала вершины стека. Или использовать изменения данных стека ближе к ret-ам. Как бы там не было надо проводить эксперименты.

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

Всем привет!

NEMO зачем трогать инструкцию

 mov edx,[esp+20]

когда есть

mov eax,[eax+14]

получается если изменять [esp+20] получаем вылет или что то другое при загрузке карты в игре, при активации.

В одном из видео уроков ( взлом закись азота) , keng перешел на адрес выше по списку.Вот и я поступил так же.просто не задумываясь перешел на другой адрес.Только потом когда поискал значения для патронов и для гранат я стал понимать что так не пойдет .Да и в этой теме не раз писалось почему у меня такой адрес а должен быть другой.

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

Всем привет!

В одном из видео уроков ( взлом закись азота) , keng перешел на адрес выше по списку.Вот и я поступил так же.просто не задумываясь перешел на другой адрес.Только потом когда поискал значения для патронов и для гранат я стал понимать что так не пойдет .Да и в этой теме не раз писалось почему у меня такой адрес а должен быть другой.

Привет!

В том видео я перешёл на инструкцию выше, т.к. там был вот такой код (сейчас пишу псевдокод):


fsubr blabla,10
fstp blabla

Первой строчкой мы отнимаем из blabla десяточку, второй - сохраняем новое значение blabla. Нужно это затем, что для работы с типом float (грубо говоря) нужно слегка другое, нежели для работы с обычными типами, например, целое 4 байта. В этом случае было бы:

sub blabla,10

И всё. Суть в том, что не надо делать "так, как кенг в уроке", а надо понимать, что происходит в отладчике, а только потом делать что-то. Попробую скачать игру и выяснить, что у тебя не так. :-P

Тэкс. Для начала, решительно не понимаю, откуда вы в своих скриптах взяли float, когда патроны хранятся в виде 4 байта целого. В общем, ищем точное значение, отсеиваем, получаем в конце два адреса, заморозкой выясняем, какой верный, ставим брейкпоинт на запись, получаем такую инструкцию:

post-6695-0-46007800-1337900142_thumb.pn

Не вдаваясь в подробности, edx - новое значение патронов (уже после выстрела), [eax+14] - указатель на эти самые патроны. Эта инструкция работает со всем оружием, так что элементарнейший скрипт:


"Crysis.exe"+13ABC7:
nop
nop
nop

[DISABLE]
"Crysis.exe"+13ABC7:
mov [eax+14],edx
[ENABLE]

Позволяет стрелять из любого оружия без перезарядки и потери патронов, если в обойме есть хотя бы один патрон. Это всё, или ещё какие-то проблемы были?

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

Всем привет!Спасибо KENG что так подробно все расписал.Вопросы конечно есть)).

Я все не могу понять .почему на пистолете или любом автомате при стрельбе количество патронов не уменьшается( остается не изменным) а на пулемете (Hurricane) убовляется до 1 шт и потом останавливаетя(не кончается).

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

Вот скрипт


[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:
add edx ,#1 - ЗДЕСЬ Я ЭКСПЕРЕМЕНТИРОВАЛ С РАЗНЫМИ ЗНАЧЕНИЯМИ INC MOV
originalcode:
mov [eax+14],edx
jmp CryGame.CryModuleGetMemoryInfo+119F2D
exit:
jmp returnhere
"CryGame.dll"+13B117:
jmp newmem
returnhere:



[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"CryGame.dll"+13B117:
mov [eax+14],edx
jmp CryGame.CryModuleGetMemoryInfo+119F2D
//Alt: db 89 50 14 EB 21

Может быть дело в том что пулемет имеет в магазине колличество патрон 500(трех значное число) а другое оружие 20 ,40 или 60( двух значное)

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

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

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

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