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

Garik66

Помогаторы
  • Постов

    5 750
  • Зарегистрирован

  • Победитель дней

    292

Весь контент Garik66

  1. Demono50601, не потому пути двигаешься. Не контролируемое изменение не даст ничего ни тебе, ни пользователям твоего трейнера. Лучше начни заново обучение. Посмотри видео-уроки от Xipho, kehg. PS: Посмотри внимательно на свою инструкцию. mov eax,[eax+ecx*4+00000088] в eax лежит указатель на структуру. в ecx лежит ID каких-то параметров в структурах а 00000088 - это смещение. Если адрес имеет вид, типа твоего [eax+ecx*4+00000088] (грубо говоря это контейнер), то инструкция работает с кучей адресов и соответственно, поменяв вид инструкции, ты изменил всю эту кучу адресов (ты поменял не само значение, а адрес из которого загружается значение), что рано или поздно приведёт к вылету из игры.
  2. Если кто не понял как сделать, то закиньте файл (плагинчик для СЕ) в папку autorun. (Путь к папке C:\Program Files\Cheat Engine 6.4\autorun) Только вначале разархивируйте. (Оказалось что я не могу загружать файлы на форум подобного типа , поэтому пришлось сделать архив.) CompactviewCEbyMasterGH.rar
  3. Razi, кажется понял как сделать это в одном скрипте. мне нужно от тебя: 1. Уточни 8 прибавлять/отнимать от адресов или значений в адресах. 2. Мне нужен АА скрипт с аобсканом из инструкции работающий с этими адресами. 3. Если адреса динамические, то нужен фильтр, который ты используешь, если статичные (как в предыдущем скрипте), то не нужен. PS: забыл, тогда ещё пункт 4. 4. Сами адреса.
  4. ЗЫ: УПС STAVROS, извини, плохо посмотрел - ты говорил не про ту игру.
  5. Есть - люди отключают, я не делал ни разу. Нужно включать логическую проверку на активность скрипта. Погугли: Например "Как из одного скрипта включить/выключить другой скрипт на ассемблер (на LUA)". Или создай новую тему с этим вопросом. Ещё можно посмотреть на форуме СЕ, тебе нужный варианты скриптов, с активирующим скриптом.
  6. Demono50601, ты так написал, будто выделил один день - завтра и завтра выучишь Ассемблер. А так конечно - УДАЧИ в изучении!!!
  7. 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}
  8. Razi, посмотри на задачу под другим углом. По-моему та зацыклился на хоткеях и Dison, прав Я примерно понял, что ты хочешь сделать. 1. имеем три адреса А, Б и С. 2. с ними работает одна инструкция (И1), соответственно они отличаются указателями на них, т.е. имеем три указателя Ра, Рб и Рс. Смещения у них одинаковые, ну например +04. Вот из этой инфы можно перестроить твою задачу не много по другому. Влево/вправо - это движение по поинтерам (указателям)Ра->Рб, Рс->Ра , а поинтеры в коде игры загружаются, где-то выше И1 по коду. Если поставишь бряк на запись на любой А, Б или С и изменишь в игре значение в этих адресах, то ты как раз выйдешь на И2 - инструкцию подгружающую поинтер. Соответсвенно мы можем написать скрипт (С2), используя фильтры какой указатель загружен и изменить его на нужный нам. Ну а на добавление/отнимание 8 в адреса напиши скрипт из И1 (Это будет С1). И тогда уже задача для хоткеев будет разрешима: 1. Хоткей -> изменение указателя из С2 2. Хоткей -> увеличение значения на 8 в адресе из С1 3. Хоткей -> уменьшение значения на 8 в адресе из С1 Скрипт, подобный С1 мы уже с тобой писали в предыдущей теме. Так что - дерзай.
  9. По дефолтному назначению хоткеев в СЕ думаю - НИКАК. Т.е. при нажатии Горячей клавиши 8 будет прибавляться во все 3 адреса. Программно думаю можно сделать, ну это уже к более продвинутым програмёрам.
  10. Не сложно. Для начала - воспользуйся СЕ-ным генератором трейнеров. По СЕ-ному трейнермаркерству, если что обратись к пользователю LIRW, он на них "Собаку съел" и не одну Бедные собачки. Не только. Чаще всего трейнеры юзают, если выкладывают в паблик свою работу. Я лично предпочитаю таблички.
  11. Здорово!!! Всё-таки нужно будет найти время на изучение LUA. Неа - не вредно. Включил/выключил - здесь нет проблем.
  12. Razi, попробуй скрипты MasterGH. Плюсы - на один хоткей меньше, чем в наших скриптах (у MasterGH - 2. у нас - 3 с учётом активирующего скрипта) и ещё проще написать трейнер, если понадобиться.
  13. MasterGH, я не знаю LUA, но мне кажется во втором скрипте ошибка: по-моему должно быть: if(a < 0 ) then a = 9 end
  14. Отлично!!! Razi, возьми в привычку поначалу писать себе кометы в скриптах, наподобие, как я тебе расписывал. Очень помогает в понимании (и запоминании) кода.
  15. Ну почему, после Ведьмака 3, поиграл в Fallout-Shelter (построил суперское убежище без читов) А так, да, со временем плохо, нужно решать проблемки (ну ты знаешь).
  16. Ну извини. Я написал в самом начале, просто решил попрактиковаться, ну и первое что оказалось под рукой - это Туториал.
  17. Да. Короче все скрипты (на все 8 шагов) сделаны уже с решением шага. ЗЫ: все 8 скриптов написал за полчаса. А когда начинал, я на 8 шаг тратил около часа.
  18. Попробую: 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)
  19. Не ты не понял, то что ты сделал это просто первый поинтер. Эт понятно. А ты попробуй сделать как у меня, чтобы нажав на кнопку в туториале "Изменить указатель" получить решение.
  20. 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)
  21. Т.е. скрипт работает? Отлично. Razi, это не сложно сделать. Но вначале, не хочешь сам подумать, как это сделать. Ведь интересно же самому додуматься. Давай сделаем так, если у тебя не получиться сделать за день, то завтра напиши мне в ЛС и я тебе помогу тогда.
  22. ну табличку то вначале нужно сделать. Например Шаг 8 оказался довольно сложным именно для написания скрипта, чтобы выйти на нужную инструкцию (благо кода там не много, так что нашёл) Думаю, что чему либо научился.
  23. Вроде нашёл, где происходит добавление двух пустых строк. 1. В этом случае не должно произойти: 2. В этом случае должно: Нет не происходит. Тогда это зависит от раздела форума, потому что только что писал сообщение с цитатами в разделе "Cheat Engine" и там добавлялись две пустых строчки.
  24. Проще/ не проще (скорее всего сложнее), но ассемблер тебе всё равно нужен, чтобы понять, что делает игровой код и как приспособить его под себя.
  25. 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)
×
×
  • Создать...

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

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