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

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

Пытаюсь взломать общее число патронов в игре Singularity. С помощью TSearch ставлю бряк - находится инструкция 006FCBC8 mov [edi],ecx. Создаю скрипт:

offset 006FCBC8
jmp 00410A79
nop

offset 00410A79
mov ecx,0x63
mov [edi],ecx
jmp 006FCBCD

00410A79 - этот адрес я нахожу с помощью CodeCaver.

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

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

Я ошибок не увидел.

1. Все ошибки проверяются в отладке. Научитесь сами проверять ошибки с помощью отладчика Cheat Engine или другого и ~99% не придётся ни у кого спрашивать почему скрипт не работает.

2. Просто к сведению TSearch устаревшая программа. Некоторые инструкции неправильно дизассемблирует, TSearch не умеет обращаться к адресам типа "game.dll + смещение", что бывает важно.

3. Ищем в интернете скрипты и на их основе делаем свои Cheat Engine для тренировки:


[ENABLE]
aobscan(_faddress,8bxxxxxxxxxxxxxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxx8bxx8b)
alloc(_newmem,2048)
label(_returnhere)
label(_originalcode)

_newmem:
mov dword ptr [ecx+eax*4+000002ec],63
_originalcode:
mov eax,[ecx+eax*4+000002ec]
jmp _returnhere

_faddress: // 00FAE657 = GImage::GImage+20CDD7
jmp _newmem
nop
nop
_returnhere:

[DISABLE]
aobscan(_faddress,9090xxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxx8bxx8b)

_faddress-5:
mov eax,[ecx+eax*4+000002ec]

dealloc(_newmem)

Я писал про способ, когда aobscan(_faddress,9090xxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxx8bxx8b) под "[DISABLE] " можно не писать.

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

Мне просто кажется, что в CE сложно писать скрипты..

Тут я спорить не в праве, но поясню. Преодоление трудностей возможно окупится освоением новых возможностей Cheat Engine в будущем. Не пишите сложных скриптов по началу. Пишите простые

[ENABLE]
label(метка возврата)

Адрес инструкции:
// изменяем инструкции на прыжок
// нопы если нужны
метка возврата:

Адрес вашего кейва:
// новые инструкции
// оригинальный код если нужен
// прыжок на метку возврата

[DISABLE]

Адрес инструкции:
//восстанавливаем инструкции

Почти всё тоже самое что и в Tsearch. Далее лучше писать скрипты не с кейвом в памяти игры, а с участком новой выделенной памяти. Потом можно писать скрипты с проверочными байтами (как было во втором посте этой темы). Затем можно перейти на LUA поддержку. Если всё делать постепенно и кропотливо, то это реально освоить.

А вообще, как использовать эти скрипты в трейнере? Как привести их в байты для записи?

Если нужно сгенерировать байты, то копировать их можно только в ручную из дизассемблера при выключенном и включённом скрипте. Выделить байты или инструкции и нажать CTRL+C.

НО. Версия CE 5.6 позволит сгенерировать терйнеры только на основе скрипта без особо сложных манипуляций размером ~800кб.

CE 6.0 не умеет генерировать трейнеры. CE 6.1 Beta 3 умеет (её можно скачать в теме реализов). Пусть размер трейнера будет большой. Если Вы не согласны, то придётся делать свой трейнер на языке программирования. Даже в этом случае скрипт выше будет много меньше любого трейнера.

Вообще на мой взгляд лучше пользоваться скриптами LUA и генерировать форму трейнера с его помощью. В этом случае пользователя должна быть установлена CE требуемой версии.

Или на худой конец, если Вам кажется сложным писать на LUA, то можно пользоваться только скриптами автоассемблера Cheat Engine. И советую посмотреть видео на нашем форуме. На видео есть информация о том как и где писать скрипты, и как генерировать трейнеры.

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

Дак то есть получается, если я например делаю трейнер на Делфи и использую функцию WriteProcessMemory, то мне не удастся использовать скрипты из СЕ (так например, как из TSearch после нажатия кнопки Tmk в EI). Так?

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

Я уже неоднократно говорил, но повторюсь еще раз. В скриптах TSearch или CE инструкции кейва ВСЕГДА должны писаться ДО забивания прыжком на кейв оригинальной инструкции. В некоторых случаях это может быть не принципиально, но в большинстве других случаев, из-за того, что забивание оригинальной инструкции прыжком на кейв прописано ДО самого кейва, в память игры этот прыжок пропишется до того, как будут прописаны, собственно, инструкции кейва, что гарантированно вызовет вылет из игры. Отсюда вывод - правильная очередность записи в скрипт делается так:

caveaddress:
new instructions
original instruction(s)
jmp backtogamecode

originalgameaddress:
jmp caveaddress
nop (если нужен)

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

О :blink: , я эту ошибку не увидел. Во всяком случае я бы её сразу определил при пошаговой отладке. Так что это для меня пустяк.

Дак то есть получается, если я например делаю трейнер на Делфи и использую функцию WriteProcessMemory, то мне не удастся использовать скрипты из СЕ (так например, как из TSearch после нажатия кнопки Tmk в EI). Так?

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

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

О :blink: , я эту ошибку не увидел. Во всяком случае я бы её сразу определил при пошаговой отладке. Так что это для меня пустяк.

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

А можно небольшой видеоурок по этому или хотя бы скрин?

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

Ребят, извиняйте, конечно, но уж если вы самостоятельно не можете скопировать цепочку байтов из дизассемблера, то что вы вообще в геймхакинге делаете? На нашем ресурсе мы помогаем осваивать геймхакинг новичкам, но для этого должна быть хоть какая-то элементарная подготовка.

Так что это для меня пустяк.

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

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

Точно ответить не могу.

Во-первых это окно прервавшихся инструкций, а нужно окно дизассемблера на адресе внедрения (адрес на котором ты будешь делать прыжок).

Значит нужны байты при деактивации (до создания прыжка на адресе внедрения) и байты активации (сам прыжок с нопами если нужны и тело чит-кода). Выделяешь инструкции в дизассемблере, нажимаешь CTRL+C и выбираешь копирование какое нужно (адреса + байты + инструкции (лучше выбрать байты))

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

Для бесконечных патронов делаю скпипт в TSearch, но игра вылетает.. Вот скрипт:

offset 005CD063
mov dword ptr [ecx+eax*4+000002ec],0x63
mov eax,[ecx+eax*4+000002ec]
jmp 00FAE651
offset 00FAE657
jmp 005CD063
nop

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

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

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

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