-
Постов
5 750 -
Зарегистрирован
-
Победитель дней
292
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент Garik66
-
Demono50601, не потому пути двигаешься. Не контролируемое изменение не даст ничего ни тебе, ни пользователям твоего трейнера. Лучше начни заново обучение. Посмотри видео-уроки от Xipho, kehg. PS: Посмотри внимательно на свою инструкцию. mov eax,[eax+ecx*4+00000088] в eax лежит указатель на структуру. в ecx лежит ID каких-то параметров в структурах а 00000088 - это смещение. Если адрес имеет вид, типа твоего [eax+ecx*4+00000088] (грубо говоря это контейнер), то инструкция работает с кучей адресов и соответственно, поменяв вид инструкции, ты изменил всю эту кучу адресов (ты поменял не само значение, а адрес из которого загружается значение), что рано или поздно приведёт к вылету из игры.
-
Если кто не понял как сделать, то закиньте файл (плагинчик для СЕ) в папку autorun. (Путь к папке C:\Program Files\Cheat Engine 6.4\autorun) Только вначале разархивируйте. (Оказалось что я не могу загружать файлы на форум подобного типа , поэтому пришлось сделать архив.) CompactviewCEbyMasterGH.rar
-
Razi, кажется понял как сделать это в одном скрипте. мне нужно от тебя: 1. Уточни 8 прибавлять/отнимать от адресов или значений в адресах. 2. Мне нужен АА скрипт с аобсканом из инструкции работающий с этими адресами. 3. Если адреса динамические, то нужен фильтр, который ты используешь, если статичные (как в предыдущем скрипте), то не нужен. PS: забыл, тогда ещё пункт 4. 4. Сами адреса.
-
ЗЫ: УПС STAVROS, извини, плохо посмотрел - ты говорил не про ту игру.
-
Есть - люди отключают, я не делал ни разу. Нужно включать логическую проверку на активность скрипта. Погугли: Например "Как из одного скрипта включить/выключить другой скрипт на ассемблер (на LUA)". Или создай новую тему с этим вопросом. Ещё можно посмотреть на форуме СЕ, тебе нужный варианты скриптов, с активирующим скриптом.
-
Demono50601, ты так написал, будто выделил один день - завтра и завтра выучишь Ассемблер. А так конечно - УДАЧИ в изучении!!!
-
STAVROS, специально для проверенного заказчика : { Game : KB.exe Version: Date : 2016-01-20 Author : Garik66 This script does blah blah blah}[ENABLE]aobscanmodule(InfiniteMoveUnit,KB.exe,29 41 14 83 79 14 00) // should be uniquealloc(newmem,$1000)label(code)label(return)registersymbol(InfiniteMoveUnit)newmem: cmp [ecx+1cc],1 jne code xor eax,eaxcode: sub [ecx+14],eax cmp dword ptr [ecx+14],00 jmp returnInfiniteMoveUnit: jmp newmem nop nopreturn:[DISABLE]InfiniteMoveUnit: db 29 41 14 83 79 14 00unregistersymbol(InfiniteMoveUnit)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "KB.exe"+5E754"KB.exe"+5E732: 74 1A - je KB.exe+5E74E"KB.exe"+5E734: 8B 17 - mov edx,[edi]"KB.exe"+5E736: 8B 82 60 24 01 00 - mov eax,[edx+00012460]"KB.exe"+5E73C: 8B 4C 24 38 - mov ecx,[esp+38]"KB.exe"+5E740: 8B 4C B1 FC - mov ecx,[ecx+esi*4-04]"KB.exe"+5E744: 50 - push eax"KB.exe"+5E745: 8B 44 24 7C - mov eax,[esp+7C]"KB.exe"+5E749: E8 C2 8F 10 00 - call KB.exe+167710"KB.exe"+5E74E: 8B 53 08 - mov edx,[ebx+08]"KB.exe"+5E751: 8B 4A 70 - mov ecx,[edx+70]// ---------- INJECTING HERE ----------"KB.exe"+5E754: 29 41 14 - sub [ecx+14],eax"KB.exe"+5E757: 83 79 14 00 - cmp dword ptr [ecx+14],00// ---------- DONE INJECTING ----------"KB.exe"+5E75B: 7D 0D - jnl KB.exe+5E76A"KB.exe"+5E75D: 8B 43 08 - mov eax,[ebx+08]"KB.exe"+5E760: 8B 48 70 - mov ecx,[eax+70]"KB.exe"+5E763: C7 41 14 00 00 00 00 - mov [ecx+14],00000000"KB.exe"+5E76A: 8B 84 24 90 00 00 00 - mov eax,[esp+00000090]"KB.exe"+5E771: 33 F6 - xor esi,esi"KB.exe"+5E773: 3B C6 - cmp eax,esi"KB.exe"+5E775: 74 09 - je KB.exe+5E780"KB.exe"+5E777: 8B 53 08 - mov edx,[ebx+08]"KB.exe"+5E77A: 8B 4A 70 - mov ecx,[edx+70]} { Game : KB.exe Version: Date : 2016-01-20 Author : Garik66 This script does blah blah blah}[ENABLE]aobscanmodule(InitiativeUnits,KB.exe,8B 18 55 8B 6C 24 10) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem: cmp [eax+170],1 jne code mov [eax],acode: mov ebx,[eax] push ebp mov ebp,[esp+10] jmp returnInitiativeUnits: jmp newmem nop nopreturn:registersymbol(InitiativeUnits)[DISABLE]InitiativeUnits: db 8B 18 55 8B 6C 24 10unregistersymbol(InitiativeUnits)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "KB.exe"+1F345"KB.exe"+1F338: CC - int 3 "KB.exe"+1F339: CC - int 3 "KB.exe"+1F33A: CC - int 3 "KB.exe"+1F33B: CC - int 3 "KB.exe"+1F33C: CC - int 3 "KB.exe"+1F33D: CC - int 3 "KB.exe"+1F33E: CC - int 3 "KB.exe"+1F33F: CC - int 3 "KB.exe"+1F340: 8B 44 24 04 - mov eax,[esp+04]"KB.exe"+1F344: 53 - push ebx// ---------- INJECTING HERE ----------"KB.exe"+1F345: 8B 18 - mov ebx,[eax]"KB.exe"+1F347: 55 - push ebp"KB.exe"+1F348: 8B 6C 24 10 - mov ebp,[esp+10]// ---------- DONE INJECTING ----------"KB.exe"+1F34C: 56 - push esi"KB.exe"+1F34D: 8B 70 08 - mov esi,[eax+08]"KB.exe"+1F350: 57 - push edi"KB.exe"+1F351: 8B FB - mov edi,ebx"KB.exe"+1F353: 85 F6 - test esi,esi"KB.exe"+1F355: 74 17 - je KB.exe+1F36E"KB.exe"+1F357: 55 - push ebp"KB.exe"+1F358: 57 - push edi"KB.exe"+1F359: 53 - push ebx"KB.exe"+1F35A: 8B C6 - mov eax,esi} { Game : KB.exe Version: Date : 2016-01-20 Author : Garik66 This script does blah blah blah}[ENABLE]aobscanmodule(GodMod,KB.exe,8B 49 0C 2B CB) // should be uniquealloc(newmem,$1000)label(code)label(return)label(OHK)registersymbol(OHK)registersymbol(GodMod)newmem: cmp [ecx+1cc],1 jne @f push [ecx+28] // 4 инструкции нужны, если скрипт не был подключен pop [ecx+0c] // перед боем для восстановления кол-ва юнитов и их push [ecx+10c] // ХР. pop [ecx+10] xor ebx,ebx jmp code@@: cmp [OHK],1 jne code add ebx,#1000000 // Поставил 1000000 на всякий случай вдруг у врага // Армия с суммарной ХР очень большой.code: mov ecx,[ecx+0c] sub ecx,ebx jmp returnOHK:dd 0GodMod: jmp newmemreturn:[DISABLE]GodMod: db 8B 49 0C 2B CBunregistersymbol(OHK)unregistersymbol(GodMod)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "KB.exe"+5A1CD"KB.exe"+5A1AC: 81 C2 00 00 C0 B4 - add edx,B4C00000"KB.exe"+5A1B2: 89 57 08 - mov [edi+08],edx"KB.exe"+5A1B5: 8B 46 70 - mov eax,[esi+70]"KB.exe"+5A1B8: 83 C0 50 - add eax,50"KB.exe"+5A1BB: 50 - push eax"KB.exe"+5A1BC: E8 7F 51 FC FF - call KB.exe+1F340"KB.exe"+5A1C1: 8B 4E 70 - mov ecx,[esi+70]"KB.exe"+5A1C4: 8B 51 10 - mov edx,[ecx+10]"KB.exe"+5A1C7: 89 57 14 - mov [edi+14],edx"KB.exe"+5A1CA: 8B 4E 70 - mov ecx,[esi+70]// ---------- INJECTING HERE ----------"KB.exe"+5A1CD: 8B 49 0C - mov ecx,[ecx+0C]"KB.exe"+5A1D0: 2B CB - sub ecx,ebx// ---------- DONE INJECTING ----------"KB.exe"+5A1D2: 89 4F 10 - mov [edi+10],ecx"KB.exe"+5A1D5: 85 C9 - test ecx,ecx"KB.exe"+5A1D7: 7F 1D - jg KB.exe+5A1F6"KB.exe"+5A1D9: 8D A4 24 00 00 00 00 - lea esp,[esp+00000000]"KB.exe"+5A1E0: FF 4F 14 - dec [edi+14]"KB.exe"+5A1E3: 8B 4F 14 - mov ecx,[edi+14]"KB.exe"+5A1E6: FF 47 0C - inc [edi+0C]"KB.exe"+5A1E9: 85 C9 - test ecx,ecx"KB.exe"+5A1EB: 7E 09 - jle KB.exe+5A1F6"KB.exe"+5A1ED: 01 47 10 - add [edi+10],eax}
-
Razi, посмотри на задачу под другим углом. По-моему та зацыклился на хоткеях и Dison, прав Я примерно понял, что ты хочешь сделать. 1. имеем три адреса А, Б и С. 2. с ними работает одна инструкция (И1), соответственно они отличаются указателями на них, т.е. имеем три указателя Ра, Рб и Рс. Смещения у них одинаковые, ну например +04. Вот из этой инфы можно перестроить твою задачу не много по другому. Влево/вправо - это движение по поинтерам (указателям)Ра->Рб, Рс->Ра , а поинтеры в коде игры загружаются, где-то выше И1 по коду. Если поставишь бряк на запись на любой А, Б или С и изменишь в игре значение в этих адресах, то ты как раз выйдешь на И2 - инструкцию подгружающую поинтер. Соответсвенно мы можем написать скрипт (С2), используя фильтры какой указатель загружен и изменить его на нужный нам. Ну а на добавление/отнимание 8 в адреса напиши скрипт из И1 (Это будет С1). И тогда уже задача для хоткеев будет разрешима: 1. Хоткей -> изменение указателя из С2 2. Хоткей -> увеличение значения на 8 в адресе из С1 3. Хоткей -> уменьшение значения на 8 в адресе из С1 Скрипт, подобный С1 мы уже с тобой писали в предыдущей теме. Так что - дерзай.
-
Ну почему, после Ведьмака 3, поиграл в Fallout-Shelter (построил суперское убежище без читов) А так, да, со временем плохо, нужно решать проблемки (ну ты знаешь).
-
Ну извини. Я написал в самом начале, просто решил попрактиковаться, ну и первое что оказалось под рукой - это Туториал.
-
Да. Короче все скрипты (на все 8 шагов) сделаны уже с решением шага. ЗЫ: все 8 скриптов написал за полчаса. А когда начинал, я на 8 шаг тратил около часа.
-
Попробую: Razi, а вот это нужно было бы в самом первом сообщении топика написать. Теперь понятно - как ты выполняешь цикл. Горячая клавиша а -> увеличить значение в адресе на 1. Горячая клавиша b -> уменьшить значение в адресе на 1. Но мой способ понадёжнее, не во всех играх ты так легко найдёшь адрес, да и трейнер из моего скрипта проще сделать. newmem:mov [eax+ecx],ebx and edx,001FFFFCcmp [009E3C1C],A // Потому что, после этого сравненияje mylabel // мы прыгаем либо на метку mylabeljmp returnHere // либо возвращаемся в код игрыcmp [009E3C1C],FF // Сюда мы никогда не попадёмje mylabel1jmp returnHeremylabel:mov [009E3C1C],0jmp returnHeremylabel1: // и соответственно сюда тоже.mov [009E3C1C],9jmp returnHere [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat aobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(mylabel)label(mylabel1)registersymbol(address)newmem:mov [eax+ecx],ebx and edx,001FFFFCcmp [009E3C1C],Aje mylabelcmp [009E3C1C],FFje mylabel1jmp returnHeremylabel:mov [009E3C1C],0jmp returnHeremylabel1:mov [009E3C1C],9jmp returnHereaddress: jmp newmem nop nop nop nopreturnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebx and edx,001FFFFCunregistersymbol(address)dealloc(newmem)
-
Не ты не понял, то что ты сделал это просто первый поинтер. Эт понятно. А ты попробуй сделать как у меня, чтобы нажав на кнопку в туториале "Изменить указатель" получить решение.
-
Razi, Ну раз невтерпёж. Сейчас кофе попью, покурю и сделаю. Пробуй: [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheataobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(code)label(code1)label(flag)registersymbol(flag)registersymbol(address)newmem:mov [eax+ecx],ebx // Оригинальные инструкции игры.and edx,001FFFFCcmp byte ptr [flag],1 // Если flag не равен 1, то ничего не делаем.jne @f // Прыгаем на ближайшую метку @@.mov byte ptr [flag],0 // Обнуляем flag, чтобы инъекция сработала один раз. // Если flag равен 1, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],9 // Всего 10 видов оружия в игре (IDw от 0 до 9)je code // Если IDw равно 9, то прыгаем на метку code, где присвоим IDw 0.inc [009E3C1C] // Увеличиваем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere // Возвращаемся в код игры.@@:cmp byte ptr [flag],2 // Если flag не равен 2, то ничего не делаем.jne returnHere // Возвращаемся в код игры.mov byte ptr [flag],0 // Обнуляем flag, чтобы инъекция сработала один раз. // Если flag равен 2, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],0 // Всего 10 видов оружия в игре (IDw от 0 до 9)je code1 // Если IDw равно 0, то прыгаем на метку code1, где присвоим IDw 9.dec [009E3C1C] // Уменьшаем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere // Возвращаемся в код игры.code: // Если предыдущий вид оружия был последний (IDw=9), то переключаемся наmov [009E3C1C],0 // первый вид оружия (IDw=0).jmp returnHere // Возвращаемся в код игры.code1: // Если предыдущий вид оружия был первый (IDw=0), то переключаемся наmov [009E3C1C],9 // последний вид оружия (IDw=9).jmp returnHere // Возвращаемся в код игры.flag: // Добавь в таблицу адрес с адресом "Flag" (без кавычек), названиемdb 0 // "Переключиться на следующий вид оружия (1 +; 2 -)", тип "1 байт" и назначь на него // удобную "Горячую" клавишу - установить значение 1.address:jmp newmemdb 90 90 90 90returnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebxand edx,001FFFFCunregistersymbol(flag)unregistersymbol(address)dealloc(newmem)
-
ну табличку то вначале нужно сделать. Например Шаг 8 оказался довольно сложным именно для написания скрипта, чтобы выйти на нужную инструкцию (благо кода там не много, так что нашёл) Думаю, что чему либо научился.
-
Вроде нашёл, где происходит добавление двух пустых строк. 1. В этом случае не должно произойти: 2. В этом случае должно: Нет не происходит. Тогда это зависит от раздела форума, потому что только что писал сообщение с цитатами в разделе "Cheat Engine" и там добавлялись две пустых строчки.
-
Проще/ не проще (скорее всего сложнее), но ассемблер тебе всё равно нужен, чтобы понять, что делает игровой код и как приспособить его под себя.
-
Razi, я выше писал: поэтому вначале разберём разницу м/у инструкцией, которую выбрал я, и инструкцией, которую выбрал ты: 1. Я выбрал "разовую" инструкцию. ("Разовая" - одно событие в игре -> одно срабатывание инструкции, у меня событие - нужно положить предмет из рук Героя в инвентарь, при этом происходит обращении инструкции к ID предмета (в дальнейшем будем называть IDi)). Ты выбрал "постоянно работающую" инструкцию, т.е. инструкция часто читает из адреса ID оружия (в дальнейшем будем называть IDw), поэтому у тебя: 2. Я выбрал инструкцию, после которой (по-видимому) уже нету записи в IDi ниже по коду игры. поэтому у меня 398. У тебя же (я так думаю.... ) происходит ниже по коду запись в IDw, поэтому у тебя: Как исправить 2. - ты уже сделал (т.е. просто увеличить на 1 ->10). Хотя я думаю это ты сделал ошибку в скрипте, т.к. ты сам прописываешь в IDw 9, вот этот участок у тебя в скрипте: mylabel2:mov [009E3C1C],9По 1. пункту: 1.1. Можно поискать "разовую" инструкцию к IDw. Выбрать удобное событие в игре. (Но это будем делать в самом конце, если ничего другого не получиться.) 1.2. Назначить горячую клавишу на инструкцию в инъекции (add [009E3C1C],01). (Это более сложный вариант, я делал подобное в игре один раз, при нажатии на ПКМ (в моём случае горячая клавиша - ПКМ) у меня работал Блинк-телепорт, это вариант будем пробовать, если не сработает третий вариант). 1.3. Сделать доп фильтр (а точнее флаг) на разовое срабатывание инструкции. Это более простой вариант - с него и будем начинать. Сейчас покурю, подумаю и попробую написать скрипт. Попробуй этот скрипт: Инструкции и пояснения внутри. [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheataobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(code)label(flag)registersymbol(flag)registersymbol(address)newmem:mov [eax+ecx],ebx // Оригинальные инструкции игры.and edx,001FFFFCcmp byte ptr [flag],1 // Если flag не равен 1, то ничего не делаем.jne returnHere // Возвращаемся в код игры. mov byte ptr [flag],0 // Обнуляем flag, чтобы инъекция сработала один раз. // Если flag равен 1, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],9 // Всего 10 видов оружия в игре (IDw от 0 до 9) je code // Если IDw равно 9, то прыгаем на метку code, где присвоим IDw 0. inc [009E3C1C] // Увеличиваем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere // Возвращаемся в код игры.code: // Если предыдущий вид оружия был последний (IDw=9), то переключаемся наmov [009E3C1C],0 // первый вид оружия (IDw=0). jmp returnHere // Возвращаемся в код игры. flag: // Добавь в таблицу адрес с адресом "Flag" (без кавычек), названиемdb 0 // "Переключиться на следующий вид оружия", тип "1 байт" и назначь на него // удобную "Горячую" клавишу - установить значение 1.address:jmp newmemdb 90 90 90 90returnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebxand edx,001FFFFCunregistersymbol(flag)unregistersymbol(address)dealloc(newmem)