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

MasterGH

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

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

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

    129

Записи блога, опубликованные MasterGH

  1. MasterGH
    11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума.
     
    Поздравляю всех: 
    активных пользователей,
    высший состав форума, админов и модеров,
    старожил,
    помогаторов,
    тех кто был на форуме очень давно и перестал заходить.
     
    Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально  пропустил.
     
    Можно пожелать всем бесконечного энтузиазма на тему поиска сигнатур и значений, сравнении структур и стеков, дизассемблирования и ассемблирования. Энтузиазма в программировании на  C++ и WinAPI. Энтузизма в том, чтобы найти универсальное решение при создании любого чита для любой игры.
     
    P.S. Для энтузиазма. Подкину идею. Мне нравится видеть, как наборы инструкций можно условно разделить на: математические, логические, ветвления, чтения и записи и другие. При этом математические на мой взгляд наиболее выделяются, т.к. они заставляют в игре всему меняться. Хотя логические инструкции тоже могут что-то менять, но по ощущениям не так явно менять, как математические инструкции. По математическим в основном меняются перемещение камеры и перемещение персонажа и изменяются игровые значения.  Можно отдизассемблировать весь игровой код и найти все математические операции и точно некоторые из них связаны с будущими читами. Это всякие добавить, отнять, умножить, разделить. Не думаю, что их будет за тысячу даже, которые именно нужны для читов, а не те которые что-то рассчитывают не понятно что) Если руки дойдут, то возьму IDA да пройдусь по какой-нибудь игре с поиском всех математических инструкций, поставлю на них счетчик срабатывания да прогуляюсь в игре персонажем... Если будет время...
  2. MasterGH
    Есть такой плагин "AA Maker" и там довольно интересные регулярные выражения на Lua. Разберем некоторые выражения
     
    Выражение ''%[(.*)%]' - захват всего, что в квадратных скобках
     
    Пример
    local s = 'mov eax, [ecx + 4]' print(string.match(s, '%[(.*)%]')) --> ecx + 4 Символ "%" нужно всегда ставить перед специальными символами такими как ^$()%.[]*+-?
    Символ "%[" и "%]" означают квадратные скобки в строке
    Разбирая комбинацию (.*).
    Точка означает любой символ, а символ умножить означает повторение любого символа
    Круглые скобки означают "подшаблон" 
    Т.е. можем извлечь содержимое инструкции.
     
    Примеры
    "(.*)" - захват всей строки "/(.*)/" - захват всего, что находится между КРАЙНИМИ символами / "/(.-)/" - захват всего, что находится между ПЕРВЫМИ ДВУМЯ символами / Пример из ААMaker плагина
    local _,_,x = string.find(opcode, '%[(.*)%]') из функции ниже Функция
    string.find("СТРОКА", "ШАБЛОН") возвращает номер позиции начала начала и конца шаблона
     
    Пример
    print(string.find('some string', 'me')) --> 3 4  
    Вся функция с комментариями из AAMaker
     
     
    Чтобы посмотреть результат, сделал скрин отладки Lua кода
     

     
    Функции по работе со строками. Link
    Используемые источники: link, link, link, link
    aamaker.lua
  3. MasterGH
    Если нужно найти начало и конец подстроки. Пример
    Попробуем найти слово lab в троке gamehacklab.ru
    print(string.find('gamehacklab.ru', 'lab')) >9 11 Если не найдена подстрока, то вернет nil.
     
    С помощью string.match можем выводить не индексы, а строку
    print(string.match('gamehacklab.ru', 'lab')) >lab С помощью string.gmatch можем выводить последовательно строки
    Где 'a.' означает символ 'a' и еще один следующий любой
     
    Здесь комбинация символов "%a+" означает искать слово пока оно не закончится
     
    А здесь заполняем таблицу ключ — значение из строки, которую можно было бы взять из файла
     
    Пока на этом все... Более сложные примеры в предыдущей части записи
  4. MasterGH
    Я обратил внимание на следующие поведения записи и чтения
    1. Срабатывают только инструкции чтения до изменения параметра, адрес рабочий
    С адресом работают инструкции на чтение, но если в друг в этом адресе что-то поменять (например в CE), тот тут же выскочат инструкции на запись. Нельзя однозначно утверждать, что адрес является настроечным параметром, но и нельзя утверждать, что это не рабочий адрес. Какая-то инструкция может жестко менять значение, а может быть будет "стараться" изменить значение адреса в меньшую или большую сторону, но адрес при этом будет рабочим.
    2. Срабатывают инструкции записи и чтения, адрес не рабочий
    Запись и чтение влияет только на часть игры, а не на все или вообще не влияет, а перезаписывается постоянно. Например, на визуальное отображение полоски со здоровьем. Получается, что адрес не рабочий, а у него есть как и в первом пункте инструкции и на запись, и на чтение.
    3. Один раз срабатывает инструкция записи и потом всегда на чтение
    Если попался такой адрес в структуре, то он точно является "настроечным" и рабочим адресом. Например, это какой-то коэффициент, который добавляет, умножает, отнимает... в общем что-то меняет. Что с ним не делай, это адрес будут только "читать". Также это может быть булевой параметр "1 "или "0" и по нему может что-то резко меняться в игре.
     
    Окей. Вспоминается окно с кучей инструкций и счетчиков уникальных адресов (не более 8-ми логируется)

    Постреляв патроны  с адресом патронов (в СТАКЛЕРЕ Зов Припяти) сработали инструкции как на запись, так и на чтение.
     
    Первая инструкция читает очень часто, вторая редко. В круглых скобках обозначаются количество проскакивающих адресов.
    Если был выстрел и значение поменялось, то вылезли инструкции записи (все после первых двух).
     
    Код читает в цикле адрес...и если, что поменялось, то запишет в него потом.
    Это похоже на пункт1, который обсуждали выше, но этот адрес патронов не тот, который нужен. С виду рабочий, но патроны потом не стреляют. Патроны это структуры в памяти, а адрес их как  счетчик структур
     
    Как можно делать
     
    Создаем две группы (скрин ниже). Первая текущая и не замороженная. Вторая с двумя замороженными состояниями, когда стоим и ничего не делаем.
    Делаем несколько выстрелов.
    Цвет по +AC нас интересует больше всего, он соответствует логике состояний (стреляю и (не стреляю и не стреляю))

     
    Выделяем и перемещаем адреса этого цвета и морозим в таблице.
     

    Первый праметр это прочность, второй не знаю. Третий счетик патронов. 3 и 5 адреса связанные, если правильно помню, с объектами патронов
    В Сталкере это не даст беск. патрнов, но в других играх может иметь смысл как прием сравнения структур и групп.
     
    p.s. По Сталкеру Зов Припяти, к сожалению, у меня не было времени взломать патроны или может быть я не умею, не знаю. Какие-то патроны в сталкерах ломал, но не помню как.
×
×
  • Создать...

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

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