partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
2 минуты назад, Sergey99 сказал:
Это точно нужно искать в листинге, где дизассемблированный код файла лежит, где адреса, инструкции и байты?
Да
53 55 8B 6C 24 0C 56 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? A1
-
4 минуты назад, Sergey99 сказал:
Сейчас у меня открыт именно файл .exe игры, а не присоединён к процессу
Поиск по сигнатуре делай. ПКМ по листингу Поиск в текущем модуле -> Шаблон. Ах, да шаблон надо исправить, вместо "?" должно быть "??"
Если с нуля, то ПКМ по листингу Поиск в текущем модуле -> поиск ссылок на строки
-
2 минуты назад, Sergey99 сказал:
То есть в адресе 0x01968FE8 команда g_speed?
Нет, это адрес указывающий на индекс команды с которой функция работает в настоящее время.
-
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
-
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
-
2 минуты назад, Sergey99 сказал:
Думаю это легче через Olly делать
Пора про неё забыть, это инструмент наших предков, есть современная альтернатива - x64dbg
-
1 час назад, Sergey99 сказал:
esp+70
Со стеком надо немного по другому работать, обычным получением значения по инструкции ничего не выйдет.
В зависимости от размера кадра стека для текущей функции твое значение может быть локальной переменной.
К примеру возьмем кадр стека размером 78 байт(в прологе функции можно посмотреть, сколько "выделяется" памяти под кадр инструкцией sub esp, <размер>, тогда получается так.
esp = ebp - 78 является верхушкой стека ... ... ... ... esp+70 = ebp-8 = 1337 ... ... ebp = esp+78 указатель на базовый адрес стека.
если же смещение превышает размер выделенного кадра, тогда это переменная из другой функции, можно даже высчитать из какой посчитав размер всех выделенных кадров.
-
10 минут назад, Sergey99 сказал:
Придётся изучать их все как я понял?
Нет, только те которые чаще всех срабатывают. Логично же, что не может инструкция рассчитывающая скорость движения срабатывать 1 раз в секунду.
-
1 час назад, Sergey99 сказал:
а надо чтобы перемещение было быстрым.
Желательно иметь более точную формулировку. А то не понятно, тебе нужно быстрое перемещение или быстрая скорость передвижения?
Если особо не разбираешься во всяких трассировках, работе со стеком вызовов, то будет проще найти скорость передвижения.
Если шаришь, то бери координаты, ставь бряк на пишущую инструкцию и смотри откуда и как рассчитывается новое значение, по ходу реверса найдешь и множители и формулы, которые рассчитывают новое значение(используя скорость передвижения)1 час назад, Sergey99 сказал:ufo
Делается за счет отключения записи координат и горячими клавишами создается перемещение по новым значениям с использованием оригинальных.
1 час назад, Sergey99 сказал:noclip
Отключай коллизию. Берешь координаты, ставишь бряк на доступ и при столкновении с объектом смотришь какие новые инструкции появились.
-
33 минуты назад, reston сказал:
А почему именно делаешь смещение на 0x40, а не условно 0x32
0x40 смещение на функцию CreateDevice, в принципе подойдет любая функция принимающая в себя указатель на указатель на устройство(ppReturnedDeviceInterface)
-
1 час назад, ReWanetZabilParol сказал:
А мое мнение о тебе не изменилось ни капли ты все такой же ЧСВ.
Ммм..Ты хочешь снова это обсудить? Без проблем, пиши в личку и вспомним с чего все началось и как ты размазав сопли убежал.
Вспомним твое неадекватное поведение, истерики и срывы. Лучше бы ты не начинал, ведь исход уже ясен.
1 час назад, ReWanetZabilParol сказал:а не на главной странице сидеть и глумиться над мной.
Ты слишком много на себя берешь. Со временем прибавилась паранойя?
1 час назад, ReWanetZabilParol сказал:Ибо форум что считает что мнение человека можно выразить только плюсиком или проходом мимо это не форум а помойка
Представляешь существует конструктивная критика с аргументами и предложениями и это действительно работает, если не устраивать срач(спор без аргументов переходящий на личности).
1 час назад, ReWanetZabilParol сказал:Я смотрю у тебя какая-то травма на этот счет?
Разбил мне сердце
1 час назад, ReWanetZabilParol сказал:Вам бы лучше форум развивать
Никак форум не развивается, как будто обе ноги форуму отрезало после твоего ухода.
-
7 минут назад, roma91212 сказал:
Вычитай значит просто толщину этой рамки и все. Оно будет статично, что на win7, что на win10
Ну вот, все сломал.
-
7 минут назад, Senpai сказал:
нуу, так ведь? Это ж не то
А если подумать?
-
FindWindow + GetWindowRect
-
1 час назад, mumut сказал:
Вопрос что надо сделать что бы игра не вылетала.
В стим версии(1.0.38.7335) игры ничего не вылетает.
-
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
-
18 часов назад, alexpeh сказал:
Как сделать no reload, если значение 2 байта
4 байта, просто занопить пишущую инструкцию.
-
5 минут назад, Antonshka сказал:
~ 58 секунд до напечатания "x". Луа не подходит.
Языки с динамической типизацией сразу надо отбросить, на Python это занимало около 1-2 минут.
-
6 минут назад, Antonshka сказал:
В скрипте необычный порядок высвобождения стека, опечатка?
Не, просто копипаста?
tmp == 0x10000000, потому что значения никогда не бывают меньше, так что смысла от 0 до 0x10000000 перебирать нет.
-
Предложу вот такой вариант, если кто-то сможет попробовать, то отпишитесь, что там по скорости.
-
Только что, Garik66 сказал:
А лучше найти игровое шифрование, не думаю что разрабы так же методом перебора делают.
У них может быть свой инструмент с определенной формулой, который при сброке самостоятельно константы шифрует.
-
Можно сделать 2 скрипта, для быстрого и для точного сканирования.
В первом пожертвовав точностью увеличиться скорость, достаточно сделать итератор i+=4/i+=8, скорость увеличиться в 2-4 раза.
Ну, а второй точный, это то, что сейчас у тебя есть.
-
Лучше один раз на плюсах собрать, залепить многопоточность и думаю, можно уменьшить скорость выполнения до 0.03.
Вот одним потоком, не помню, что за значение считал.(тест выполнялся на виртуалке) -
6 минут назад, Garik66 сказал:
555 -> A07E4000
15616516 тоже не ищет(с большими числами не работает возможно из-за того что регистры x86 малы)
[Call of Duty Modern Warfare 2] - изменение скорости персонажа
in Вопросы по созданию читов в одиночных играх
Опубликовано
Многие игры распаковывают различные данные только после запуска, а взлом не запуская игру сравним с гаданием по солнцу с закрытыми глазами.