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

Cheat Engine. Общие вопросы по работе с программой


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

  • 2 недели спустя...
  • Ответов 287
  • Создана
  • Последний ответ

Топ авторов темы

  • 1 месяц спустя...

Доброго времени суток!

Решил немного побаловаться с Cheat Engine и Crysis 2. Поскольку я новичок в этом деле, то решил начать с простого, найти и заморозить энергию костюма. Нашел четыре адреса и поставил заморозить, однако в игре это не произвело никакого эффекта. Через ArtMoney замораживается нормально. Возник вопрос, что я не так делаю? Или это из-за того что у меня Win7 64? :blink:

P.S. Если ошибся топиком, прошу простить.

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

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

Уважаемые программисты, вы не могли бы подсказать для чего в СЕ кнопочка unrandomizer?

The unrandomizer is a feature designed to replace certain routines commonly used in games to produce random values. At a very simple level then, for an example, there may be a game that uses a randomizer routine to decide on a player's turn. Enabling the unrandomizer would then cause CE to try and stop this random occurrence, and try to fix the outcome (for example to force a particular players turn).

The unrandomizer won't work in all cases. It will only handle routines that it knows about. In most cases and for most users, this will not be used, as it's more of an advanced/experimental feature.

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

А, я понял для чего эта функция. Она ищет в коде процесса игры функции которые что-то генерируют "случайное". Ну например, из колоды в пять карт берётся рандом от 1 до 5. Так вот выключив рандом будет например всегда браться первая карта, ну или что-то в этом роде.

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

Уважаемые программисты, вы не могли бы подсказать для чего в СЕ кнопочка unrandomizer?

Проверил опцию на игре Neverwinter Nights 2. Как известно при взломе замков, обезвреживании ловушек к соответсвующему навыку добавляется случайное число от 1 до 20 (к сожалению этот интервал жёстко задан в движке игры и увеличить анрандомайзером его не выйдет, а жаль). Ставим в опциях анрандомайзера (в настройках CE) число 19, к примеру, ставим галку и вуаля - к нашему навыку будет постоянно добавляться "случайное" число-константа 20! Очень-очень жаль, что больше 20 в этой игре не выставить... а то можно было бы и не качаться и не тратить время на поиск умений)

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

Можно ли как то представить Auto Assamblerовский код ввиде набора hex вставок ? В TSearch была такая удобная подпрограмма EASYWRITE INTERPRETER называлась, по нажатию "Tmk" асм код представал в виде hex значений вроде Poke _Адрес_ FF FF FF FF FF FF...

Но так как прога старая, на некоторые типы опкодов она реагирует неадекватно и пишет unknown identifer например на movsd xmm0,[esi+000000D0]

Так вот можно ли подобное реализовать в CE для дальнейшего использования в трейнере

Вот например один скрипт из моей таблицы ("One Hit Kill" для Mafia 2 патч 3), который TSearch не "проглотил" ,


[ENABLE]
alloc(allpedsp,2048)
label(returnhere)
label(originalcode)
label(exit)
label(ggpoint)
label(returnhere2)
label(originalcode2)
label(exit2)
label(Health)
registersymbol(Health)
allpedsp:
push eax
mov eax, [Health]
cmp eax,ebp
pop eax
je originalcode
mov [ebp+000000D0],0
originalcode:
comiss xmm0,[ebp+000000D0]
exit:
jmp returnhere
ggpoint:
mov [Health],esi
originalcode2:
movsd xmm0,[esi+000000D0]
exit2:
jmp returnhere2

Health:
dd 0

"mafia2.exe"+591133:
jmp allpedsp
nop
nop
returnhere:

"mafia2.exe"+7307E4:
jmp ggpoint
nop
nop
nop
returnhere2:


[DISABLE]
dealloc(ggpoint)
"mafia2.exe"+7307E4:
movsd xmm0,[esi+000000D0]
dealloc(allpedsp)
"mafia2.exe"+591133:
comiss xmm0,[ebp+000000D0]
unregistersymbol(Health)

Без синтаксиса CE этот код выглядел бы примерно так


mov [00400019],esi
movsd xmm0,[esi+000000D0]
nop
nop
nop
nop
nop
nop

offset 00991133 ; Функция работает со здоровьем всех педов
jmp 00400019

offset 00400019 ; code cave
dd 0
push eax
mov eax, [00400019]
cmp eax,ebp
pop eax
je originalcode
mov [ebp+000000D0],0
originalcode:
comiss xmm0,[ebp+000000D0]
jmp 00991133
offset 00B307E4 ; Функция работает только со здоровьем ГГ

В ручную искать в дизасемблеровом просмоторщике не очень хочется.

Да и вообще как сейчас трейнероделы поступают? :)

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

Этот вопрос поднимал SER[G]ANT на форуме CE. Ответ - "только вручную"! Придётся перейти в дизассемблер (и не раз переходить по разным адресам) выделить инструкции и нажать на CTRL+C. Вылезет окно с выбором что копировать (отдельно или вместе): адреса, байты, инструкции.

Если интересно моё мнение, то можно пояснить почему лучше так не делать (т.е. копировать вручную байты и использовать их далее). Даже если бы и выводились байты как у TMK чтобы написать свой трейнер например на C++, то всё это в итоге занимает лишнее время, т.к. удобнее использовать скрипты CE и сам CE. К этому выводу судя по всему пришёл SER[G]ANT и я считаю что он пришёл к удобному решению несмотря на такие недостатки как размер генерируемого трейнера в ~800кб (и более) на версиях до CE 6.0. Для человека, который уже писал кучу трейнеров на Дельфи/С++/MASM/FASM... в первую очередь важно удобство и приемлемая скорость работы его программы. CE позволяет работать только с кодом инъекции описанной на скриптах. Это очень удобно. Наверно, я уже навязываю это "удобство", так что я более этого делать не буду.

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

на версиях до CE 6.0
я как раз с 6 работаю и до этого CE в глаза не видел, не знал что в нем компилятор есть О_о. В 6 же вроде нет. По чему то ведь от него решили отказаться, значит какие то подводные камни все таки есть с ним.

На счет дизасемблера, вроде как можно автоматизировать т.к. в CE работает LUA , в мануале есть функции но не ясно что делает та или иная ф-ция

например пишу

t=readBytes(0x00B307E4,10)

showMessage(t)

выводит 242 что эквиваленто тому если бы я в таблицы указал тип данных для поля просто byte , хотя вроде как вторая переменная 10 означает кол-во байт т.е. Array of Bytes , но от изменения этого числа ничего не изменяется

, хотя если напрямую через таблицу в type указать соответственно Array of Bytes выведет как надо E9 3C F8 79 04 90 90 90 EB 08 . Вообщем надо читать, но на первый взгляд того что надо нет

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

я как раз с 6 работаю и до этого CE в глаза не видел, не знал что в нем компилятор есть О_о. В 6 же вроде нет. По чему то ведь от него решили отказаться, значит какие то подводные камни все таки есть с ним.

От него Дарк Байт отказался лишь в силу того что CE портировался на новый компилятора free Pascal. Я не знаю какие там проблемы были - скорее нужен был срочный реализ на Январь, а трейнерогенератор подключить не успели. Сейчас у нас на форуме "Реализи CE" доступны ссылки на альфа версии CE 6.1( там есть даже IDE для трейнера). Трейнер может быть как привязкой к CE 6.1 так и работать автономно, т.е. "exe файл". Но его размер будет около 3 мегабайт. Почему такой размер большой можно догадаться... Поэтому я агетирую пользоваться файлами скриптами, а не автономными трейнерами. Это наиболее простой вариант. Есть ещё один вариант - мой C# в связке с C++ (лаучнер.exe, dll-модуль внедряемый в игру из БД модулей, модуль функций). Каждый модуль из БД модулей написан на C++ специально для каждой игры содержит файлы ресурсов и собственный код. Да, но в этом случае придётся писать свой ассемблер/дизассемблер для ~70 распространённых инструкций ассемблера. Короче вариант с CE самый лучший для меня в плане затрат труда и времени.

На счет дизасемблера, вроде как можно автоматизировать т.к. в CE работает LUA , в мануале есть функции но не ясно что делает та или иная ф-ция

например пишу

t=readBytes(0x00B307E4,10)

showMessage(t)

выводит 242 что эквиваленто тому если бы я в таблицы указал тип данных для поля просто byte , хотя вроде как вторая переменная 10 означает кол-во байт т.е. Array of Bytes , но от изменения этого числа ничего не изменяется

, хотя если напрямую через таблицу в type указать соответственно Array of Bytes выведет как надо E9 3C F8 79 04 90 90 90 EB 08 . Вообщем надо читать, но на первый взгляд того что надо нет

t=readBytes(0x00B307E4,10) в этом примере выведет только один байт. Если надо больше, то можно добавлять переменные до равенства

b1 b2 b3 b4 b5 b6 =readBytes(0x00B307E4,10)

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

CE 6.1 Альфа 8 содержит новые LUA функции и исправления, так что лучше пользоваться ей и сравнивать с предыдущими версиям. На какой версии лучше генерировать трейнеры пока не знаю. Но раньше мы это делали без LUA поддержки на версии CE 5.6. Это делать весьма просто. Если требуется у нас на главном сайте есть русская версия CE 5.6 которую нужно поставить поверх английской. На форуме куча примеров от наших пользователей по скриптам автоассемблера.

А вот когда реализ CE 6.1 появится тогда можно будет насладится новыми возможностями LUA поддержки и публиковать скрипты запечатнные в файле .ct.

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

Я уже давал эти ссылки

Про создание трейнера с вставкой скрипта автоассемблера (видео)

Про автоассемблер (читать для дальнейших экспериментов)

Там написано и про то как сделать трейнер, куда вставлять скрипты и как писать скрипты в автоассемблере.

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

Напомню, что если читы делаются для себя, то можно обойтись только скриптами.

Если нужно делать трейнер, то лучше скачать версию CE 5.6 сайта Cheat Engine. Если нужна русская модернизированная версия, то скачать её с нашего главного сайта и установить поверх английской.

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

Брейкпоинт "не может где-то находится". Брейкпоинт ставят на адрес. Затем открывается окно прервавшихся инструкций. Т.е. в этом окне будут отображаться инструкции которые работают с адресом.

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

Извините MasterGH. на адресе я вызвал меню правым кликом мыши и что дальше выбирать не знаю, я решил делать трейнер автоассемблерными скриптами.

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

MasterGH я прочитал про вашу статью про про автоассемблер. Я всё сделал как написано, но в окне memory viewer в нижней части зелёными цифрами везде нули и в auto assemble code injection

[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)

0075C129:

jmp newmem

returnhere:

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

originalcode:

sub [esi+edi*2+3c],bx

exit:

jmp returnhere

[DISABLE]

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

dealloc(newmem)

0075C129:

sub [esi+edi*2+3c],bx

//Alt: db 66 29 5C 7E 3C

Не пойму почему не получилось

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

В Вашем скрипте под newmem нужно было написать типа этого:

mov  bx, 100 

1) Проверьте подключаете ли Вы процесс с игрой через значок компьютера.

2) Проверьте в дизассемблере, что перед активацией скрипта по адресу 0075C129 расположен оригинальный код sub [esi+edi*2+3c],bx

Я всё сделал как написано, но в окне memory viewer в нижней части зелёными цифрами везде нули и в auto assemble code injection

А вот тут поподробнее со скриншотами. Потому что мне не понятно " каким образом могли получиться нули в auto assemble code injection"

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

  • MasterGH закрыто и откреплено это тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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