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

A1t0r

Ветераны
  • Постов

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

  • Посещение

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

    39

Сообщения, опубликованные A1t0r

  1. а когда делаешь так mov [ebp+4]#100 или так [ebp+10]#100 игра зависает

    В этом случае всегда пишешь по адресам близким к нулю ebp в данном случае не больше размера структуры. И надо всё-таки фильтровать что есть что.

  2. 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
    ещё_одна_инструкция

    Кривовато, но смысл правильный)

  3. Там видешь какая суть скрипт активирует трейнер и функцию с поинтерами

    Т.Е. Активируешь скрипт далее доступны поинтеры

    Скрипт будь он на луа или автоассемблере тоже можно подсадить в то же место.

  4. Откуда ее убрать, где ее искать?

    В окошке на скрине написано 11111111111, убери одну 1111111111

    тогда попробуй так


    writeInteger(0x047415D0, tonumber(CETrainer_CHEAT2.EditValue))

    Если не поможет, то первые два хоткея работают?

    У меня lua распознавал и переводил текст из окна в число

  5. Как таковых обработчиков для этого элемента написать нельзя, так написано в справке. Но можно дополнять то что создал 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(в качестве подопытного был калькулятор))))

    01a1a9d9a8ec4721ef7edf3a85b485b8.png

    Хоть и собрано "на коленке", зато работает)

    • Плюс 1
  6. Привет всем вот у меня не большая проблемка вот у меня вот такая инструкция

    mov [esi+ebp*4+10],edi одна это инструкция отвечает за очки и за жизни хочу сделать фильтр но не знаю как

    правильно написать скрипт с фильтром с такой инстркцией mov [esi+ebp*4+10],edi вот например смешение 2F4

    помогите пожалуйста.

    А можно поконкретнее: что в esi(скорее всего указатель на игрока), в ebp(номер 4-байтовой ячейки? с жизнями и очками?), и 2F4 - это ebp*4?

    В идеале - что за игра?)

  7. Да кстате а как событие объявлять, что прописать нужно?

    В главном окне CE: меню Table->Show cheat Table lua script(или Ctrl+Alt+L) туда скопируй скрипт, заполни что я сказал и выполни. Появится формочка с полем, кнопкой и событием привязанным к ней.

  8. Можно ведь и попроще написать к чему такая сложность? Есть еще какие нибудь варианты?

    Но всеравно тебе спс от меня....

    Переписал проще. Заполни в 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
  9. Всем привет! Как сделать в трейнере поле edit чтобы можно было ввести любое число и оно активтровалось в игре. Допустим мне нужно 100 патронов я ввел в поле и чтобы в игре это число отображалось и появилось 100 патронов. Надеюсь доступно объяснил. Надеюсь на вашу помощь....

    Что-то похожее написал Vlad2 здесь. Допилишь под свои цели чуток)

  10. Решил сделать для себя заготовку под трейнеры для CE. Для не особо привередливых подойдёт.

    Весь скрипт состоит из условных двух частей: таблицы с параметрами и функциями контролов(пока только форма и чекбокс) и циклы, которые по заданным параметрам создают объекты и устанавливают соответствие между событием и их обработчиками.

    Для примера на форме расположены 2 чекбокса. По умолчанию трейнер присоединятся к калькулятору ("calc.exe"), что попалось))) Если запущен калькулятор, то при установке и снятии галочек выскакивают сообщения. При завершении процесса калькулятора манипуляции с чекбоксами не будут иметь эффектами. Если открыть calc снова, то перезапуск трейнера не потребуется.

    Версия 0.1. Нужно будет допиливать, а возможно и перепиливать)

    Trainer template v0.1.CT

    • Плюс 1
  11. Хотелось бы дополнить. Версия та же.

    Разброс пуль(прицел не увеличивается)


    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
  12. Как-то сложно. ecx это указатель?

    а смещение я так и не понял как найти

    Если под смещением понимается вся конструкция [ecx+esi*4], то просто в отладчике посмотри значения регистров и вычисли это значение и всё.

  13. Подскажите пожалуйста, как найти смещение к такому указателю как во второй инструкции выше?

    если указатель в инструкции "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, двойное слово).

  14. Вот я тоже перезапускаю CE. Игра после этого сама закрывается :D Но бывает что и не закрывается. Но это ведь не правильно, я имею ввиду закрывать программы.

    Как это сделать? Я хотел убрать но не знаю как. Там в отладчике есть "Список брейкпоинтов" но кнопка "удалить брейкпоинт" не работает.

    Так

    a561006bc582f02a92847c6e83285908.png

    Или так

    a737e3cd615a246ea3f86441fd658ee2.png

    На крайний случай бряки типа Find Code убираются при нажатии на Stop в окошке или при закрытии оного.

  15. В настоящее время используются все отладочные регистры. Освободите один из них и попробуйте снова. < Это пишет CE когда ставлю бряк. Что делать?

    Ставить на память одновременно можно только 4 бряка. Если выпадает такое сообщение, то убери ненужный и вперёд)

  16. Всё получилось :)

    Правда зелёный был не 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]

    Верхняя пишет в нашу ячейку, нижняя считывает из нее(писал пример наобум, чаще так)

  17. Да. Craft The World [R.G. UPG] v. 0.9.033. Наверное деле в CE новом. Это единственное что изменилось, после чего стало такое твориться. Хотя могло и так что-то повлиять. Попробую откатиться на 6.3 и повторить порядок действий описанный вами выше.

    А по поводу "я использую CE 6.3 english" так там просто файлы в папку language добавляются и язык становиться русским. Это офицальный файл языков с офицального сайта CE. Вряд-ли файл языков может испортить работоспособность программы. Или я ошибаюсь в своих рассуждениях и всё-таки может?

    Нет, никак не влияет перевод. Просто привык к английскому, что работать с программами, что программировать.

×
×
  • Создать...

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

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