-
Постов
5 750 -
Зарегистрирован
-
Победитель дней
292
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Garik66
-
-
[ENABLE]...alloc(newmem,2048)...label(loop)newmem:...push eax // Заталкиваем в стекpush esi // регистрыpush ecx // чтобы восстановить потомpush ebx // оригинальные значенияmov ecx,364 // Записываем количество проходов в циклеloop:lea esi,[oldaddress] // Поместить в ESI адрес старого участка памятиlea ebx,[newaddress] // поместить в ebx адрес-приемникlodsb // загрузить в al байт из [ESI]mov byte ptr [ebx],al // записать в новый адресdec ecx // Уменьшить счетчик циклаinc ebx // Увеличить адрес-приемникcmp ecx,0 // Достигли ли конца цикла?je @F // Если да, выходим из циклаjmp loop // Прыгаем на метку loop, то есть, переходим к следующей итерации цикла@@: // Безымянная метка для указания местоположения выхода из циклаpop ebx // Восстановлениеpop ecx // задействованных pop esi // в циклеpop eax // регистров...
Как-то так. Где многоточия - там какой-то другой код.Мне кажется что в скрипте ошибка, Нужно сюда :
dec ecx // Уменьшить счетчик цикла
inc ebx // Увеличить адрес-приемник
добавить ещё одну строку, т.е. так:
dec ecx // Уменьшить счетчик цикла
inc esi // Увеличить адрес старого участка памяти
inc ebx // Увеличить адрес-приемник
Попробую это проверить. (а то пока код не работает).
Нет так тоже не работает. Где то ещё ошибка. Проверьте скрипт пожалуйста.
А то писать 364 раза
push ebx
mov byte ptr ebx,[eax+4]
move byte ptr [eax+dbc],ebx
pop ebx
push ebx
mov byte ptr ebx,[eax+5]
move byte ptr [eax+dbd],ebx
pop ebx
.............................
и так далее, не хочется
-
что за бред....
push ecx
push esi
push edi
mov ecx,size
mov esi,oldaddress
mov edi,newaddress
rep movsb
pop edi
pop esi
pop ecx
Если работает, то красиво! (Код короче, нету лишней метки и использует 3 регистра). Попозже тоже попробую. Но у MasterGH 2 регистра. Хочется попробовать и этот скрипт.
Как новичку - что делает инструкция rep movsb?
И правильно я понимаю что в "mov ecx,size" size в шестнадцатитер. системе, т.е. в моём случае 16c?
-
Если это надо сделать на CE Autoassembler, то пример из справки с записью 16 байт из адреса 00410000.
ReadMem examplealloc(x,16)alloc(script,2048)script:mov eax,[x]mov edx,[x+c]retx:readmem(00410000,16) //place the contents of address 00410000 at the address of X
Если на Ассемблере, то укажи какой именно Ассемблер: fasm, masm, tasm и прочие... Хотя ты мог поискать как работать с память на WinAPI на интересующем Ассемблере.
Это надо сделать на CE Autoassembler. В программировании 0, пользуюсь только CE. В следующий раз буду обязательно писать CE Autoassembler.
Попытался вставить скрипт в код, возникли вопросы:
alloc(newMem, 2048)
alloc(x,364)label(returnHere)newMem:....................................push ebxpush edxmov ebx,[x+4]mov edx,[x+dbc]retx:readmem(?????????,364)pop edxpop ebxjmp returnHere..............................jmp newMem..............................returnHere:[DISABLE].................................1. alloc(x,364) - у Вас 16 у меня 364. Я правильно понял, что это в десят. системе, т.к. 16c (364 в десят.) CE не приняла?2. Все регистры используются, поэтому правильно ли я использую push и pop?3. Допустим мне нужно скопировать 364 байта начинающихся с адреса [eax+4] в [eax+dbc], что поставить вместо ????????? или как получить ????????? значение.4. Перепишите пожалуйста мой код правильно. -
Большой сенк. Попробую. Отпишусь - что получилось.
Пока не получается.
-
При написании скрипта возникла необходимость скопировать довольно большой участок памяти (точнее 364 байта) из одного адреса в другой (Вручную это получалось и в игре получаю то что хотел).
Помогите написать скрипт на Ассемблере.
-
Алло. Дальше что делать?
Ок перехожу в личные сообщения.
Пока решения нет.
Повторю.
Более конкретно (с чем сейчас встрял),
Например, вернёмся к Туториал CE v. 6.3 шаг 9.
Допустим, у меня есть адрес с цепочкой указателей на здоровье наших союзников.
Мне нужно вытащить значение в адресе в тренер, в окошко, с возможностью редактировать значение в самом тренере (без СЕ).
Как это можно сделать?
Здоровье Дейва (Игрок 1) [[[006313a0]+4b8]+4], здоровье Эрика (Игрок 2) [[[006313a0]+4bc]+4].
-
Где Name?
Фу ты нашёл техт ниже
Стёр
Хотелось бы в данном случае автоматически, а в игре я буду актировать другой скрипт и после него должно появиться значение в окне.
-
Теперь понял тебя: выбрали "Едит"
Дальше переходим в "Инспектор Объектов"
-
Зачем тебе два окошка? Без разницы можно и одно. Неважно. Туториал эт я для примера взял.
A1t0r
Ну что попробуем так сделать? Извини, нужно было выйти в Скайп - звонила сестра.
Сначала добавил горячую кнопку на Бессмертие.
Затем я перешёл в "Пользовательский дизайн".
Что нужно сделать дальше?
Точнее, что выбираем в FormDesigner:
-
readFloat(address) и writeFloat(address,value).
Что "ридом" читаем, а "врайтом" пишем это-то понятно. и что в инструкции должен быть Float тоже понятно, т.к. у нас значение здоровья float.
Меня интересует как всё это вытащить в тренер, а точнее в форму.
A1t0r
Сейчас можно сделать так, я открою СЕ, Туториал и таблицу и попробуем создать тренер, где будут два окошка со здоровьем игроков и горячая клавиша с God_Mod.
Так будет проще по-моему.
-
CE v. 6.3 (ru).
Сделал себе тренер с 12 функциями с горячими кнопками (активирующими и деакт. скрипты из таблицы). таких примеров на форуме много. Огромное спасибо!!!
В программировании и английском к сожалению "0".
Для дальнейшего изучения возможностей СЕ, нужны переводы main.lua и описание на русском всего что входит в "свой дизайн" при создании тренера, если есть. Если нет, придётся (как я понял, продолжая ломать игру) ещё много вопросов позадавать на форуме.
Более конкретно (с чем сейчас встрял),
Например, вернёмся к Туториал CE v. 6.3 шаг 9.
Допустим, у меня есть адрес с цепочкой указателей на здоровье наших союзников.
Мне нужно вытащить значение в адресе в тренер, в окошко, с возможностью редактировать значение в самом тренере (без СЕ).
Как это можно сделать?
Здоровье Дейва (Игрок 1) [[[006313a0]+4b8]+4], здоровье Эрика (Игрок 2) [[[006313a0]+4bc]+4].
В main.lua увидел такую функцию writeFloatLocal(address,value), думаю, что скорее всего её нужно в данном примере использовать, но как не знаю. Примеров не нашёл.
-
SER[G]ANT спасибо!
И самое главное - БОЛЬШОЕ спасибо за перевод СЕ!!!
-
Полностью согласен, просто хотелось уяснить для себя, как правильно записывать адреса в код.
А по структуре согласен на все сто. Очень помогло, нашёл многие характеристики, именно изучая структуру главного героя (выносливость, которую в этой игре по-моему вообще обычным способом не найдёшь, отравление, окаменение, проклятие ну и т.д.).
Сейчас мучаюсь с поиском координат. В структуре почти в самом начале лежат, координаты это видно, но они больше похожи на координаты камеры, потому что при изменении этих значений (и заморозке) герой стоит на месте, а изменяется именно расстояние до него от камеры. А вот найти координаты Ггероя пока не получается смотрел и в структуре, и поиском неизвестного (здесь вооще: при поиске Z - оставалось около 650 адресов, но они уже ни в какую не менялись, Х или Y - оставалось 2500 неменяющихся значений) уже 7 раз начинал искать, но так и бросал, слишком долго.
Кстати SER[G]ANT как выделить все адреса я понимаю - CTRL+A, а вот ка заморозить сразу много выделенных адресов не могу понять, подскажите пожалуйста.
И повторю вопрос: Как встроить спидхак в свой тренер? Интересует именно назначение Горячих клавиш, а не кнопка на форме (с кнопкой я понял как сделать, как оказалось у меня вообще не работал вызов LUA-скриптов ни в таблице, ни при создании трейнера, так что пришлось вчера пару часов чистить реестр вручную для полного удаления СЕ (утилиты как оказалось не полностью чистят) и по новой переустанавливать СЕ).
И ещё вопрос: Есть ли в доступе исходный код спидхака СЕ или он слишком навороченный для моего теперешнего уровня.
-
Решил проверить, всё ли я понял и вернулся к шагу 9 Туториала CE.
Есть решение с использованием структуры игрока и нахождением ID - Туториал CE v. 6.3 шаг 9 v. ID:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
newmem:
cmp [ebx+10],1
je originalcode
mov [ebx+04],0
originalcode:
fldz
jmp returnhere
"Tutorial-i386.exe"+27E76:
jmp newmem
returnhere:
[DISABLE]
"Tutorial-i386.exe"+27E76:
mov [ebx+04],eax
fldz
dealloc(newmem)Это понятно, это прекрасно работает.
Я, всё-таки в продолжении своего вопроса, нашёл адреса с указателями здоровья наших игроков (Дейва и Эрика), поэтому вариант
Туториал CE v. 6.3 шаг 9 v. Адрес:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
newmem:
push edx
lea edx,dword ptr [ebx+04]
push eax
lea eax,[[[006313a0]+4b8]+4]
cmp edx,eax
pop eax
je originalcode
push eax
lea eax,[[[006313a0]+4bc]+4]
cmp edx,eax
pop eax
je originalcode
mov [ebx+04],0
originalcode:
pop edx
fldz
jmp returnhere
"Tutorial-i386.exe"+27E76:
jmp newmem
returnhere:
[DISABLE]
"Tutorial-i386.exe"+27E76:
mov [ebx+04],eax
fldz
dealloc(newmem)Всё вроде хорошо - при нажатии кнопок "Атака", здоровье наших остаётся неизменным, а враги сразу умирают.
Но при нажатии "Случайная игра" умирают все четыре игрока и соответственно мы проиграли.
Мастера, пожалуйста подскажите, где я ошибаюсь и почему не работает скрипт.
И как правильно всё-таки записать скрипт во втором варианте. А то уже голову сломал.
Извините меня тормоза, собственно SER[G]ANT мне уже всё ответил, перед этим.
Для таких же лузеров как я, выложу правильный скрипт с использованием адресов с указателями:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
newmem:
cmp ebx,[[006313a0]+4b8]
je originalcode
cmp ebx,[[006313a0]+4bc]
je originalcode
mov [ebx+04],0
originalcode:
fldz
jmp returnhere
"Tutorial-i386.exe"+27E76:
jmp newmem
returnhere:
[DISABLE]
"Tutorial-i386.exe"+27E76:
mov [ebx+04],eax
fldz
dealloc(newmem)Здесь тоже всё прекрасно работает. Как я понял, с использованием регистров для нас - начинающих, лучше вначале быть поосторожнее.
- 1
-
SER[G]ANT Сенк!
Во втором моём варианте, как раз я вписываю текущее максимальное здоровье.
SER[G]ANT и ещё вопрос, если можно?
Как встроить спидхак в свой тренер? Хочу на горячую кнопку назначить спидхак встроенный в CE. Нашёл в нете и на форуме "Speed hack_setSpeed (2)" (2 - это в моём случае), но пока не могу врубиться, как встроить это в таблицу и в тренер.
-
ANT' timestamp='1400334599' post='17532']
а зачем такие сложности с пушами и лиами, если можно просто.
Круто!
Но я "Лузер" и пока пишу только первый тренер.
SER[G]ANT всё понял в Вашем скрипте, только не понял, что это - #100. (100 %; - здоровья или просто 100?)
И в игре объединять InfHealth и OHK в один скрипт не стоит из-за NPC, которым нужно сохранить жизнь до поры. А делать фильтры на нужных NPC или всех врагов - эт слишком много и долго. Так что во втором моём варианте я разделил эти два чита используя две инструкции игры.
-
Как я понял, раз ни кто не пишет, наверное тема на форуме мусолилась неоднократно.
Жаль.
Всё таки мне не понятно из-за чего происходил вылет в первом варианте. Это я где-то ошибаюсь или не возможно записать многоуровневый указатель в код в принципе?
KENG может Вы посмотрите (начинал учиться по Вашим урокам на Тюбе, жаль, что нету урока 7 часть 1 и один урок, для меня тоже очень важный, без звука).
KENG, если посмотрите и подскажите, моя благодарность не будет знать границ в пределах возможного .
Короче добился, чтобы первый вариант тоже работал и поэтому, для таких же "Лузеров" как я, выкладываю готовый вариант чита на бессмертие только Вашего Героя:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
push edx
lea edx,dword ptr [esi+000000FC]
push eax
lea eax,[[[DarkSoulsII.exe+FB3E3C]+74]+fc]
cmp edx,eax
pop eax
pop edx
je returnhere
mov [esi+000000FC],ecx
jmp returnhere
"DarkSoulsII.exe"+1BB521:
jmp newmem
nop
returnhere:
[DISABLE]
"DarkSoulsII.exe"+1BB521:
mov [esi+000000FC],ecx
dealloc(newmem)
Но второй вариант, выложенный мною в предыдущем посте, всё же лучше и правильнее для игры.
Так что тему можно закрыть.
-
Нужно не
Нужно так
push edx
push esp
..............
pop esp
pop edx
je returnhere
Поменял, всё равно вылет из игры.
Я писал ранее, что можно использовать pusha/popa. Исправляюсь: эти команды работают с 2 байтами регистров(ax,bx...). Для eax,ebx... нужно использовать pushad/popadНа pushad edx и т.д. ругается сам CE, говорит что эта инструкция не компилируется.
Я конечно нашёл решение, внимательно просмотрев шаг 9 в обучении CE, т.е. с использованием структуры.
Теперь бессмертие выглядит так:
[ENABLE]alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(myinstr)
newmem:
cmp dword ptr [eax+1c],01
je myinstr
originalcode:
mov eax,[eax+000000FC]
exit:
jmp returnhere
myinstr:
push [eax+00000104]
pop [eax+000000fc]
jmp originalcode
"DarkSoulsII.exe"+1BB052:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"DarkSoulsII.exe"+1BB052:
mov eax,[eax+000000FC]
а Убийство с одного удара, так:
[ENABLE]alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
cmp dword ptr [esi+1c],01
je returnhere
originalcode:
mov [esi+000000FC],0
exit:
jmp returnhere
"DarkSoulsII.exe"+1BB521:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"DarkSoulsII.exe"+1BB521:
mov [esi+000000FC],ecx
Но мне всё равно интересно - почему не работает первый вариант? И как правильно записать адрес с указателями в код и правильно выбрать регистр для кода (потому что я больше грешу именно на то, что я не правильно выбрал регистр и он где-то в тот же момент используется из-за этого происходит вылет.)
PS: Кстати работа со структурой помогла найти характеристику гГероя, которую простым методом поиска с отсеиванием я найти не смог, а именно выносливость, так что у меня теперь есть и чит на бесконечную выносливость.
-
Да и значение edx и esp запарывается, т.к. pushf их не сохраняет. Используйте pusha/popa
Есть пара вопросов.
1. Ориганальный код в кейве помещает 0, а в исходнике ecx. Опечатка?
mov [esi+000000FC],0 Нет здесь не опечатка - это One Hit Kill.
2. Что такое Ь ?Это очепятка Извиняюсь не заметил. Это FC , (Гугл со своим переводчиком мутит.)
Значения регистров esp и edx запарываются, т.к. pushf/popf сохраняют и загружают только регистр флагов. Используйте тогда pusha/popaТакие варианты, тоже пробовал:
push edx
lea edx,dword ptr [esi+000000FC]
push esp
mov esp,[DarkSoulsII.exe+FB3E3C]
mov esp,[esp+74]
lea esp,[esp+fc]
cmp edx,esp
pop edx
pop esp
je returnhere
-
Спросил двух мастеров: в какую тему мне, как новичку, можно писать, пока ничего не ответили, поэтому создал новую тему.
Пишу под себя тренер для игры Dark Souls V. 1.01.
Использую Чит Egnite против 6.3 (RU).
Вопросов много возникает походу написания.
Вот один из них:
Это код на бессмертие и убийство с одного удара.
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
push edx
lea edx,dword ptr [esi+000000FC]
cmp edx,087bDE2C
pop edx
je returnhere
originalcode:
mov [esi+000000FC],0
exit:
jmp returnhere
"DarkSoulsII.exe"+1BB521:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"DarkSoulsII.exe"+1BB521:
mov [esi+000000FC],ecx
Если в строке "CMP EDX, 087bDE2C" стоит адрес для текущей загрузки игры, код работает.
Нашёл постоянный адрес [[[DarkSoulsII.exe + FB3E3C] +74] + Ь] здоровья Ггероя.
Никак не получается записать этот адрес с указателями в код, чтобы не было вылета из игры.
Перепробовал разные варианты, вот один из них:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
pushf
lea edx,dword ptr [esi+000000FC]
mov esp,[DarkSoulsII.exe+FB3E3C]
mov esp,[esp+74]
lea esp,[esp+fc]
cmp edx,esp
popf
je returnhere
originalcode:
mov [esi+000000FC],0
exit:
jmp returnhere
"DarkSoulsII.exe"+1BB521:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"DarkSoulsII.exe"+1BB521:
mov [esi+000000FC],ecx
Подскажите, как правильно записать адрес с указателями в код. Я грешу, что вылет происходит из-за выбора регистра, в моём случае ESP, хотя тоже пробовал несколько вариантов.
PS: На всякий случай: [DarkSoulsII.exe + FB3E3C] можно записать и так [013B3E3C].
Как скопировать участок памяти.
in Вопросы по созданию читов в одиночных играх
Опубликовано
ТОВАРИЩИ HELP!!!!!!!!!!!!!!!!
Пока игрался с проверкой скриптов, случайно сохранил поверх своей таблицы нулевую таблицу.
Неужели вся 2-х недельная работа на смарку (там 10 рабочих скриптов и куча адресов была)?
Или есть возможность как то восстановить?
Проверил скрипт: при запуске кода - игра вылетела.