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

partoftheworlD

Пользователи+
  • Постов

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

  • Посещение

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

    172

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

  1. 30 минут назад, Sergey99 сказал:

    к тому же процесс игры не запускаю.

     

    Многие игры распаковывают различные данные только после запуска, а взлом не запуская игру сравним с гаданием по солнцу с закрытыми глазами.

  2. 2 минуты назад, Sergey99 сказал:

    Это точно нужно искать в листинге, где дизассемблированный код файла лежит, где адреса, инструкции и байты?

    Да

     

    53 55 8B 6C 24 0C 56 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? A1
  3. 4 минуты назад, Sergey99 сказал:

    Сейчас у меня открыт именно файл .exe игры, а не присоединён к процессу

    Поиск по сигнатуре делай. ПКМ по листингу Поиск в текущем модуле -> Шаблон. Ах, да шаблон надо исправить, вместо "?" должно быть "??"

    Если с нуля, то ПКМ по листингу Поиск в текущем модуле -> поиск ссылок на строки 

  4. 2 минуты назад, Sergey99 сказал:

    То есть в адресе 0x01968FE8  команда g_speed?

     Нет, это адрес указывающий на индекс команды с которой функция работает в настоящее время. 

  5. 4 часа назад, Sergey99 сказал:

    и зачем сдвигать операнд влево через  оператор <<

    Бинарное умножение на 16

     

    4 часа назад, Sergey99 сказал:

    если можно объясните подробнее, чтобы я понял

     

    В общем-то тут все достаточно просто. Начнем с того, что все игры основанные на движке квейка и имеющие мультиплеер, для одиночной игры так же поднимают локальный сервер. Но в подобной архитектуре, чтобы построить игру надо прописывать игровые команды(DVAR) задавая физику, гравитацию и много-много чего еще. С этого я и начал, нашел текстовую строку "g_speed", а дальше реверс, по ходу дела нашел функцию регистрирующую команды в памяти игры. Эти вычисления как раз регистрируют блок памяти всех значений связанных с g_speed. 0x4D1 это индекс команды g_speed.

     

    if [0x01968FE8] == 0x4D1:
        (0x4D1 + 0x4D1 * 4 << 4) = 0x0018150
        00018150 + 0x196E010 + 10 = speed


    image.png.72e9414e4fc9c846ac82039b1677815a.png

     

     

     

  6. 53 55 8B 6C 24 0C 56 68 ? ? ? ? E8 ? ? ? ? A1 ? ? ? ? 8B ? ? ? ? ? 83 C4 04 3D ? ? ? ? 7C 2B 68 ? ? ? ? FF D3 68 ? ? ? ? E8 ? ? ? ? 68 ? ? ? ? 55 68 ? ? ? ? 6A 00 E8 ? ? ? ? A1 ? ? ? ? 83 C4 14 8D 34 80 C1 E6 04 81 C6 ? ? ? ? 89 ? ? ? ? ? ? 83 C0 01 F7 44
    
    if [0x01968FE8] == 0x4D1:
        (0x4D1 + 0x4D1 * 4 << 4) = 0x0018150
        00018150 + 0x196E010 + 10 = speed
        
    

     

     

  7. 1 час назад, Sergey99 сказал:

    esp+70

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

    В зависимости от размера кадра стека для текущей функции твое значение может быть локальной переменной.

     

    К примеру возьмем кадр стека размером 78 байт(в прологе функции можно посмотреть, сколько "выделяется" памяти под кадр инструкцией sub esp, <размер>, тогда получается так.

    esp = ebp - 78 является верхушкой стека
    
    ...
    ...
    ...
    ...
    esp+70 = ebp-8 = 1337
    ...
    ...
    ebp = esp+78 указатель на базовый адрес стека. 

     

    если же смещение превышает размер выделенного кадра, тогда это переменная из другой функции, можно даже высчитать из какой посчитав размер всех выделенных кадров.

  8. 10 минут назад, Sergey99 сказал:

    Придётся изучать их все как я понял?

     

    Нет, только те которые чаще всех срабатывают. Логично же, что не может инструкция рассчитывающая скорость движения срабатывать 1 раз в секунду.

  9. 1 час назад, Sergey99 сказал:

    а надо чтобы перемещение было быстрым.

    Желательно иметь более точную формулировку. А то не понятно, тебе нужно быстрое перемещение или быстрая скорость передвижения?

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

     

     

    1 час назад, Sergey99 сказал:

    ufo

    Делается за счет отключения записи координат и горячими клавишами создается перемещение по новым значениям с использованием оригинальных.

     

    1 час назад, Sergey99 сказал:

    noclip

    Отключай коллизию. Берешь координаты, ставишь бряк на доступ и при столкновении с объектом смотришь какие новые инструкции появились.

  10. 33 минуты назад, reston сказал:

    А почему именно делаешь смещение на 0x40, а не условно 0x32

     

    0x40 смещение на функцию CreateDevice, в принципе подойдет любая функция принимающая в себя указатель на указатель на устройство(ppReturnedDeviceInterface)

  11. 1 час назад, ReWanetZabilParol сказал:

    А мое мнение о тебе не изменилось ни капли ты все такой же ЧСВ.

    Ммм..Ты хочешь снова это обсудить? Без проблем, пиши в личку и вспомним с чего все началось и как ты размазав сопли убежал.

    Вспомним твое неадекватное поведение, истерики и срывы. Лучше бы ты не начинал, ведь исход уже ясен.

     

    1 час назад, ReWanetZabilParol сказал:

    а не на главной странице сидеть и глумиться над мной.

    Ты слишком много на себя берешь. Со временем прибавилась паранойя?

     

    1 час назад, ReWanetZabilParol сказал:

    Ибо форум что считает что мнение человека можно выразить только плюсиком или проходом мимо это не форум а помойка

    Представляешь существует конструктивная критика с аргументами и предложениями и это действительно работает, если не устраивать срач(спор без аргументов переходящий на личности).


     

    1 час назад, ReWanetZabilParol сказал:

    Я смотрю у тебя какая-то травма на этот счет?

    Разбил мне сердце

     

    1 час назад, ReWanetZabilParol сказал:

    Вам бы лучше форум развивать

    Никак форум не развивается,  как будто обе ноги форуму отрезало после твоего ухода.

     

     

  12. 4 часа назад, Antonshka сказал:

    Недостаток такого метода, опять же занимающий некоторое время брутфорс.

     

    А если переписать код, для того, чтобы все вычисления производились на видеокарте? Код не сложный, пара математических операций. В итоге вычисление будут быстрее раз в 20 производиться.  Опять же, в этом есть смысл, если проект собирается быть долгоживущим, иначе , результат не окупит затраты на написание кода.

     

    Так же можно сделать минибазу,  чтобы разбить поиск на блоки, а не перебирать все значения. Я подобное делал в GTA 5, для поиска значений работающих со скриптами и этот способ показал отличную эффективность и производительность. Задача была похожая.

     

    newGlobalPageBase = this->read<DWORD64, PBYTE*>(Global_struct + ((index >> 18 & 0x3F) << 3))
    if (newGlobalPageBase != 0)
    {
    	return (newGlobalPageBase + ((index & 0x3FFFF) << 3));
    }

     

    • Плюс 1
  13. 6 минут назад, Antonshka сказал:

    В скрипте необычный порядок высвобождения стека, опечатка?

    Не, просто копипаста?

     

    tmp == 0x10000000, потому что значения никогда не бывают меньше, так что смысла от 0 до  0x10000000 перебирать нет.

  14. Только что, Garik66 сказал:

    А лучше найти игровое шифрование, не думаю что разрабы так же методом перебора делают.

     

    У них может быть свой инструмент с определенной формулой, который при сброке самостоятельно константы шифрует.

  15. Можно сделать 2 скрипта, для быстрого и для точного сканирования.

     

    В первом пожертвовав точностью увеличиться скорость, достаточно сделать итератор i+=4/i+=8, скорость увеличиться в 2-4 раза.

    Ну, а второй точный, это то, что сейчас у тебя есть.

  16. Лучше один раз на плюсах собрать, залепить многопоточность и думаю, можно уменьшить скорость выполнения до 0.03.
    Вот одним потоком, не помню, что за значение считал.(тест выполнялся на виртуалке)
    image.png.74972ff308ed472a5131fc5c2fa56e06.png

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

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

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