Рекомендуемые сообщения
-
- Поделиться
Всем привет!
Столкнулся с интересной проблемой.
Есть такая старенькая игрушка «Гарри Поттер и Философский камень» =)
Пытался сломать значение бобов в этой игрушке и получил в итоге:
INJECT,Core.dll,ОШИБКА: Не удалось найти уникальный массив байт. Опробованный код "8B 08 89 0A C2 08 00"
Насколько я понимаю, CE требуется уникальный массив байт, он же AoB.
Пытался добавить вручную байт, получилось что-то вроде этого:
aobscanmodule(INJECT,Core.dll,"8B 54 24 04 8B 08 89 0A C2 08 00") // should be unique
Всё равно отказывается работать. Как таки получить уникальный массив байт?
Весь текст скрипта полностью:
Скрытый текст
{ Game : game.exe
Version:
Date : 2017-04-24
Author : SergBrNord
This script does blah blah blah
}
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
aobscanmodule(INJECT,Core.dll,ОШИБКА: Не удалось найти уникальный массив байт. Опробованный код "8B 08 89 0A C2 08 00") // should be unique
alloc(newmem,$1000)
label(code)
label(return)
newmem:
code:
mov ecx,[eax]
mov [edx],ecx
ret 0008
jmp return
INJECT+6380DA8:
jmp newmem
nop
nop
return:
registersymbol(INJECT)
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT+6380DA8:
db 8B 08 89 0A C2 08 00
unregistersymbol(INJECT)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40
"Core.dll"+6CF24: 8B 54 24 04 - mov edx,[esp+04]
"Core.dll"+6CF28: 8B 08 - mov ecx,[eax]
"Core.dll"+6CF2A: 89 0A - mov [edx],ecx
"Core.dll"+6CF2C: C2 08 00 - ret 0008
"Core.dll"+6CF2F: 90 - nop
"Core.dll"+6CF30: 8B 49 34 - mov ecx,[ecx+34]
"Core.dll"+6CF33: 83 F9 01 - cmp ecx,01
"Core.dll"+6CF36: 75 0F - jne Core.dll+6CF47
"Core.dll"+6CF38: 8B 44 24 08 - mov eax,[esp+08]
"Core.dll"+6CF3C: 8B 54 24 04 - mov edx,[esp+04]
// ---------- INJECTING HERE ----------
"Core.dll"+6CF40: 8B 08 - mov ecx,[eax]
"Core.dll"+6CF42: 89 0A - mov [edx],ecx
"Core.dll"+6CF44: C2 08 00 - ret 0008
// ---------- DONE INJECTING ----------
"Core.dll"+6CF47: 85 C9 - test ecx,ecx
"Core.dll"+6CF49: 7E 0E - jle Core.dll+6CF59
"Core.dll"+6CF4B: 56 - push esi
"Core.dll"+6CF4C: 8B 74 24 0C - mov esi,[esp+0C]
"Core.dll"+6CF50: 57 - push edi
"Core.dll"+6CF51: 8B 7C 24 0C - mov edi,[esp+0C]
"Core.dll"+6CF55: F3 A5 - repe movsd
"Core.dll"+6CF57: 5F - pop edi
"Core.dll"+6CF58: 5E - pop esi
"Core.dll"+6CF59: C2 08 00 - ret 0008
}
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
12 минуты назад, SergBrNord сказал:
Всем привет!
AA Maker скрипт или ручками.
Советую набить руку в этом деле ибо не всегда получится использовать каждый байт.
Пример твоего AOB («8B 54 24 XX 8B 08 89 XX XX XX XX») что то типа такого.
Почему стоит набить руку и писать в подобном виде? Потому что есть игры в которых возможно часть кода поменяется.
Пример
xor eax,FFFFFFFF («QW ER TY UI OP»)
а потом бац
xor eax,FFFFFFF1 («QW ER TY UI GG»)
Надеюсь ясно /
Ссылка на комментарий
Поделиться на другие сайты
- Автор
-
- Поделиться
8 минут назад, what228 сказал:
AA Maker скрипт или ручками.
Советую набить руку в этом деле ибо не всегда получится использовать каждый байт.
Пример твоего AOB («8B 54 24 XX 8B 08 89 XX XX XX XX») что то типа такого.
Почему стоит набить руку и писать в подобном виде? Потому что есть игры в которых возможно часть кода поменяется.
Пример
xor eax,FFFFFFFF («QW ER TY UI OP»)
а потом бац
xor eax,FFFFFFF1 («QW ER TY UI GG»)Надеюсь ясно
/
Достаточно явно написано.
Но мне нужно пояснение. Я сейчас читаю параллельно статью Ридиана с форума CE. У него есть такой пример:
Я предполагал, что убираются одинаковые группы байт. Но глянул чуть подробнее — а там совсем не одинаковые группы байт. Т.е. идёт замена непосредственно адресов, которые используются в коде. Но у меня такого нет.
Изменено 24 апреля, 2017 пользователем SergBrNord
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
37 минуты назад, SergBrNord сказал:
Всё равно отказывается работать. Как таки получить уникальный массив байт?
В ручную. Скопируй примерное количество байт — штук 20 к примеру и выбрав в СЕ в поиске «Массив байт» проверить их… Не забыв кубик поставить — копируемая при записи. Я просто что заметил — если СЕ не находит рядом в районе + — 20 байт от нужного места нужный сигнатуры, а не находит он из за повтора байт (где то ещо подобное есть) то он выдаёт подобную ошибку.
Вот после как найдешь нужные байты в поиске массива — погляди между ними разницу. Вот эта разница и будет отличием уникальных байт.
Я не так давно для Gta sa +150 байт выше брал ну такие совпадения были. И разница была между ними только в джампе в 1 байте. В одном месте прыжок был + 3 а в другом уже более.. Вот это и была разница в сигнатуре. Не окажись этого джампа — пришлось бы больше байт брать и сверять уже. Надо найти в общем разницу совпадающими сигнатурами.
-
1
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
12 минуты назад, SergBrNord сказал:
Достаточно явно написано.
Убираются части которые могут смениться оставляет он такие вещи как mov movsx sub и eax ecx ebp и word ptr
Но легче проверить через поиск в CE и там уже убирать не нужные части ( повторяющиеся ) и оставлять лишь уникальные по отношению к другим найденным.
Изменено 24 апреля, 2017 пользователем what228
Ссылка на комментарий
Поделиться на другие сайты
- Автор
-
- Поделиться
10 минуту назад, LIRW сказал:
В ручную. Скопируй примерное количество байт — штук 20 к примеру и выбрав в СЕ в поиске «Массив байт» проверить их… Не забыв кубик поставить — копируемая при записи. Я просто что заметил — если СЕ не находит рядом в районе + — 20 байт от нужного места нужный сигнатуры, а не находит он из за повтора байт (где то ещо подобное есть) то он выдаёт подобную ошибку.
Вот после как найдешь нужные байты в поиске массива — погляди между ними разницу. Вот эта разница и будет отличием уникальных байт.
Попробовал поиском по массиву — 0 результатов, хотя AoB Scan выдаёт цифру в 4 совпадения.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
4 минуты назад, SergBrNord сказал:
Попробовал поиском по массиву — 0 результатов, хотя AoB Scan выдаёт цифру в 4 совпадения.
Вот и посмотри эти 4 совпадения и код рядом. В чем то да они отличаются.. Не много по выше к примеру какие то байты другие. Это видеть самому надо — я тут уже не помогу. Чем то, да отличаются они… Как и дописал выше о GTA я вот +150 байт брал выше…. Ну просто код был одинаковый и отличие было вот +150 только в джампе. Погляди что там рядом и гляди найдешь отличие…
Но делаешь ты на СЕ видать — то тебе и плагин в принципе пойдет выше описанный. Выдели там байт 50 и сгенерировав паттрен с плагине — попробуй его в массиве на уникальность.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
51 минуту назад, SergBrNord сказал:
Как таки получить уникальный массив байт?
Сегодня уже примерно такой же вопрос задавали, чтобы мне не дублировать свой ответ, вот ссылка на него.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
1 минуту назад, Garik66 сказал:
Сегодня уже примерно такой же вопрос задавали
Игорь если взглянуть на код в отладчике — то судя по нему в игре нет определенного модуля на сканирование. А этот плагин бестолковый на таких играх — не работает он на подобных юнити движках.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
Только что, LIRW сказал:
Игорь если взглянуть на код в отладчике — то судя по нему в игре нет определенного модуля на сканирование. А этот плагин бестолковый на таких играх — не работает он на подобных юнити движках.
А может ты полностью прочтёшь сообщение. и в ссылках тоже.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
2 минуты назад, Garik66 сказал:
А может ты полностью прочтёшь сообщение. и в ссылках тоже.
Читал я… Про байты думаю он и сам знает какие брать… Не даром он скрин показал с пропусками… А более там кроме плагина и нет не чего в той теме… Да ну и ладно — не будем спамить.. А я просто уже привык к юнити — постоянно на нем только и делал в последнее время трейнеры.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
1 час назад, LIRW сказал:
А более там кроме плагина и нет не чего в той теме…
Нужно читать внимательно, а не бегло, если уж пишешь в теме. Про плагин там практически ничего, так как плагин не работал на Моде для Дьябло, а все сигны я делал вручную и объяснил как.
5 часов назад, Garik66 сказал:
Нужно брать только байты опкодов (типа MOV, ADD и т.д.) все остальные байты заменять XX. И проверять после замены XX на уникальность сигнатуру, если не уникальная — удлиняешь дальше.
Собственно идея такая — с написанием патчей для игр в основном меняются адреса, но также могут поменяться и регистры тоже, смотри мою ссылку на сообщение в пред.посте, а вот опкоды, т.е. логика кода скорее всего не поменяются (ну если это не основательные изменения в игре).
Вот из-за этого та моя старая табличка оказалась такой долго живущей.
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
12 часа назад, SergBrNord сказал:
Есть такая старенькая игрушка «Гарри Поттер и Философский камень» =)
Качнул версию — Релиз группы: R.G.Creative — Автор репака: K0RW1N
12 часа назад, SergBrNord сказал:
Как таки получить уникальный массив байт?
Плагин или вручную.
11 час назад, LIRW сказал:
А этот плагин бестолковый на таких играх — не работает он на подобных юнити движках.
Вроде сработал, вот он что дал:
Скрытый текст
{ Game : HP.exe Version: 1.0 Date : 04-25-17 Author : Garik66 This script does blah blah blah Make by aamaker Lua plagin :) Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/ } [ENABLE] aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a) alloc(newmem,$1000) label(code) label(return) registersymbol(Primer) newmem: code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return Primer: jmp newmem nop nop return: [DISABLE] Primer: db 8B 08 89 0A C2 08 00 unregistersymbol(Primer) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08 - mov ebx,[ebp+08] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3 - imul eax,ebx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48 - mov edx,[esi+48] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2 - add eax,edx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9 - cmp edi,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690 Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38 - lea ecx,[eax+edi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16 - mov edx,[esi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10 - mov ecx,[ebp+10] // ---------- INJECTING HERE ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1 - add eax,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE - mov ecx,esi // ---------- DONE INJECTING ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70 - call dword ptr [edx+70] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0 - test eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0 - xor eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4 - mov ecx,[ebp-0C] Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000 - mov fs:[00000000],ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx }
SergBrNord, потесть, полученную сигну.
-
1
Ссылка на комментарий
Поделиться на другие сайты
- Автор
-
- Поделиться
1 час назад, Garik66 сказал:
Качнул версию — Релиз группы: R.G.Creative — Автор репака: K0RW1N
Плагин или вручную.
Вроде сработал, вот он что дал:
Показать содержимое
{ Game : HP.exe Version: 1.0 Date : 04-25-17 Author : Garik66 This script does blah blah blah Make by aamaker Lua plagin :) Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/ } [ENABLE] aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a) alloc(newmem,$1000) label(code) label(return) registersymbol(Primer) newmem: code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return Primer: jmp newmem nop nop return: [DISABLE] Primer: db 8B 08 89 0A C2 08 00 unregistersymbol(Primer) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08 - mov ebx,[ebp+08] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3 - imul eax,ebx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48 - mov edx,[esi+48] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2 - add eax,edx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9 - cmp edi,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690 Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38 - lea ecx,[eax+edi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16 - mov edx,[esi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10 - mov ecx,[ebp+10] // ---------- INJECTING HERE ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1 - add eax,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE - mov ecx,esi // ---------- DONE INJECTING ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70 - call dword ptr [edx+70] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0 - test eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0 - xor eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4 - mov ecx,[ebp-0C] Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000 - mov fs:[00000000],ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx }SergBrNord, потесть, полученную сигну.
У меня полная антология от R.G.Recoding, но сигнатура подошла как родная.
А вот что я получил (делал ручками):
Скрытый текст
{ Game : game.exe
Version: 1.0
Date : 2017-04-24
Author : SergBrNord
}
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
aobscanmodule(BEANS,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 16 8B XX XX XX 8B XX 56 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 8B XX XX XX 56 33 XX 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 90 90 90 90 90 90 90 90 90 90 90 90 8B XX XX XX 8B XX XX XX 6A 04 52 8B XX FF XX XX C2 XX XX) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
newmem:
cmp [eax+10], 65 //101
jne code
cmp [flag], 0
jne code
mov [eax], C8 //200
mov [flag], 1
code:
mov ecx,[eax]
mov [edx],ecx
ret 0008
jmp return
flag:
db 0
BEANS+6380DA8:
jmp newmem
nop
nop
return:
registersymbol(BEANS)
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
BEANS+6380DA8:
db 8B 08 89 0A C2 08 00
unregistersymbol(BEANS)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40
"Core.dll"+6CF24: 8B 54 24 04 - mov edx,[esp+04]
"Core.dll"+6CF28: 8B 08 - mov ecx,[eax]
"Core.dll"+6CF2A: 89 0A - mov [edx],ecx
"Core.dll"+6CF2C: C2 08 00 - ret 0008
"Core.dll"+6CF2F: 90 - nop
"Core.dll"+6CF30: 8B 49 34 - mov ecx,[ecx+34]
"Core.dll"+6CF33: 83 F9 01 - cmp ecx,01
"Core.dll"+6CF36: 75 0F - jne Core.dll+6CF47
"Core.dll"+6CF38: 8B 44 24 08 - mov eax,[esp+08]
"Core.dll"+6CF3C: 8B 54 24 04 - mov edx,[esp+04]
// ---------- INJECTING HERE ----------
"Core.dll"+6CF40: 8B 08 - mov ecx,[eax]
"Core.dll"+6CF42: 89 0A - mov [edx],ecx
"Core.dll"+6CF44: C2 08 00 - ret 0008
// ---------- DONE INJECTING ----------
"Core.dll"+6CF47: 85 C9 - test ecx,ecx
"Core.dll"+6CF49: 7E 0E - jle Core.dll+6CF59
"Core.dll"+6CF4B: 56 - push esi
"Core.dll"+6CF4C: 8B 74 24 0C - mov esi,[esp+0C]
"Core.dll"+6CF50: 57 - push edi
"Core.dll"+6CF51: 8B 7C 24 0C - mov edi,[esp+0C]
"Core.dll"+6CF55: F3 A5 - repe movsd
"Core.dll"+6CF57: 5F - pop edi
"Core.dll"+6CF58: 5E - pop esi
"Core.dll"+6CF59: C2 08 00 - ret 0008
}
Что интересно, после доработки сигнатуры, место в коде находится точно, но переход не прописывается никак.
Вот как это выглядит:
Скрытый текст
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
Потому что («BEANS+6380DA8«) означает прыжок на «6380DA8» байт после чего идет инъекция в том месте.
Тебе нужно удалить («+6380DA8«).
-
1
Ссылка на комментарий
Поделиться на другие сайты
- Автор
-
- Поделиться
2 минуты назад, what228 сказал:
Потому что («BEANS+6380DA8«) означает прыжок на «6380DA8» байт после чего идет инъекция в том месте.
Тебе нужно удалить («+6380DA8«).
Уже дошло. НЯП, нужно удалить в двух местах:
Скрытый текст
BEANS:
jmp newmem
nop
nop
return:
registersymbol(BEANS)
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
BEANS:
db 8B 08 89 0A C2 08 00
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
3 минуты назад, SergBrNord сказал:
Уже дошло. НЯП, нужно удалить в двух местах:
Да в двух т.к. при отключении нужно тоже восстановить байты и там тоже делается прыжок ( Ну это так для понятия ).
Изменено 25 апреля, 2017 пользователем what228
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
24 минуты назад, SergBrNord сказал:
BEANS+6380DA8: // далековато же ты прыгал jmp newmem [DISABLE] BEANS+6380DA8: db 8B 08 89 0A C2 08 00 // и портил игровой код
Игра, после отключения скрипта — не вылетала?
Ссылка на комментарий
Поделиться на другие сайты
- Автор
-
- Поделиться
В 25.04.2017в13:17, Garik66 сказал:
Игра, после отключения скрипта — не вылетала?
Нет. 0 реакции, побегал, поиграл – без проблем.
P.S.
Это привет от CE остался.
Изменено 29 апреля, 2017 пользователем SergBrNord
Ссылка на комментарий
Поделиться на другие сайты
-
#1
В этом гайде мы научимся заменять байты через прогу Cheat Engine. Тут всё понятно расписано как и что делать.
1. Запускаем обход. После запуска обхода открываем CheatEngine.
2.Находим процесс: crossfire.exe
3.После того как мы нашли процесс.Выбираем вкладку (Тип) и ищем (Array of Bytes)
4.В строке (Hex) прописывае начальные байты. Вот мы ввели начальный байты ножа (выделено красным)
5.Жмём на поиск. И слева вылазиют байты (они выделины красным) нам нужен первый (подчёркнут зелёным).
6.Теперь правой кнопкой мыши щелкаем по первому байту и нажимаем (Перейти в память по этому адресу).
7.Вылезет вот такое окно.
8.Ищем строку начинающиюся на 4D 6F 64. Теперь нам нужен полный байт оружия, на которое хотим поменять. Полностью выделяем свой (полный) байт. И возращаемся к Cheat Engine.
9.Жмем на 4D, ,и кликаем правой кнопкой мыши по этому значению.У вас откроется меню ,выбираем (Вставить из буфера обмена)
10. Вот что у нас получилось:
11.Внимание на символы в синем квадрате,слова knife заменились на слова вашего байта.
Результат:
Скачать эту программу сможете перейдя по сылке
Последнее редактирование модератором: 6 Ноя 2012
Перейти к контенту
13 часов назад, JackNewMan сказал:
Как-то неудобно немного. Возможно я чего-то не знаю или что-то делаю неправильно.
Дело в том, что у компьютерного процессора всего несколько регистров. RAX, RBX, RCX, и еше некоторые.
Для сравнения, — у человека есть всего две руки. Человек может одновременно держать в руках всего две вещи. Чтобы взять третью, необходимо положить первую или вторую. И так по очереди. Чтобы узнать, что держит человек сейчас, в данную миллисекунду, нужно подойти к нему именно в данную миллисекунду, и посмотреть. В следующую миллисекунду, человек уже возможно будет держать что-то другое, и мы уже не увидим и не узнаем, что было до этого.
Так и процессор, постоянно меняет содержимое своих регистров. А дело дебаггера, подойти к процессору, и как-бы поставить его на паузу, не давая ему взять что-то другое.
Человек может вести запись того, что он держал в своих руках последние 5, 10, 20, минут. Но специально человек этого не делает.
9 часов назад, Garik66 сказал:
для этих целей проще ИМХО воспользоваться опцией СЕ трассировка
Трассировка, это и есть запись процессором того, что он держал в своих регистрах в последние, указанные нами, секунды. Или не секунды, — я забыл, что-там указывается.
Unless I specify the region…
Maybe the process (yuzu) is to big in memory?
Also lua / asm aobscans don’t find either.
Cheat Engine 7.1 (Also tried 7.0 and different settings / debuggers)
Windows 10 pro v2004 64 bits
32gb ram / i7-6700 cpu
Is it related with this commit? c0534e3
Did you try to compile CE from source and above issue still exists?
I’m trying to compile the 64 bit but only the 32 app compiles :/ and that doesn’t scan at all.
lazarus-2.0.10-fpc-3.2.0-win64
lazarus-2.0.10-fpc-3.2.0-win32
lazarus-2.0.10-fpc-3.2.0-cross-x86_64-win64-win32
lazarus-2.0.10-fpc-3.2.0-cross-i386-win32-win64
What files should I install?
Does it find when you tick MEM_MAPPED option in «CE Settings->Scan settings»?
If not, you can try modify memscan.pas file, something like changing the lines with «size: dword» or «size: integer» to «size: qword»…
- yeah MEM_MAPPED is ticked
- Still the same changing line 5232: size: dword -> size: qword
- It’s weird because other scans work if they are early in memory (this one is 212629A0A50)
Start 0000000000000000 Stop 7fffffffffffffff doesn’t find
Start 21262900000 Stop 7fffffffffffffff does find…
I wrote «something like …».
You can try other places too. Maybe:
- «addressSize: dword» => «addressSize: qword»
- «memorySize: dword» => «memorySize: qword»
- «maxregionsize: dword» => «maxregionsize: qword»
If it still doesn’t work, then, I think there’s no an easy fix like this one c0534e3
Edit:
typo
I don’t know why but that worked, seems to be related to that 2GB, even if it’s not unknown initial value.
Also makes the lua scripts work.
Thank you so much for your help, I’m gonna keep making my cheat table
You can help and find the smallest possible change which fixes your issue.
Extract source files again. Then:
- do one change, build/compile
- check
- if problem exists, do next change, build/compile
- check
Note: while doing this, you should use Lazarus «Run=>Clean up and build project» (all options selected except «package output directories»).
Seems that
456: maxregionsize: qword; does the job
Normal Cheat Engine 7 doesn’t find anything, but extracting source files and changing that line finds the address.
OK. Thank you. This information should be useful. I’m adding permalink to this line:
maxregionsize: dword; //max size of buffer to be allocated when not unknown scan |
what is your buffersize in scansettings?
1024 KB Currently working fine with my compiled CE.
I was changing between 512 and 1024 and more settings but always failed to scan the one that I not compiled.
i can’t see why maxregionsize would cause a difference as it’s size is limited by buffersize.
but i’ll check (tomorrow)
(did you do a full build or a compile after getting the latest source?)
I also have to sleep
I deleted the entire folder cheat-engine-master and unziped again before editing that one line.
I used «Run=>Clean up and build project»; now has 1130 files but when I tried before it was 0 since I deleted all.
How many bytes is the AOB you’re scanning for ? more than 2000?
If you compile in debug-nomt 64-bit. Does it still fail ?
The array is around 50.
I have others with 500 that work fine.
Complied in debug-nomt 64-bit with the original master folder? Without touching line 456?
Without touching line 456?
Do both, the more information the better.
Both find the address, but takes much more time scanning. Around 3 minutes instead of 15 sec.
I see that master memscan.pas 456 it’s now maxregionsize: qword; instead of maxregionsize: dword;
To be perfectly sure. You extracted source files from that zip file you downloaded earlier, right?
To summarize it. This?
line 456 has dword | line 456 has qword | |
---|---|---|
build mode is release 64bit |
doesn’t find | finds |
build mode is debug-nomt 64-bit |
finds/slow | finds/slow |
or this?
line 456 has dword | line 456 has qword | |
---|---|---|
build mode is release 64bit |
doesn’t find | finds |
build mode is debug-nomt 64-bit |
doesn’t find | finds/slow |
Yep the first one, debug-nomt 64-bit slowly finds with dword and qword
release finds with qword only
(7.1 / 7.0 / 6.8.3 .exe from the github page don’t find either)
-
#1
В этом гайде мы научимся заменять байты через прогу Cheat Engine. Тут всё понятно расписано как и что делать.
1. Запускаем обход. После запуска обхода открываем CheatEngine.
2.Находим процесс: crossfire.exe
3.После того как мы нашли процесс.Выбираем вкладку (Тип) и ищем (Array of Bytes)
4.В строке (Hex) прописывае начальные байты. Вот мы ввели начальный байты ножа (выделено красным)
5.Жмём на поиск. И слева вылазиют байты (они выделины красным) нам нужен первый (подчёркнут зелёным).
6.Теперь правой кнопкой мыши щелкаем по первому байту и нажимаем (Перейти в память по этому адресу).
7.Вылезет вот такое окно.
8.Ищем строку начинающиюся на 4D 6F 64. Теперь нам нужен полный байт оружия, на которое хотим поменять. Полностью выделяем свой (полный) байт. И возращаемся к Cheat Engine.
9.Жмем на 4D, ,и кликаем правой кнопкой мыши по этому значению.У вас откроется меню ,выбираем (Вставить из буфера обмена)
10. Вот что у нас получилось:
11.Внимание на символы в синем квадрате,слова knife заменились на слова вашего байта.
Результат:
Скачать эту программу сможете перейдя по сылке
Последнее редактирование модератором: 6 Ноя 2012
-
#1
Здравствуйте Уважаемые!
при потытке сканирования паняти процесса l2.exe выдает 0 результатов, даже когда сканирую «неизвестное значение»
Игра на русском официальном сервере защищена программной frost, последний раз, примерно 2 года назад все хорошо сканировалось, сейчас, похоже, какую то защиту поставили
-
#2
Так ищи обход фроста, сейчас во многих играх нельзя сканировать память
-
#3
хе хе, а тут кто-то не так давно объяснял мне какой я дурак, и что память читать нет проблем. Если защита не дает смотреть память, то это скорее всего означает, что обойти ее можно только на уровне 0 кольца. А на уровне нулевого кольца работают только драйверы, ну из легальных инструментов. Так что если вы не системный программист, устанете обходить )
-
#4
bugaj [?]
А на уровне нулевого кольца работают только драйверы, ну из легальных инструментов. Так что если вы не системный программист, устанете обходить )
Не пугайте людей, там не от чего уставать. Немного желания и времени — все что потребуется.
-
#5
bugaj [?]
обойти ее можно только на уровне 0 кольца. А на уровне нулевого кольца работают только драйверы
Написать драйвер не сложно. Правда для работы в x64 системе у него должна быть цифровая подпись, или хотя бы тестовая.
-
#6
ну я наверное драйвер то писал, если судить по моей подписи и знаю о чем говорю. По моим ощущениям у меня создание первого в жизни драйвера заняло больше месяца(нужного мне драйвера, а не того что есть в инетах в больших количествах), просто потому что инфа по этому делу трудно доступна ибо фрагментирована и разбросана по инету. А гуру драйверописания будут пичкать вас букварями, а не ответами, и если вы решите их все прочитать от корки до корки то это займет гораздо больше месяца. Т.е. как бы драйвер не сложно написать(если вы уже знаете как), но в условиях очень скудного доступа к информации весьма проблематично, хотя если вы в английском гуру, то в иностранных тырнетах с этим проще.
Кстати, где то тут есть тема про GameGuard и в ней ссылка на WinIO и в этом самом WinIO есть функции прямого доступа в память, т.е. теоретически они могут позволить писать и читать в память и есть вероятность, что защита это не будет это пресекать. Проблема только в том, как исследовать программу, это нужно свой cheat engine писать на этих функциях) если они конечно будут работать. И кстати WinIO вместе с исходниками распостраняется.
во я даже нашел топик http://autoit-script.ru/index.php/topic,14307.msg91374.html
-
#7
bugaj Никто и не спорит, что вы знаете. Но простите меня, irp-хуки на kb девайсы с управлением через i/o — явно не стоят месяца изучения. На счет работы с памятью приложений ring3 в ring0 — KeStackAttachProcess.
Вся эта теория — максимум сутки.
P.S. Даже если GameGuard будет сканировать указатели на обработчики IRP нужных девайсов, то обходится это так же просто. Все методы поиска подобных хуков заключаются на определении принадлежности указателя к адресному пространству драйвера конкретного девайса.
-
#8
ок. чего спорить, засекаем — за сколько автор топика обойдет фрост :whistle:
Check this page to see if there are some suggestions for adding to Cheat Engine:Memory Scanning.
Initial contribution, just placing a few ‘things about ce scanning’ here to work out later.
Memory scanning is one of the most major features of Cheat Engine.
Memory scanning means searching for a specific value or a pattern in the memory provided to the application.
Cheat Engine’s scanning makes use of multiple processor cores when available.
Cheat Engine allows you to search addresses in various ways using different types of searching.
Firstly, you need to define what type of search you want to perform.
What you need to define is: Value Type, Scan Option, Scan Range and other smaller options.
Value Type
The available types Cheat Engine can scan for are:
- Binary
- Byte (values between 0 and 255 or -128 to 127 if signed)
- 2 byte (values between 0 and 65535 or -32768 to 32767 if signed)
- 4 byte (values between 0 and 4294967295 or -2147483648 and 2147483647 if signed)
- 8 byte (values between 0 and 18446744073709551615 or -9223372036854775808 and 9223372036854775807 if signed)
- Float (values between 1.5 x 10^-45 and 3.4 x 10^38 )
- Double (values between 5.0 x 10^-324 and 1.7 x 10^308 )
- Array of bytes
- String (/Text)
- All (Byte to Double)
- Grouped
Which one you should choose depends on the value and type of the value you want to search for.
A value that only switches between 1 and 0 is often a Binary.
While an integer number (1, 3, 4599, 15686, etc…) is most often a 4-byte value.
Strictly non-integer numbers are always Float or Double. Small numbers are often Float, bigger ones Double.
Text is often stored as a String/Text.
Scan Option
Sometimes you may not know the exact number of a value you want to search for, or it changes too often to scan normally. That’s why Cheat Engine provides several ways of looking for values. These scan options make it possible to find any value, whether you know it or not.
The options available are divided in two: First Scan options and Next Scan options.
First Scan options are:
- Exact Value
- Bigger than…
- Smaller than…
- Value between…
- Unknown initial value
Next Scan options are:
- Exact Value
- Bigger than…
- Smaller than…
- Value between…
- Increased Value
- Increased Value by…
- Decreased Value
- Decreased Value by…
- Changed Value
- Unchanged Value
- Same as First Scan
All these options speak for themselves. Cheat Engine remembers the values found in the previous scan, allowing it to compare new values with the old ones and revert to a previous scan. It also remembers the values of the First Scan.
Scan Range
Cheat Engine only scans between the given range markers. Default are these From: 00400000 To: 7FFFFFFF
If you know for certain that a certain address must be between two addresses, then you can change these markers and Cheat Engine will only search between those.
Fast Scan: Fast scan speeds up the scanning by skipping unaligned(by 4) memory addresses. Aligned address means that it can be divided by the alignment number and the result will not have a remainder(or will have a remainder of 0). Unaligned means that when an address is divided by the alignment number, result has a non-zero remainder. For example, address 0x40000 is aligned by 4 and also aligned by 0x1000 because after dividing it by both alignment numbers, remainder of the result is 0 in both cases. Address 0x40004 is aligned by 4 but isn’t aligned by 0x1000 because when you divide it by 4, the remainder is 0, but when you divide it by 0x1000, the remainder is 4. Number 0x40001 is not aligned by neither 4, nor 0x1000. Most objects in memory are aligned by 4, but not always.
When you perform a scan, Cheat Engine will provide you with a list of addresses matching your search. Shown values of variables at found addresses are updated as the actual in-game values of variables change, at a rate set in the Settings menu.
There are two types of addresses in this list: Green ones and black ones.
Green means static addresses. Whenever you load the application these addresses will stay the same/hold the same value.
These green addresses show up as absolute virtual addresses in the list, but are actually offsets to base address of one of the loaded modules in the process’ address space. So when you have static(green) address 4075FFB0 and module’s base address is 40000000, it is calculated as 40000000+75FFB0, which Cheat Engine often shows you as ModuleName.exe+75FFB0.
Black means dynamic addresses. Variables at these addresses will change location(variables will change their addresses) whenever you load the application, and even while the application is running. Using pointers you can find static addresses for these dynamic ones.
Grouped
Grouped scanning allows you to find a structure more quickly when you know its layout. Individual values are in the format «type:value», separated by spaces. For example if you know that health is an integer and your current health is 75/100, and that the structure has the current value, an unknown 4 byte quantity, and then the max value, you can search for this:
4:75 4:* 4:100
Все игры используют рабочую память компьютера для сохранения таких данных, как количество золота, очки жизни, атрибуты персонажа, время. Используя Cheat Engine можно найти эти данные, и заменить их на другие нужные пользователю значения.
Программа Cheat Engine — это сканер памяти, шестнадцатеричный редактор и отладчик. При использовании Cheat Engine чаще всего используется простейшее сканирование памяти для поиска переменных, а затем их заменяют другими. Таким образом, можно легко увеличить средства или изменить практически любые атрибуты персонажей.
Использовать программу Чит Энджин можно, только когда все вычислительные операции выполняются на компьютере пользователя. Если игра взаимодействует с внешним сервером, то обмануть ее не получится, и даже если это удастся, есть риск быть забаненным. Поэтому рекомендуется использовать приложение только для однопользовательских и оффлайн-игр. Такие сайты, как Steam, которые отслеживают безопасность могут бессрочно заблокировать учетную запись из-за использования Cheat Engine.
Основные характеристики:
- лицензия: свободная;
- система: Win XP, Vista, 7, 8, 10;
- регистрация: нет;
- ограничения: нет;
- официальный сайт: cheatengine.org;
- цена: бесплатно.
Изменяем значения в игре
Взлом с помощью Cheat Engine шаг за шагом:
- Запускаем выбранную игру.
- Запускаем Cheat Engine.
- Подключаем процесс игры к Cheat Engine. (цифра 1 на рисунке).
- Если нужно найти стандартные значения, например, золото, драгоценные камни и т.д., следует начинать сканирование только типов 4 байта. Если осуществляется поиск времени или нецифровых показателей, таких как здоровье или мана, можно начать сканирование с типа Float. Если ничего не может обнаружить искомое значение, следует искать тип ALL (все). Первичное сканирование запускается кнопкой «First Scan«.
- Любым способом изменяем нужный параметр в игре (например, потратить ману, купить предмет), затем изменяем найденное значение в приложении и повторяем соответствующий тип сканирования.
- После сужения количества адресов подлежащих поиску, мы добавляем те, которые наиболее точно соответствуют элементу поиска, в окно редактирования в нижней части экрана.
- Чтобы найти единственный правильный адрес, мы меняем параметр и проверяем, изменилась ли игра так, как мы хотели.
Как пользоваться таблицами
Таблица в Cheat Engine – это, по сути, файл с сохраненными параметрами для изменения. Для использования следует:
- Запустить игру.
- Запустить Чит Энджин.
- Выбрать кнопку «открыть».
- Указать путь к сохраненной таблице.
- После загрузки искать больше ничего не нужно, достаточно ввести свои значения в нужные ячейки. Обычно авторы подписывают каждый параметр, поэтому сложностей возникнуть не должно.
Использование SpeedHack
Некоторые игры наполнены атмосферой, и это действительно приятно — просто поглощать прекрасно созданный мир, которым окружен пользователь в течение нескольких часов подряд. Во многих других есть наполнитель или просто ненужные вещи, которые крадут время, потраченное на другие дела. Для таких случаев у Cheat Engine есть функция ускоренной перемотки вперед.
Несколько примеров использования:
Rocksmith 2014. Эта игра имеет очень длинную последовательность запуска, которая не скрывает загрузку или что-то в этом роде, она просто длинная ради зрелищности. После запуска устанавливаете ее на 50-кратную скорость, и последовательность заканчивается, экономя примерно 25 секунд при каждом запуске.
Undertale. Ограничена 30fps. При этом большая часть игры просто идет в излишне медленном темпе. Лучше играть на скорости 2x, тогда визуальные эффекты составляют 60 кадров в секунду, что ускоряет многие монотонные действия (медленная ходьба), при битвах и диалогах можно вернуть скорость.
Можно установить конкретные клавиши для определенных скоростей, чтобы обеспечить возможность регулировки.
По умолчанию используют такие горячие клавиши:
- М: 1,0;
- N: 2.0;
- Alt + M: 50,0;
- Alt + N: 200,0.
Достаточно найти название исполняемого файла и вставить его название с расширением exe в настройки (как показано на скриншоте).
Заморозка значений
Иногда простого изменения значения недостаточно, тогда может понадобиться функция заморозки. После переноса параметра в нижнюю часть, слева от него есть квадратик, при нажатии на него появится крестик или галочка, теперь оно заморожено.
В этом случае цифры не будут изменяться независимо от действий игрока. Например, нужно взломать игру на деньги. Установив золото на 10000 можно его тратить сколько угодно, это цифра будет неизменна. Это же касается маны, жизней и других параметров.
Как использовать в онлайн-играх
Cheat Engine может изменять значения, только если игра запускается на стороне игрока. Если игровые расчеты происходят на сервере, то взломать её не получится.
Некоторые онлайн игр, которые не используют многопользовательский режим запускаются во флэш контейнере. Взлом браузерной оффлайн игры аналогичен обычной, но в качестве источника данных надо выбрать флэш процесс:
Ищем необходимое изначальное значение и изменяем его, к примеру, построив здание:
Большинство простых показателей будут представлены числом в 4 байта:
Если конкретное число не найдено, ищем все возможные комбинации.
Затем изменяем параметр и отсеиваем, указав, что оно уменьшилось или увеличилось.
Сheat Engine на Андроид
Ранее программа была доступна только пользователям компьютеров. Но теперь она доступна и для телефонов Android. Благодаря этому пользователи могут получить множество преимуществ, которые открываются в большинстве игр:
- Сначала загрузите Cheat Engine на Android устройство.
- Откройте файл Apk из каталога загрузки файловым менеджером и нажмите кнопку «Установить».
- Перед этим включите установку из неизвестных источников на телефоне. Для этого зайдите в настройки, затем в безопасность и включите опцию.
- Теперь откройте оффлайн любую игру.
- Найдите процесс игры в списке.
- Рассмотрим на примере увеличения денег, если у игрока в наличии 1000 монет. Откройте процесс и найдите значение золото = 1000.
- Покупайте что-нибудь, пока количество золота не уменьшится, например до 800.
- Можно увидеть, как в Cheat Engine значение золота изменилось с 1000 до 800.
- Добавьте значение на вкладку списков.
- Измените переменную на 99999. Откройте игру, значение золота изменится на 99999.
Сheat Engine не находит значений
Известные решения:
- включить mem_mapped в настройках сканирования и отключить fastscan;
- иногда помогает, если приостановить игру во время сканирования;
- попробуйте сканировать с использованием экстремального типа округления вместо значения по умолчанию (находит адреса со значениями от 99385799.000000001 до 99385700.99999999)
- перезагрузиться;
Как изменить язык
Чтобы поменять язык Чит Энджин на русский, достаточно перейти на сайт и скачать все приложение или только русификатор. Если загружена вся программа, то в архиве будет папка с файлом локализации. Его следует положить в C:Program FilesCheat Enginelanguages.
Следует согласиться с заменой, после чего перезапустить программу.