-
Постов
351 -
Зарегистрирован
-
Посещение
-
Победитель дней
39
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные A1t0r
-
-
Risen 3 Titan Lords это игра. Смешение которое я указал 2F4 оно не правильное это смешение для примера то смешение которое будет отделять Жизни игрока от очков я еще не нашол
Так как mov [esi+ebp*4+10],edi занимает 4 байта, то захватится ещё одна инструкция.
Также предполагается, что инструкция работает только со структурой игрока(что маловероятно)
Примерно так:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(life)
label(points)
newmem:
cmp ebp,0 //например ebp = 0 - жизни, 1 - очки
je life
cmp ebp,1
je points
mov [esi+ebp*4+10],edi
ещё_одна_инструкция
jmp returnhere
life:
//что-то делаем с жизнями
//mov [esi+10],#100
jmp returnhere
points:
//что-то делаем с очками
//mov [esi+14],#10
jmp returnhere
адрес_инъекции:
jmp newmem
нопы_будут
returnhere:
[DISABLE]
dealloc(newmem)
адрес_инъекции:
mov [esi+ebp*4+10],edi
ещё_одна_инструкцияКривовато, но смысл правильный)
-
Сейчас в личку скину посмотри сам
Давай, только чётко опиши задачу и CT-шку.
-
Там видешь какая суть скрипт активирует трейнер и функцию с поинтерами
Т.Е. Активируешь скрипт далее доступны поинтеры
Скрипт будь он на луа или автоассемблере тоже можно подсадить в то же место.
-
-
Откуда ее убрать, где ее искать?
В окошке на скрине написано 11111111111, убери одну 1111111111
тогда попробуй так
writeInteger(0x047415D0, tonumber(CETrainer_CHEAT2.EditValue))Если не поможет, то первые два хоткея работают?
У меня lua распознавал и переводил текст из окна в число
-
-
memrec.Value=CETrainer.CHEAT2.Editvalue
writeInteger(0x047415D0, CETrainer_CHEAT0.EditValue)
так чтоли
Да. И исправь номер writeInteger(0x047415D0, CETrainer_CHEAT2.EditValue) это у тебя №2 чит
-
Передвинь на одну строку ниже
-
Как таковых обработчиков для этого элемента написать нельзя, так написано в справке. Но можно дополнять то что создал CE автоматически.
С самого начала.
Открываем CE и присоединяемся к процессу.
Добавляем пустой адрес в таблицу: Add address manually, OK.
File->Generate generic...
Add Hotkey. Предложит нам единственный пустой адрес. Забиваем комбинацию клавиш, эффект и описание.
Добавили, теперь перейдём к визуальному редактору и добавим для нашего чит-элемента editbox.
Теперь обязательно надо сохранить всё это дело в виде CT. В окошке Trainer generator выбираем тип CT и генерить трейнер.
После этого активируем главное окно CE и жмём Ctrl+Alt+L. Появится скрипт формы с настройками чит-элемента на lua.
Нас интересует строка
cheatcomponent_setActive(CETrainer_CHEAT0, isActive)CETrainer_CHEAT0 - это имя элемента. Чтобы получить доступ к его эдитбоксу лезем в справку и видим свойство
Editvalue:string - The string of the optional edit fieldТогда пишем на следующей строке например так
writeInteger(0x037CF898, CETrainer_CHEAT0.EditValue)
Я писал введённое значение из эдитбокса по адресу 0x037CF898(в качестве подопытного был калькулятор))))
Хоть и собрано "на коленке", зато работает)
- 1
-
Пишет Не найден процесс или неверная цепочка указателей
Процесс вписал, там где название процесса? например openProcess("calc.exe")
-
чет я совсем запутался =(
где и как и че привести?
Хотя бы так
var dummy = new IntPtr();
или
var dummy = new UIntPtr();
С# - регистрозависимый, intpTR и IntPtr - разные вещи
-
Долго будешь учится...Сложный материал отхватил...
Да, на C++ переходить рановато
-
Привет всем вот у меня не большая проблемка вот у меня вот такая инструкция
mov [esi+ebp*4+10],edi одна это инструкция отвечает за очки и за жизни хочу сделать фильтр но не знаю как
правильно написать скрипт с фильтром с такой инстркцией mov [esi+ebp*4+10],edi вот например смешение 2F4
помогите пожалуйста.
А можно поконкретнее: что в esi(скорее всего указатель на игрока), в ebp(номер 4-байтовой ячейки? с жизнями и очками?), и 2F4 - это ebp*4?
В идеале - что за игра?)
-
Да кстате а как событие объявлять, что прописать нужно?
В главном окне CE: меню Table->Show cheat Table lua script(или Ctrl+Alt+L) туда скопируй скрипт, заполни что я сказал и выполни. Появится формочка с полем, кнопкой и событием привязанным к ней.
-
Можно ведь и попроще написать к чему такая сложность? Есть еще какие нибудь варианты?
Но всеравно тебе спс от меня....
Переписал проще. Заполни в 3 местах: название процесса и адрес с патронами 2 раза и будет тебе счастье)
Form = createForm(true)
Btn1 = createButton(Form)
Edit1 = createEdit(Form)
control_setCaption(Form, 'trainer')
control_setCaption(Edit1, '')
control_setCaption(Btn1, 'Write')
control_setPosition(Btn1, 50, 40)
control_setPosition(Edit1, 50, 5)
control_setSize(Form, 180, 80)
openProcess(--[["название процесса"]]--)
form_centerScreen(Form)
function Save()
ammo = control_getCaption(Edit1)
check = readInteger(--здесь пишем адрес в виде'[[006313a0]+4b8]+4'
)
if (check ~= nil) then
writeFloat(--здесь пишем адрес в виде'[[006313a0]+4b8]+4'
, ammo)
else
messageDialog('Не найден процесс или неверная цепочка указателей!', 1, 2)
end
end
function CloseTrainer()
--closeCE()
return caFree
end
form_onClose(Form, CloseTrainer)
control_onClick(Btn1, Save)
form_show(Form)Вот добавил я чит на форму, если посмотреть слева в настройках можно включить как чекбокс так и cedit. Как вот прописать туда значение и чтобы оно работало...
На визуальный редактор забил сразу же, как выучил функции из main.lua)
- 1
-
Всем привет! Как сделать в трейнере поле edit чтобы можно было ввести любое число и оно активтровалось в игре. Допустим мне нужно 100 патронов я ввел в поле и чтобы в игре это число отображалось и появилось 100 патронов. Надеюсь доступно объяснил. Надеюсь на вашу помощь....
Что-то похожее написал Vlad2 здесь. Допилишь под свои цели чуток)
-
Решил сделать для себя заготовку под трейнеры для CE. Для не особо привередливых подойдёт.
Весь скрипт состоит из условных двух частей: таблицы с параметрами и функциями контролов(пока только форма и чекбокс) и циклы, которые по заданным параметрам создают объекты и устанавливают соответствие между событием и их обработчиками.
Для примера на форме расположены 2 чекбокса. По умолчанию трейнер присоединятся к калькулятору ("calc.exe"), что попалось))) Если запущен калькулятор, то при установке и снятии галочек выскакивают сообщения. При завершении процесса калькулятора манипуляции с чекбоксами не будут иметь эффектами. Если открыть calc снова, то перезапуск трейнера не потребуется.
Версия 0.1. Нужно будет допиливать, а возможно и перепиливать)
- 1
-
Хотелось бы дополнить. Версия та же.
Разброс пуль(прицел не увеличивается)
Deadhunt.exe+3220F://razbros
db 90 90 90
[DISABLE]
Deadhunt.exe+3220F:
db D8 41 08[ENABLE]
Возможность поднимать бесконечное число бонусов.
Счётчик просто уйдёт в минус(будет видно сколько перебрали)). Сравнение требуется, чтобы нормально работал уровень с подбором 5 артефактов.
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov ecx,[ebp+08]
push ebx
mov ebx,[006B71C4]
mov ebx,[ebx+48]
mov ebx,[ebx+20]
lea ebx,[ebx+68]
cmp ebx, ecx
pop ebx
je exit
add eax,01
exit:
jmp returnhere
"Deadhunt.exe"+7AE57:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"Deadhunt.exe"+7AE57:
add eax,01
mov ecx,[ebp+08][ENABLE]
Супер скорость. Пишем в скрипт нужное число.
alloc(newmem,2048)
label(returnhere)
newmem:
mov dword ptr [Deadhunt.exe+29B81C], (float)2 //сюда пишем скорость
fld dword ptr [Deadhunt.exe+29B81C]
jmp returnhere
"Deadhunt.exe"+7D4A3:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"Deadhunt.exe"+7D4A3:
fld dword ptr [Deadhunt.exe+29B81C][ENABLE]
One Hit Kill. Просто умножается урон на 150, обычно этого хватает)
Deadhunt.exe+73653:
db 1C
[DISABLE]
Deadhunt.exe+73653:
db 10[ENABLE]
Ну и самое вкусное напоследок. Заморозка зомби.
Y координата закомменчена, чтобы не было глюков.
И ещё(баг, не баг) каждый монстр живёт не больше, примерно, 20 секунд. Просто дохнут и всё. Можно даже не двигаться, уровень сам пройдётся) За исключением тех, где надо что-то собирать, естественно.
Deadhunt.exe+112222://X-coord
db 90 90 90 90 90 90
//Deadhunt.exe+118962://Y-coord
//db 90 90
Deadhunt.exe+112231://Z-coord
db 90 90 90 90 90 90
[DISABLE]
Deadhunt.exe+112222:
mov [eax+00000148],edx
//Deadhunt.exe+118962:
//mov [edx],eax
Deadhunt.exe+112231:
mov [eax+00000150],edx[ENABLE]
- 1
-
Как-то сложно. ecx это указатель?
а смещение я так и не понял как найти
Если под смещением понимается вся конструкция [ecx+esi*4], то просто в отладчике посмотри значения регистров и вычисли это значение и всё.
-
Подскажите пожалуйста, как найти смещение к такому указателю как во второй инструкции выше?
если указатель в инструкции "mov ebx, [ecx+1C]" то "1C" и будет смещение. Но когда в инструкции такое: mov ebx,[ecx+esi*4] то непонятно какое смещение и я наугад перебираю их.
Подскажите как его узнать?
Тебе нужно искать ecx. В esi должен находиться номер ячейки(0, 1, 2 и т.д.). Такая адресация используется для доступа к адресу или количеству по номеру персонажа, существа в армии, ресурса и др.
Например ecx = 01234500 начало стека армии персонажа, тогда при esi = 0, [01234500] - первый монстр, esi = 1, [01234504] - 2-ой и т.д.
Также может использоваться такой приём для перезаписи большого массива данных:
...
mov ecx,4
mov esi,XXXXXXXX
mov edi,YYYYYYYY
repe movsb
...В ecx заносится кол-во перезаписываемых байт. esi - адрес откуда пишем(считывание)(s - source, источник), edi - адрес куда пишем(запись)(d - destination, назначение), repe movsb - повторить перезапись ecx байта с адреса esi в edi. Можно также перемещать 2 байта(word, слово) - movsw, и 4 байта(double word, двойное слово).
-
Вот я тоже перезапускаю CE. Игра после этого сама закрывается Но бывает что и не закрывается. Но это ведь не правильно, я имею ввиду закрывать программы.
Как это сделать? Я хотел убрать но не знаю как. Там в отладчике есть "Список брейкпоинтов" но кнопка "удалить брейкпоинт" не работает.
Так
Или так
На крайний случай бряки типа Find Code убираются при нажатии на Stop в окошке или при закрытии оного.
-
В настоящее время используются все отладочные регистры. Освободите один из них и попробуйте снова. < Это пишет CE когда ставлю бряк. Что делать?
Ставить на память одновременно можно только 4 бряка. Если выпадает такое сообщение, то убери ненужный и вперёд)
-
Всё получилось
Правда зелёный был не 5-й адрес а второй. Но он такой же как и у вас CraftWorld.exe+3168B4.
Блин, как же злит криворукость разработчиков. Всё дело было в новой версии CE. Я с отладчиками мучился, игру перекачивал... Но никак не мог подумать на CE, пока он не стал единственным на что осталось думать.
Я его в первый же день как скачал забраковал. Захотел написать трейнер на луа, нажал Table->Show cheat table Lua Script, и ничего. Даже старые CT-шки со скриптами не работали, и забил на это дело)
A1t0r, Но если бы так случилось что когда в пункте 7 "Нашлась туча значений. Среди них 5-я единственная зелёная" не нашлось бы этого зелёного адреса, то пришлось бы по очереди перебирать предыдущие адреса поиска("Нашлось примерно 15 адресов"), а затем и все адреса текущего поиска("Нашлась туча значений"), лазить по всем ответвлениям этих адресов и инструкций до тех пор пока не нашёлся бы статический, зелёный адрес?
Конечно перебирать все несколько тысяч адресов не нужно. Я бы попробовал несколько с бряком на доступ. Чаще всего все они используют одинаковое смещение, только названия регистров разные. Если бы не получилось, то попробовал докопаться до структуры через другие ресурсы, такое было несколько раз, что через некоторые находишь множество адресов и дальше, проще чем копаться во всём этом попробовать "зайти" с другого ресурса или навыка, смотря что ищем.
Ну и никто не запрещал Pointer scan, но это уже когда совсем всё плохо, но такого у меня ещё не было)
И ещё вопрос:
Вот вы ставили бряк на запись, а я всегда ставлю на доступ. Есть-ли большая разница в этом? Может ли это быть причиной моих неудач в поиске указателей?
На запись ставится, чтобы чётко определить инструкции, которые только пишут по данному адресу. Если вам достаточно найти адрес для таблицы, или же вы хотите писать фильтр, то этого достаточно и можно сравнивать структуры свои и врагов, естественно, через функцию "Узнать кто получает доступ через эту инструкцию"(перевод вольный).
Бряк на доступ ставится чаще на указатели, чтобы найти указатели на них же, т.е. при вычислении цепочки до статического.
А вообще можно всегда ставить на доступ, тогда придётся по внешнему виду инструкций фильтровать нужные, например:
mov [esi+10], eax
mov ebx,[ecx+4*esi]Верхняя пишет в нашу ячейку, нижняя считывает из нее(писал пример наобум, чаще так)
-
Да. Craft The World [R.G. UPG] v. 0.9.033. Наверное деле в CE новом. Это единственное что изменилось, после чего стало такое твориться. Хотя могло и так что-то повлиять. Попробую откатиться на 6.3 и повторить порядок действий описанный вами выше.
А по поводу "я использую CE 6.3 english" так там просто файлы в папку language добавляются и язык становиться русским. Это офицальный файл языков с офицального сайта CE. Вряд-ли файл языков может испортить работоспособность программы. Или я ошибаюсь в своих рассуждениях и всё-таки может?
Нет, никак не влияет перевод. Просто привык к английскому, что работать с программами, что программировать.
Странное смещение
in Вопросы по созданию читов в одиночных играх
Опубликовано
В этом случае всегда пишешь по адресам близким к нулю ebp в данном случае не больше размера структуры. И надо всё-таки фильтровать что есть что.