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

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


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

Здесь можно задавать общие вопросы по Cheat Engine в том числе и русской.

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

Старайтесь задавать вопросы, которые больше относятся к специфике Cheat Engine, а не по играм которые ей можно обмануть. К этим вопросам можно отнести применение той или иной функции, общие настройки Cheat Engine, настройки отдельных функций, ошибки и т.д.

Вопрос должен быть привязан к специфике cheat engine, а уже в последнюю очередь к игре. В противном случае лучше задать вопрос в форуме по взлому игр.

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

  • Ответов 287
  • Создана
  • Последний ответ

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

После того как скачал любую версию СЕ и нажимаю "Открыть", выходит вот такая ошибка:

e75811df9c4e.jpg

Перепробовал не все, так как не знаю что делать. Так, что делать?

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

Данная проблема произошла по моей вине в русской CE версии ниже 1.0.0 (а может и более ранняя версия, т.е. та, которая ниже 1.0.0)

Решение такое:

1) Сохранить нужные файлы, например, таблицы.

2) Корректно удалить CE инсталлятором (вроде такой должен быть, если я не ошибаюсь)

3) Установить инсталлятором англискую CE

4) Скопировать в директорию программы, главный файл CE RUS ни ниже 1.0.0. ,если нужно пользоваться русской версией.

Проблема из-за того, что в реестре остаются не верные данные от CE RUS после её закрытия, после чего могут быть проблемы с английской версией, которая также напортачит в реестре. Затем ни одна версия не откроется.

Увы, моя вина... но сейчас такого быть не должно.

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

Еще один вопрос, тупой. Просто интересно. Возможно ли каким либо образом СЕ открыть таблицы ArtMoney? В СЕ нажимаешь откурыть, в "Тип Файлов" выбираю "ArtMoney Tables". Выбираю какую нужно таблицу и выходит что СЕ не может загрузить версию таблиц ArtMoney.

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

Я думаю, ты делал всё правильно, наверно, просто есть какие-то ошибки в коде CE. В CE предусмотрено открывать таблицы артмани, попробуй открыть английской версией CE, если не пробовал.

О багах русской версии.

1) В версии CE RUS 1.2.0 трейнер сделать почему-то нельзя.

2) Почему-то CE автоматически сохраняет таблицы с названиями без расширения .CT.

Например у меня в папке лежит "spider.CT" и просто "spider". Если вас беспокоит этот "мусор", то вы можете его удалить.

3) В русской версии до 1.2.0 замечено, что генерируемые ей трейнеры прибавили в весе чуть ли не 6 мб.

Мною было решено, дождаться выхода версии 5.6 и модернизировать уже только её. А версию CE 5.5 RUS 1.2.0 можно считать больше не обновляемой. Следующая версия будет CE 5.6 RUS.

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

Я думаю, ты делал всё правильно, наверно, просто есть какие-то ошибки в коде CE. В CE предусмотрено открывать таблицы артмани, попробуй открыть английской версией CE, если не пробовал.

[...]

.

Да, английской тоже пробовал. Может это из-за того что у меня ArtMoney версии 7.30? Сейчас уже более поздняя версия, намного, есть.

Мною было решено, дождаться выхода версии 5.6 и модернизировать уже только её. А версию CE 5.5 RUS 1.2.0 можно считать больше не обновляемой. Следующая версия будет CE 5.6 RUS

Ух ты...интересно на это посмотреть.

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

А в СЕ так и должно быть: Когда пытаюсь сохранить таблицу, он мне выводит окно - "Сделай трейнер...пожалуйста". Я его посылаю и все...потом заново. Короче, нельзя что ли иметь таблицу в СЕ как в ArtMoney?

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

Короче, нельзя что ли иметь таблицу в СЕ как в ArtMoney?
Можно. Сохраняешь как "имя файла.CT" и будет сохранён файл с табличными данными.
Ссылка на комментарий
Поделиться на другие сайты

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

И кстати в 1.2.0 у меня не получалось сделать тренер. Причина оказалась в иконке. Если пытаюст изменить иконку файла, тренер генерируется, но ругается при запуске что мол "приложение не является Win32". Если оставить иконку по умолчанию, всё работает. Ждём новых версий :)

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

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

Откопал исходники сходники CE 5.6, сейчас качну и гляну рабочие ли они.

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

Задали мне такой вопрос, про то как работают активирующие скрипты. Разберём пример.

//=========================================

// ParaWorld

// Game Version : 1.0

// Script Version: 1.0

// CE Version : 5.5

// GodMode and Resources

// 16-Jan-2010

//=========================================

[ENABLE]

alloc(MyCode,1024)

//=========================================

// Declaration section

label(_GodMode)

label(_BackGM)

label(_ExitGM)

label(_MonID)

label(_BackMI)

label(_MonRes)

label(_BackMR)

label(_ExitMR)

label(pHero)

label(pUnit)

label(pRes)

label(iEnableGM)

label(iEnableMR)

label(iPlayerID)

registersymbol(MyCode)

registersymbol(pHero)

registersymbol(pUnit)

registersymbol(pRes)

registersymbol(iEnableGM)

registersymbol(iEnableMR)

registersymbol(iPlayerID)

//=========================================

// Hacking Points

PWServer.exe+1c408c:

jmp _GodMode

nop

_BackGM:

PWServer.exe+045540:

jmp _MonID

nop

nop

_BackMI:

PWServer.exe+237944:

jmp _MonRes

nop

_BackMR:

MyCode:

//=========================================

_GodMode:

cmp dword ptr [iEnableGM],0

je _ExitGM // Jump if feature is disabled

mov eax,[iPlayerID] // Get player ID

cmp eax,[esi+10] // Is it a playerґs Object?

jne _ExitGM // Jump if false

mov [pHero],esi // Save pointer for debugging

mov dword ptr [esp+08],0 // value2decrease = 0

mov eax,[esi+0000061c] // Get Max HP

mov [esi+00000618],eax // Update HP

_ExitGM:

fld dword ptr [esi+00000618] // Original code

jmp _BackGM // Back to main code

//=========================================

_MonID:

mov ecx,[esp+2c] // Original code

mov [pUnit],ecx // Save ptr for debugging

push ebx

mov ebx,[ecx+10] // Original code

mov [iPlayerID],ebx // Save Player ID for further use

pop ebx

cmp eax,[ecx+10] // Original code

jmp _BackMI // Back to main code

//=========================================

// EDI = ptr to Worker

_MonRes:

cmp dword ptr [iEnableMR],0

je _ExitMR // Jump if feature is disabled

or edi,edi // Valid pointer?

jz _ExitMR // Jump if false

mov eax,[iPlayerID] // Get player ID

cmp eax,[edi+10] // Is it a playerґs worker?

jne _ExitMR // Jump if false

mov [pRes],esi // Save ptr for debugging

mov eax,459c4000 // Get cheat value

cmp eax,[esi+000002dc] // Current value >= cheat value?

jle _ExitMR // Jump if true

mov [esi+000002dc],eax // Update value

_ExitMR:

fld dword ptr [esi+000002dc] // Original code

jmp _BackMR // Back to main code

//=========================================

// Variables

pHero:

dd 0

pUnit:

dd 0

pRes:

dd 0

iEnableGM:

dd 1

iEnableMR:

dd 1

iPlayerID:

dd 0

//=========================================

// Original Codes

[DISABLE]

PWServer.exe+1c408c:

fld dword ptr [esi+00000618]

PWServer.exe+045540:

mov ecx,[esp+2c]

cmp eax,[ecx+10]

PWServer.exe+237944:

fld dword ptr [esi+000002dc]

dealloc(MyCode)

unregistersymbol(MyCode)

unregistersymbol(pHero)

unregistersymbol(pUnit)

unregistersymbol(pRes)

unregistersymbol(iEnableGM)

unregistersymbol(iEnableMR)

unregistersymbol(iPlayerID)

Пишем вспомогательные скрипты, типа этого


[ENABLE]
iEnableGM:
db 01

[DISABLE]
iEnableGM:
db 00
//Скрипт2

На главный скрипт вешаем хот-кей ctrl+0.

На скрипт2 вешаем хот-кей ctrl+1.

Когда идём в игру, то нажимает на ctrl+0 один раз. Затем можем включать читы, например нажав ctrl+1.

Активирующим скриптом я называю первый скрипт. Остальные - вспомогательными.

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

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

Бывают ещё сообщения:

strhappybirthday='Let''s sing Happy Birthday for Dark Byte today!';

strXMess='Merry christmas and happy new year';

strNewyear='And what are your good intentions for this year? ;-)';

strfuture='Wow,I never imagined people would use Cheat Engine up to today';

Если в образовательных целях, то сообщение с первоапрельской шуткой вылазит здесь..

[cod]procedure TMainForm.FormShow(Sender: TObject);

resourcestring

strhappybirthday='Let''s sing Happy Birthday for Dark Byte today!';

strXMess='Merry christmas and happy new year';

strNewyear='And what are your good intentions for this year? ;-)';

strfuture='Wow,I never imagined people would use Cheat Engine up to today';

var reg: tregistry;

modifier: dword;

key: dword;

hotkey: string;

year,month,day: word;

temp:string;

i: integer;

outputfile: textfile;

go:boolean;

loadt: boolean;

firsttime: boolean;

x: array of integer;

begin

Set8087CW($133f);

loadt:=false;

edit2.Text:=format('%.1f',[1.0]);

reg:=Tregistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if not Reg.OpenKey('SoftwareCheat Engine',false) then

begin

if Reg.OpenKey('SoftwareCheat Engine',true) then

begin

//write some default data into the register

reg.WriteBool('Undo',true);

reg.writeBool('Advanced',true);

reg.writeBool('SeperateThread',true);

reg.writebool('Use Hyperscan if posible',false);

reg.WriteInteger('ScanThreadpriority',formsettings.combothreadpriority.itemindex);

end;

end;

except

end;

if reg.ValueExists('First Time User') then

firsttime:=reg.ReadBool('First Time User')

else

firsttime:=true;

if firsttime then

begin

reg.WriteBool('First Time User',false);

if messagedlg('Do you want to try out the tutorial?',mtconfirmation,[mbyes,mbno],0)=mryes then

shellexecute(0,'open','Tutorial.exe','','',sw_show);

end;

// animatewindow(mainform.Handle,10000,AW_CENTER);

//mainform.repaint;

fronttext:='brings Cheat engine to front';

if dontrunshow then exit;

dontrunshow:=true;

decodedate(now,year,month,day);

if (month=7) and (day=1) then showmessage(strhappybirthday);

if (month=12) and ((day=25) or (day=26)) then Showmessage(strXmess);

if (month=1) and (day=1) then showmessage(strnewyear );

if (month=1) and (day=1) and (year>=2010) then showmessage(strFuture);

if (month=4) and (day=1) then aprilfools:=true;

if aprilfools=true then

Messagedlg('Your license to use Cheat Engine has expired. You can buy a license to use cheat engine for 1 month for $200, 6 months for only $1000 and for 1 year for only $1800.'+' If you don''t renew your license Cheat Engine will be severely limited in it''s abilities. (e.g: Next scan has been disabled)',mtwarning,[mbok],0);

LoadSettingsFromRegistry;

//Load the table if one was suplied

overridedebug:=false;

if paramcount>=1 then

begin

loadt:=true;

if uppercase(paramstr(1))='-O' then

begin

OverrideDebug:=true;

loadt:=false;

end;

if paramcount>1 then

begin

//extra param

temp:=paramstr(2);

if length(temp)>4 then

if temp[1]+temp[2]+temp[3]='/o=' then

begin

//output to:

temp:=copy(temp,4,length(temp)-3);

assignfile(outputfile, temp);

rewrite(outputfile);

for i:=0 to numberofrecords-1 do

writeln(outputfile,memrec.description+' '+IntToHex(memrec.Address,8));

closefile(outputfile);

showmessage(temp+' has been created');

end;

end;

end else

begin

end;

if loadt then

begin

LoadTable(paramstr(1),false);

updatescreen;

updatelist;

end;

if GetSystemType<3 then //not a supported os for hardware breakpoints

with formsettings do

begin

rdWriteExceptions.Checked:=true;

rbDebugRegisters.Enabled:=false;

label6.Enabled:=false;

label7.Enabled:=false;

rbDebugAsBreakpoint.Enabled:=false;

rbInt3AsBreakpoint.Checked:=true;

end;

if (GetSystemType<4) {or (is64bitos)} then //not nt or later

begin

with formsettings do

begin

cbKernelQueryMemoryRegion.enabled:=false;

cbKernelReadWriteProcessMemory.enabled:=false;

cbKernelOpenProcess.enabled:=false;

cbProcessWatcher.Enabled:=false;

cbKDebug.enabled:=false;

cbGlobalDebug.enabled:=false;

TauntOldOsUser.Visible:=true;

label25.Enabled:=false;

end;

end;

vartypechange(vartype);

adjustbringtofronttext;

if aprilfools then

caption:=cenorm+' EXPIRED!';

if autoattachtimer.enabled then autoattachcheck;

//SMenu:=GetSystemMenu(handle,false);

//don't put this in oncreate, just don't

if memscan=nil then

memscan:=tmemscan.create(progressbar1);

memscan.setScanDoneCallback(mainform.handle,wm_scandone);

FileAccessTest;

end;[/cod]

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

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

Приведу пример скрипта по добавлению опыта по нажатию горячей клавиши.


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

H5_Game.exe+75AA80:
jmp newmem
returnhere:

newmem:
cmp byte ptr [_Exp],1
jne originalcode
add [ecx+60],3E8
mov [_Exp],0
originalcode:
mov eax,[ecx+60]
ret
int 3
jmp returnhere

_Exp:
db 0

[DISABLE]
H5_Game.exe+75AA80:
mov eax,[ecx+60]
ret
int 3

после активации скрипта нужно добавить в таблицу значений адрес _Exp и навесить горячую клавишу чтобы присваивать значение 1. Как только скрипт добавит значение то переменная станет равна 0.

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

Вот ещё самописный скрипт на тему "Активирующие скрипты".

{
Герои Меча и Магии 5 - Повелители орды
Версия игры : 3.1
Версия скрипта : 1.1
Версия СЕ : 5.6
Автор: Akama
}

[ENABLE]
alloc(MyCode,2048)

label(_MovePoints)
label(_ExitMP)
label(_Troops)
label(_ExitT)
label(_Resource)
label(_ExitR)
label(_Expirience)
label(_BackExp)
label(_ExitExp)
label(_Mana)
label(_ExitM)
label(_Buildings)
label(_ExitB)
label(_DarkEnergy)
label(_ExitDE)
label(_Atributes)
label(_ExitAtr)
label(_MP)
label(_Tr)
label(_Bl)
label(_M)
label(_Res)
label(_DE)
label(_Atr)
label(_Exp)


registersymbol(MyCode)
registersymbol(_MP)
registersymbol(_Tr)
registersymbol(_Bl)
registersymbol(_M)
registersymbol(_Res)
registersymbol(_DE)
registersymbol(_Atr)
registersymbol(_Exp)
//=========================================
//??? ???????
MyCode:
_MovePoints:
cmp [_MP],1
jne _ExitMP
cmp ecx,ebx
jne _ExitMP
//push eax
//mov [ecx+130],1E240
//mov eax,[ecx+130]
mov eax,1E240
mov [ecx+12c],eax
//pop eax
jmp _ExitMP

_Troops:
cmp [_Tr],1
jne _ExitT
mov [eax+20],92E
jmp _ExitT

_Buildings:
cmp [_Bl],1
jne _ExitB
mov [esi+80],1
jmp _ExitB

_Expirience:
cmp byte ptr [_Exp],1
jne _BackExp
add [ecx+60],3E8
mov [_Exp],0
_BackExp:
mov eax,[ecx+60]
ret
int 3
jmp _ExitExp

_DarkEnergy:
cmp [_DE],1
jne _ExitDE
add [ecx+638],3E8
mov [_DE],0
jmp _ExitDE

_Atributes:
cmp [_Atr],1
jne _ExitAtr
add [ecx+30],1
add [ecx+34],1
add [ecx+38],1
add [ecx+3c],1
add [ecx+40],0A
add [ecx+44],0A
mov [_Atr],0
//mov eax,[ecx+30]
xor edx,edx
jmp _ExitAtr

_Mana:
cmp [_M],1
jne _ExitM
push ebx
mov ebx,[ecx+00000140]
mov [ecx+13c],ebx
pop ebx
mov eax,[ecx+0000013c]
jmp _ExitM

_Resource:
cmp [_Res],1
jne _ExitR
add [ecx],1F4
add [ecx+4],1F4
add [ecx+8],1F4
add [ecx+c],1F4
add [ecx+10],1F4
add [ecx+14],1F4
add [ecx+18],2B995A
mov [_Res],0
jmp _ExitR
//=========================================
//??????????
_MP:
db 0

_Tr:
db 0

_Bl:
db 0

_Res:
db 0

_DE:
db 0

_M:
db 0

_Atr:
db 0

_Exp:
db 0
//=========================================
//???????? ??????????
H5_Game.exe+74BCBD:
jmp _MovePoints
nop
_ExitMP:

H5_Game.exe+1EDE0D:
jmp _Troops
nop
nop
nop
nop
nop
_ExitT:

H5_Game.exe+8D4E0F:
jmp _Buildings
nop
nop
nop
nop
nop
_ExitB:

H5_Game.exe+6F7F40:
jmp _Mana
nop
_ExitM:

H5_Game.exe+FB90B:
jmp _DarkEnergy
_ExitDE:

H5_Game.exe+74C190:
jmp _Atributes
_ExitAtr:

H5_Game.exe+5D0470:
jmp _Resource
_ExitR:

H5_Game.exe+75AA80:
jmp newmem
_ExitExp:
//========================================
[DISABLE]
H5_Game.exe+74BCBD:
mov [ecx+0000012c],eax

H5_Game.exe+1EDE0D:
mov edx,[eax+20]
mov [esp+000000e4],ecx

H5_Game.exe+8D4E0F:
mov [esi+00000080],0

H5_Game.exe+FB90B:
mov [ecx+00000638],eax

H5_Game.exe+74C190:
mov eax,[ecx+30]
xor edx,edx

H5_Game.exe+5D0470:
mov esi,[ecx]
cmp esi,[edx+ecx]

H5_Game.exe+6F7F40:
mov eax,[ecx+0000013c]

H5_Game.exe+75AA80:
mov eax,[ecx+60]
ret
int 3

dealloc(MyCode)
unregistersymbol(_M)
unregistersymbol(_MP)
unregistersymbol(_Tr)
unregistersymbol(_Bl)
unregistersymbol(_Res)
unregistersymbol(_DE)
unregistersymbol(_Exp)
unregistersymbol(MyCode)

скрипт сам писал, и трейнер тоже по нему существует. (Верите или нет, но это единственный трейнер для русской игры 3.1)

P.S.Кстати, MasterCH, я всё таки разобрался в чём проблема с опытом, я там слегна нарушил порядок инструкций, по-этому игра крашилось, сейчас всё адекватно.

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

Если нужны мои комментарии, то первый твой пример в новинку может быть полезным для многих, а второй можно воспринять как закрепление материала по "активирующим" скриптам :)

Немного поправлю:

newmem:

cmp byte ptr [_Exp],1

jne short originalcode // корткий прыжок не пишет лишних нопов в теле чит-кода

add [ecx+60],3E8

mov [_Exp],0

originalcode:

mov eax,[ecx+60]

ret // эта инструкция "конечная станция" ^_^ поэтому...

int 3// ...можно было не писать

jmp returnhere // ...можно было не писать

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

Ну дык мы ж народ простой, чё пишут то в оригинал код и вписываем )))

jmp short можно использовать в таких огромных скриптах как мой? Там прыжок не такой уж и маленький...

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

Akama, попробуй сам проверить, я к сожалению не помню: вроде прыжок может быть на расстоянии (0xFFFF-1) / 2 вверх и вниз. Или (0xFF-1)/2. Или без "-1"

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

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

Чисто для справки из личного опыта по написанию огромных скриптов дам совет: прежде чем писать само тело скрипта ОБЯЗАТЕЛЬНО нужно для одной функции создать 3 лейбла - начало функции, ориг код и выход из функции.

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

label(GodMode) // Это начало чита

label(BackGM) // это начало оригинального кода того же чита

label(ExitGM) // это выход из него. (аналог returnhere)

И так в каждой функции, должно быть начало, кусок ориг кода и выход из него. Без чего то либо из этих трёх может случиться крах игры либо неадекватное действие скрипта.

Вот собственно и всё )))

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

Ещё один мини совет: если хотите чтобы в переменную вписывался нужный адрес (например здоровья), то:

1) если функция типа А, то просто копируйте значение указателя в переменную.

2) Если тип В или С, то перед этим нужно отфильтровать остальные значения, чтобы в обработку попал только нужный адрес.

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

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

Классификация инструкций сработавших при брейкпоинте.

-Тип А

Данная инструкция работает с некоторым единственным параметром только определённого игрового объекта.

Например, здоровье от структуры находится по смещению +155. Инструкция А, работает только с этой структурой, только со смещением +155.

-Тип B

Эта инструкция работает с параметрами двух и более объектов, параметры которых находятся по одинаковым смещениям.

Например, у нас шесть объектов - игроков, у которых по смещениям +155 находится здоровье. Инструкция типа B получает указатель на начало некоторой структуры объекта игрока, прибавляет смещение +155 и работает с параметром (читает параметр из адреса или пишет в адрес). Таким образом, инструкция типа B может отнимать здоровье у героя, а также отнимать здоровье у врагов.

-Тип С

Данный тип инструкций может работать с данными находящимися не по одному (как при типах А и В), а по разным смещениям относительно одной или более структур. Стоит не путать тип А с С, т.к. инструкция А работает с одним смещением, тоже самое касается и B.

Отсюда мы получаем подтипы:

C(А) - работает с разными смещениями одной структуры (объекта);

C(B) - работает с разными смещениями более одной структуры (объекта).

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

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

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

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