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

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

Вот ещё одна любопытная игра. Кому лень качать полную версию на плэйграунде есть какие-то демки 150 Мб. Не могу заломать в этой игре даже ничтожные патроны! Искал все типы, неизвестное, уменьшилось, увеличилось, просто изменилось - пока безрезультатно... Если верить файлу скриптов, жизнь хранится как float от 0.0 до 1.0, но нет, всё равно глухо.

Вроде бы M4K пытался ломать игру артмани, но тоже не смог.

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

Да, именно в 2003. Решил всё-таки пройти эту игру, в 2003 так и не доиграл, застрял на некоторой миссии, не знал куда идти. А что юзать - MHS, CE, Artmoney не думаю что есть существенная разница, кроме скорости поиска.

PS Я тут вчера прошёл Чернобыль Зона отчуждения, игра 2011 года, а патроны хранятся в статическом адресе, не меняющемся после перезахода в игру. ТО-то я удивился))) (игра не очень)

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

Скачал демку v1.30 (http://www.playground.ru/files/2045/)

Бесконечные патроны:

[ENABLE]
"Chaser.exe"+1D43CD:
db 90 90

[DISABLE]
"Chaser.exe"+1D43CD:
mov [ecx],edi

Бессмертие:

[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem:
mov [ebx+1D0],64 //макс. здоровье
mov [ebx+1D8],64 //макс. броня
originalcode:
mov eax,[ebx+000001D8]

exit:
jmp returnhere

"Chaser.exe"+C6A1D:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"Chaser.exe"+C6A1D:
mov eax,[ebx+000001D8]

Проблем с поиском значений не возникло. Ищется точное значение 4 байта, находится при первом же отсеве (пользовался CE 6.1 b3).

P.S. Не ломай, а проходи честно. Больше удовольствие от игры получишь)

P.P.S. Ни разу не играл с читами

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

Возможно в демке всё проще, а Руссобитовцы перемудрили с какой-нибудь защитой аля старфорс. У меня версия 1.47, проблемы с поиском есть :)

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

ZOCKIR, возможно прав. Я уже точно не помню, но то что я не мог найти на CE 5.6, я нашёл MHS. Я имею ввиду поиск float. По поводу новых версий CE ничего сказать не могу. Тогда в CE 5.6 я тестил и ставил различные настройки округления float числа, различные типы поисков. Были проверены мной характеристики сканирумой памяти. Почему-то CE никак не находил адреса в районе десятых долей. MHS этот делал эффективно. В нём можно было сделать делать даже сразу три отсева за раз (в принципе в CE тоже)

1) Ищем float "от 0,0 до 1000000,0" идём в игру и уменьшаем

2) Отсеиваем "уменьшилось", отсеиваем "от 0,0 до 1000000,0", отсеиваем "не изменилось"; идём в игру ставим предыдущее значение

3) Отсеиваем увеличилось,, отсеиваем "от 0,0 до 1000000,0" отсеиваем адреса значения которых равны при первом сканировании,

НУ и так далее... так можно быстро найти, если нет обратной пропорциональности, иного алгоритма, иных типов данных или шифорования. Как я уже писал где-то, если поиск слишком нудный, то надо искать значение текста. Я это почему-то делаю в Артмани (уже не помню почему). Если адрес найдётся, то уже лезем в отладчик OllyDbg, ищем адрес в памяти, ставм бряк на запись и находим код который и исследуем, и понимаем в чем "секрет"

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

Возможно в демке всё проще, а Руссобитовцы перемудрили с какой-нибудь защитой аля старфорс. У меня версия 1.47, проблемы с поиском есть :)

Следовало бы версию указывать с самого начала :)

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

Интересно: нашёл для своей версии активатор вырезанного из русской лицензии чита GodMode - работает! Автор активатора просто изменил безусловный переход с одного адреса на другой. И кому приспичило этот чит вырезать)) Но моя цель не найти чит, а разобраться самому как там всё хранится.

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

Похоже здоровье кодировано...

100% здоровья = 5Bh
99% = 5Ch
...
64% = 7Fh
63% = 00
62% = 01
...
1% = 3Eh
смерть = 3Fh

Вот такая фигня...

С патронами таже фигня.

ЗЫ хех... после перезапуска игры кодированные значения ещё и изменяются.. т.е. уже не 100% = 5Bh, а что-то другое... алгоритм не могу определить( в принципе бессмертие работает, но каждый раз будет разное число здоровья))

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

Для русской версии 1.47 от Руссобита.

Случайное здоровье+броня (бессмертие):


//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+000006B0],00 //Freeze Random value of Health
mov [eax+000006B4],00 //Freeze Random value of Armor

originalcode:
mov eax,[eax+000006B0]

exit:
jmp returnhere

"Chaser.exe"+1DEE52:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Chaser.exe"+1DEE52:
mov eax,[eax+000006B0]
//Alt: db 8B 80 B0 06 00 00
[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
nop
nop
nop
originalcode:
//mov [ecx+edi*4],eax
mov edx,[esi+1C]

exit:
jmp returnhere

"Chaser.exe"+1D7F27:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Chaser.exe"+1D7F27:
mov [ecx+edi*4],eax
mov edx,[esi+1C]
//Alt: db 89 04 B9 8B 56 1C
[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
nop
nop
nop
originalcode:
//mov eax,[ecx+edx*8]
lea edi,[ecx+edx*8]

exit:
jmp returnhere

"Chaser.exe"+CBBE:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Chaser.exe"+CBBE:
mov eax,[ecx+edx*8]
lea edi,[ecx+edx*8]
//Alt: db 8B 04 D1 8D 3C D1
[ENABLE]

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

Действительно, зачем выделять память под нопы? :grin:

Скрипт бессмертия в срочном порядке надо переделать, игра частенько принимает меня за трупа на старте. Я тут нашёл раскодировщик кодированного значения, вызов call идёт сразу за инструкцией, куда я сделал вставку кода:

mov eax,[006897CC]
mov ecx,[006897C8] //адреса статические, но содержимое изменчиво
xor eax,ecx
mov ecx,[esp+04] //в ecx кодированное значение из стека
xor eax,ecx //в eax - раскодированное значение
ret

На выходе в eax будет раскодированное значение здоровья, патронов. Можно ли отсюда написать кодировщик? У меня мало опыта с ксорами...

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

"Раскодировку" можно сделать применив xor повторно.

A xor B = C

Раскодировка:

B = A xor C // если известны А и С

A = B xor C // если известны В и С

Потренироваться можно на Windows калькуляторе в инженерном режиме.

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

Всё, нашёл ошибку. Теперь работает и замораживает положенные 100% здоровья и брони. Ура!

Новые версии скриптов.

Бессмертие:


//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
push ebx
mov ebx,#100 //Некодированное значение здоровья и брони
push eax
push ecx
mov eax,[006897CC] //
mov ecx,[006897C8] //Эти два mov
xor eax,ecx //
xor eax,ebx // и два xor переписаны из функции раскодирования
mov ebx,eax //теперь в ebx кодированное значение числа 100
pop ecx //команду выше можно изменить на xchg eax,ebx - минус 1 байт
pop eax
mov [eax+000006B0],ebx //100% здоровья
mov [eax+000006B4],ebx //100% брони
pop ebx

originalcode:
mov eax,[eax+000006B0]

exit:
jmp returnhere

"Chaser.exe"+1DEE52:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Chaser.exe"+1DEE52:
mov eax,[eax+000006B0]
//Alt: db 8B 80 B0 06 00 00
[ENABLE]

Без перезарядки:


"Chaser.exe"+1D7F27:
db 90 90 90

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

"Chaser.exe"+1D7F27:
mov [ecx+edi*4],eax
mov edx,[esi+1C]
//Alt: db 89 04 B9 8B 56 1C
[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
push ebx
mov ebx,#99 //Некодированное число гранат
push eax
push ecx
mov eax,[006897CC] //
mov ecx,[006897C8] //Эти два mov
xor eax,ecx //
xor eax,ebx // и два xor переписаны из функции раскодирования
mov ebx,eax //теперь в ebx кодированное значение числа 99
pop ecx //команду выше можно изменить на xchg eax,ebx - минус 1 байт
pop eax
mov [ecx+edx*8],ebx //99 гранат
pop ebx


originalcode:
mov eax,[ecx+edx*8]
lea edi,[ecx+edx*8]

exit:
jmp returnhere

"Chaser.exe"+CBBE:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Chaser.exe"+CBBE:
mov eax,[ecx+edx*8]
lea edi,[ecx+edx*8]
//Alt: db 8B 04 D1 8D 3C D1
[ENABLE]

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

Не невидимость, а режим полёта. Ага, его никто пофиксить не взялся :( Чит был бы полезен. Чтобы пройти игру мне частенько приходилось смотреть прохождение на ютубе ибо найти эти люки в полу и под потолком частенько бывает трудно)

Сейчас пожалуй выложу тренер-таблицу в другой теме...

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

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

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

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