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

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

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

Собственно проблема: при попытке присоединить отладчик CE к игре - вылет игры с ошибкой. Если просто искать значения, то находит, меняет, замораживает без проблем. Но стоит поставить бряк и вылет. Вопрос для гуру: может есть хитрая опция для сокрытия отладчика(подозреваю что это защита рубит)? :mad:

P.S. Версия CE 6.1 Beta3 и русификатор от SER[G]ANT(отдельная благодарность за труды!). Проверялось на версиях 1.0.0.1 и 1.0.0.2. Если ошибся темой - прошу прощения.

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

Darth_Brovius В настройках программы (CE 6.1) установите параметры где "Debugger options" Использовать отладчик в "Режиме Ядра" (Use kernelmode debugger). Вылетов не должно быть.

Darth_Brovius переименуйте тему с Ведьмак 2 от 1с и отладчик на Ведьмак 2 и все вопросы относящее к этой игре будут решаться здесь. Думаю так будет норм.

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

Darth_Brovius В настройках программы (CE 6.1) установите параметры где "Debugger options" Использовать отладчик в "Режиме Ядра" (Use kernelmode debugger). Вылетов не должно быть.

Darth_Brovius переименуйте тему с Ведьмак 2 от 1с и отладчик на Ведьмак 2 и все вопросы относящее к этой игре будут решаться здесь. Думаю так будет норм.

Думаю тему вообще надо переименовать в "CE и Win7 64". Все мои проблемы от операционки. Указанный способ не работает, пишет что-то об отсутствии цифровой подписи. :(

http://forum.cheatengine.org/viewtopic.php?t=536704

Тут аж на 10 страниц тема расползлась

За таблицу огромное спасибо! Почему бы не выложить на этом форуме?

P.S. Что больше всего удручает, так это то, что поставив нодвд игра стала более быстро шевелиться... :blink:

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

Darth_Brovius перенести в Общие вопросы по Cheat Engine

Я бы с удовольствием, но не знаю как это сделать. :-[

P.S. С работой малёк разгребусь, буду пытаться отключить в семёрке блокирование не подписанных драйверов...

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

блокирование не подписанных драйверов...

Отключать блокировку неподписанных драйверов можно при загрузке системы. Надо как только пройдет BIOS POST, сразу нажать F8 и выбрать соответствующий пункт меню.

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

Загрузку не подписанных драйверов включил. Но есть теперь другая проблема: если стоит галочка "использовать процедуру Глобальной Отладки" - выдает BSoD. Если нет - то пишет, что запустить отладчик не удалось. И потом показывает что моя система не поддерживает DBVM(до запуска отладчика показывал что поддерживает). Процессор Core i7 860. :mad:

Опция "Возможность выполнять код ядра" никакого видимого эффекта не оказывает.

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

у меня вот другой вопрос по этой же игре.


[ENABLE]
alloc(newmem,2048)
label(vitality)label(returnhere)
label(originalcode)
label(wied)
registersymbol(wied)

newmem:
vitality:
push ebx
mov ebx,[witcher2.exe+022BC5F4]
mov ebx,[ebx+14]
mov ebx,[ebx+14]
mov ebx,[ebx+8]
mov [wied],ebx
pop ebx

cmp eax,[wied]
jne originalcode

push [eax+4]
pop [eax]

originalcode:
fld dword ptr [eax]
mov eax,[ebp+08]
jmp returnhere

wied:
dd 0

witcher2.exe+8CA4:
jmp vitality
returnhere:

[DISABLE]
dealloc(newmem)
unregistersymbol(wied)
witcher2.exe+8CA4:
fld dword ptr [eax]
mov eax,[ebp+08]
//Alt: db D9 00 8B 45 08

Почему оно не работает? Краха нету, игра не вылетает, но и то, что надо, тоже не делает...

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

Можно всегда сразу с ebx (или др. выбранным регистром) сравнивать. Просто я привык по шаблону делать.

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

только такой вариант у меня нормально работает


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

newmem:
vitality:
push ebx
mov ebx,[witcher2.exe+022BC5F4]
mov ebx,[ebx+14]
mov ebx,[ebx+14]
mov ebx,[ebx+8]
cmp [eax],ebx
pop ebx
jne short originalcode
push esi
mov esi,[witcher2.exe+022BC5F4]
mov esi,[esi+14]
mov esi,[esi+14]
mov esi,[esi+0C]
mov [eax],esi
pop esi
originalcode:
fld dword ptr [eax]
mov eax,[ebp+08]
jmp returnhere

witcher2.exe+8CA4:
jmp vitality
returnhere:

[DISABLE]
dealloc(newmem)

witcher2.exe+8CA4:
fld dword ptr [eax]
mov eax,[ebp+08]

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

Не бывает игр без сюрпризов )))

Здесь все переменные обрабатываются одной и той же инструкцией по адресу witcher2.exe+8CA4. Имея статические указатели можно творить безумие )))

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

...Здесь все переменные обрабатываются одной и той же инструкцией по адресу witcher2.exe+8CA4...

В таких ситуациях я всегда заходил в тупик.

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

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

Нужен массив булевых данных(1 байт, значение ноль или один) в выделенной памяти, которые изменяет пользователь по хоткеям.

Нужные сравнения и прыжки.

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

это понятно, но

Допустим, у нас есть инструкция "fld dword ptr [eax]", на ее основе нам нужно сделать, к примеру, 3 опции - бессмертие (option1), убийство с 1 удара (option2), бесконечная энергия (option3), чтобы их можно было аткивировать в любом порядке и любом сочетании

Пишем скрипт


option1: //бессмертие
cmp [flag1],1 // активирована ли опция "Бессмертие" ?
jne short option2 //если нет, то проверяем активацию опции "Убийство с 1 Удара"
cmp [eax],_health //указатель на здоровье игрока ?
jne short option2 //если нет, то переходим к option2
mov [eax],63

option2: //убийство с 1 удара
cmp [flag2],1 // активирована ли опция "Убийство с 1 Удара" ?
jne short option3 //если нет, то проверяем активацию опции "Бесконечная Энергия"
cmp [eax],_ohk //указатель на здоровье противника ?
jne short option3 //если нет, то переходим к option3
mov [eax],1

option3: //энергия
cmp [flag3],1 // активирована ли опция "Бесконечная Энергия" ?
jne short originalcode //если нет, то выполняем оригинальный код
cmp [eax],_energy //указатель на здоровье энергию ?
jne short originalcode //если нет, то выполняем оригинальный код
mov [eax],63

originalcode:
fld dword ptr [eax]
mov eax,[ebp+08]

Меня терзают смутные сомнения по поводу написанного мной...

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

Вроде, может работать )

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

Вообще можно попробовать сделать циклом на ассемблере (хорошее упражнение по программированию) :)

И ещё может потребоваться сохранять/восстанавливать регистр флагов pushfd/popfd до и после тела чит-кода.

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

  • 2 недели спустя...
  • 2 месяца спустя...
ANT' date='27 Май 2011 - 00:04' timestamp='1306440261' post='3117']

Можно всегда сразу с ebx (или др. выбранным регистром) сравнивать. Просто я привык по шаблону делать.

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

только такой вариант у меня нормально работает


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

newmem:
vitality:
push ebx
mov ebx,[witcher2.exe+022BC5F4]
mov ebx,[ebx+14]
mov ebx,[ebx+14]
mov ebx,[ebx+8]
cmp [eax],ebx
pop ebx
jne short originalcode
push esi
mov esi,[witcher2.exe+022BC5F4]
mov esi,[esi+14]
mov esi,[esi+14]
mov esi,[esi+0C]
mov [eax],esi
pop esi
originalcode:
fld dword ptr [eax]
mov eax,[ebp+08]
jmp returnhere

witcher2.exe+8CA4:
jmp vitality
returnhere:

[DISABLE]
dealloc(newmem)

witcher2.exe+8CA4:
fld dword ptr [eax]
mov eax,[ebp+08]

Скрипт работает нормально но при переходе в другой уровень игры, (в локации при загрузках) игра вылетает.

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

Возможные причины:

1) По этому указателю:


mov ebx,[witcher2.exe+022BC5F4]
mov ebx,[ebx+14]
mov ebx,[ebx+14]
mov ebx,[ebx+8]

где-то на уровнях отсутствует указатель, например, там где [ebx+8] бывает ноль. Чтение этого значения вызовет вылет. Чтобы этого не было, нужно проверять указатели.

2) Причина, может быть вызов перемещённой инструкции:


witcher2.exe+8CA4:
fld dword ptr [eax]
mov eax,[ebp+08] // например код пытался вызвать эту перемещённую инструкцию

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

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

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

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