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

MasterGH

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

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

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

    129

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

  1. MasterGH
    Существует три логических оператора: and, or, not.
    Те, кто уже знаком с языками программирования знают, как эти логические операторы работают.
    Например, 
        A = true     B = true         if A and B then print('Условие "A and B" выполняется') end         if A or B then print('Условие "A or B" выполняется') end         B = false     if not (B == A) then print('Условие "not (B == A)" выполняется') end  
    Но, дальше интереснее.
        Все логические операторы считают false и nil ложными, а все остальное — истинными.      Оператор "and" возвращает свой первый аргумент, если он ложен и в противном случае возвращается второй аргумент     Оператор "or" возвращает свой первый аргумент, если он не равен false и в противном случае возвращается второй аргумент.  
    Сходу можно запутаться, но с примерами станет понятнее
     
      print (4 and 5) --> "5". В этом примере '4" не ложный, а значит при операторе "and" вернется второй аргумент "5".   print(0 and 13) --> "0". Аналогично   print(false and 13) --> "false". В этом примере первый аргумент false(ложный), а значит при операторе and вернется "false".   
      print(4 or 5)  --> "4"  В этом примере "4" не ложный, а значит при операторе "or" вернется уже первый аргумент "4".   print(false or 5) --> "5" В этом примере "false" ложный, а значит при операторе "or" вернется уже первый аргумент "5".   
      Если кто вспомнил, то в C# есть такой оператор "?" (условный) 
      string result = 4 == 4 ? "равно" : "не равно";  // result будет равен true
       На Lua это эквивалентно 
      local result = ( (4 == 5 and "равно") or "не равно")   
      А если опустить все скобки, то 
     
    local result = 4 < 5 and "равно" or "не равно".   
     Скобки можно опустить, потому что "and" имеет выше приоритет чем "or."
     
    Или вот еще пример
    compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'  
      Вот такая интересная штука для ускоренного сравнения вместо конструкции
      
      if условие then     -- код   else     -- код   end   
      Идем дальше. Полезной идиомой Lua является 
      
      x = x or v  
      что эквивалентно 
      
      if not х then       х = v    end   
      Т. е. x равен значению v, когда x ложное.
      
    Оператор "not" всегда возвращает true или false 
        print(not nil)      --> true     print(not false)    --> true     print(not 0)        --> false     print(not not nil)  --> false
     
  2. MasterGH
    Ниже находится обучающий пример плагина для CE Lua с установкой компактного режима применяя парадигму ООП — инкапсуляции.
     
    Для программирования плагинов на Lua могут пригодится приемы ООП. Это касается сущностей, их поведений и взаимодействий между ними.  В данном примере CECompactView — описание класса на основе мета-таблицы и оно является сущностью. Функции класса — uncompact() и compact(), которые реализуют поведения этой сущности. Основной скрипт с описанием сущности можно поместить в отдельный файл .lua и далее можно кратко инициализировать сущность и управлять ей
     
    Например
     
    Сам класс или мета-таблица.
     
     
    Скрипт можно сохранить в Lua файл и добавить в папку autorun.
    Для интересующихся наследованием и полиморфизмом об этом есть в моем блоге (где-то в начале).
  3. MasterGH
    Пример раскрашивания адресов без каких-либо условий
    source
     
    1) Из прошлой записи блога нашли "MainForm.Foundlist3" для работы с TListView (компонент от Lazarus среды разработки)
    2) OnCustomDrawSubItem — функция обработчик раскрашивания вложенных элементов в Item. Не поленитесь, зайдите в файл документации (C:\Program Files\Cheat Engine 7.4\celua.txt)
    Также есть OnCustomDrawItem — раскрашивание невложенных элементов.
     
    Этот способ раскрашивания можно использовать по условиям. Чтобы связать условия с адресами и цветом смотри MemScan Class, FoundList class в celua.txt.
  4. MasterGH
    Скрипт позволит вывести иерархию компонентов CE в виде текста.
     
    Иерархия компонентов CE нужна для написания плагинов. 
    Например, для ColorPicker и для смены шрифта (подобротнее об этом было где-то было в блоге).
     
    Скрипт:
     
    Для CE 6.7
     
  5. MasterGH
    Завтра состоится очень скромная премьера 27 июня в 19.00 (по Московскому времени) видео "Фильтр-свой" чужой. 
    Почему видео находится не на официальном канале? Какая цель у видео?
    Это личное любительское видео-хобби по отладке и изменению игрового кода — взлому игр. Я записываю видео для себя и для желающих.
    Приходите смотреть
     
     
    gta3.CT
  6. MasterGH
    Прошлая точка входа запускающая активирующий скрипт не хотела работать, если запустить гигантский трейнер (сгенеренный на CE), а потом игру.
     
    Для работы трейнера точка входа теперь  задается вот таким образом после генерации кода трейнера
     
    Подробнее в исходниках (лучше смотреть позже, после просмотра видео, которое еще готовится)
    gta3.CT
     
    У версии CE 7.2 есть к сожалению баги.
    1. При генерации трейнера нужно вручную править высоту надписей —  надписи срезаются.
    2. Количество нопов, если прописывать как "nop 7"в  АА, вроде,  на  x64 совсем не работает, только на x32 так можно писать нопы.
     
    Что получилось сделать.
    Сгенерить гиганский трейнер. При подключении к процессу автоматически включается главный скрипт. Работает он с часто обращаемой инструкцией. Извлекает поинтер на главного игрока. И далее по значениям меток может выполнять читы. А сопряженные скрипты могут в метки записывать активацию или использовать поинтер на главного персонажа на инструкциях урона для, например, onehit kill. В активирующем скрипте предполагается работа с оффсетами структуры персонажа и регистрируемыми метками. Например, в структуре можно еще штук 10  оффсетов найти через большой бряк на всю структуру. Значит еще +10 новых меток можно завести в активирующем скрипте и +10 АА скриптов, которые по этим меткам что-то включают....
     
    Переносимость на разные игры.
    В принципе "скелет" АА скриптов показан в исходниках и ожидается, что в этом основная фишка.
    По идее меняется: процесс,  оффсеты, сигнатуры, регистры, инструкции, иконка, заголовок. Для иной игры придется модифицировать  CT таблицу и сгенерировать трейнер.
     
    Если сравнивать, например, с созданием трейнеров на C++. Оффсеты — самое главное и поинтер на структуру, и сигнатура, которая поинтер вытащит. И трейнер получится меньший по размеру. Но на CE уже готово много, а результат фактически один и тот же — запись по оффестам с разным user interface или вообще без него.

  7. MasterGH
    Точка входа в работу читов на Cheat Engine на следующем видео будет начинаться с активирующего скрипта. Таблицу с читами по принципу активирующего скрипта я покажу на видео. В нем будет об общем принципе написания таблицы на CE и расширении её с большим количеством опций + фильтр свой/чужой через функцию commonalities + вынос адреса начала структуры + запись по оффсетам от начала структуры и т.п.
     
    "Активирующий скрипт" — главный скрипт, который вытаскивает адрес начала структуры игрока и помещает его в зарегистрированную метку.
    Также активирующий скрипт содержит однобайтовые регистрируемые метки читов, по которым происходит запись по offsets от начала структуры. По меткам другие скрипты записывают однобайтовые значения 1 или 0.
    Характерно для активирующего скрипта большой размер, много регистрируемых однобайтовых меток и активируется он до запуска читов, чтобы метки успели зарегистрироваться и их "увидели" другие скрипты. 
     
    Руководство. Как запустить так называемый активирующий чит до активации каких-либо читов автоматически.
     
  8. MasterGH
    Сложность: 1/5.
    В этом видео рассматривается способ взлома игры "Удаление инструкций" (noping).
    С помощью этого способа игровое значение не будет перезаписываться игрой, потому что в игре удаляется инструкция записи значения.
     
     
  9. MasterGH
    11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума.
     
    Поздравляю всех: 
    активных пользователей,
    высший состав форума, админов и модеров,
    старожил,
    помогаторов,
    тех кто был на форуме очень давно и перестал заходить.
     
    Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально  пропустил.
     
    Можно пожелать всем бесконечного энтузиазма на тему поиска сигнатур и значений, сравнении структур и стеков, дизассемблирования и ассемблирования. Энтузиазма в программировании на  C++ и WinAPI. Энтузизма в том, чтобы найти универсальное решение при создании любого чита для любой игры.
     
    P.S. Для энтузиазма. Подкину идею. Мне нравится видеть, как наборы инструкций можно условно разделить на: математические, логические, ветвления, чтения и записи и другие. При этом математические на мой взгляд наиболее выделяются, т.к. они заставляют в игре всему меняться. Хотя логические инструкции тоже могут что-то менять, но по ощущениям не так явно менять, как математические инструкции. По математическим в основном меняются перемещение камеры и перемещение персонажа и изменяются игровые значения.  Можно отдизассемблировать весь игровой код и найти все математические операции и точно некоторые из них связаны с будущими читами. Это всякие добавить, отнять, умножить, разделить. Не думаю, что их будет за тысячу даже, которые именно нужны для читов, а не те которые что-то рассчитывают не понятно что) Если руки дойдут, то возьму IDA да пройдусь по какой-нибудь игре с поиском всех математических инструкций, поставлю на них счетчик срабатывания да прогуляюсь в игре персонажем... Если будет время...
  10. MasterGH
    У меня бывают такие случаи, когда увидишь простой пример кода после которого захочется заняться разработкой какой-нибудь игры. 
    Вот один из таких примеров о том, как сделать подъем и опускание предмета и затем его вращение. Это 5 строчек "таких" и 5 строчек "таких", вот подъем и вращение
     
    На видео код можно применять для левитации предметов и вражеских персонажей, которых  можем поднимать, удерживать и бросать. 
  11. MasterGH
    Планируется улучшать и дорабатывать плагины, показать как с ними работать.
     
    1. Вывод данных в окно логов: сканирование, подключение к процессу, опции сканирования, состояния активации и деактивации записией в таблице CE и другие 
    2. Запись действий из пункта 1, сохранение этих действий и воспроизведение по кнопке или горячим клавишам
    3. Показ в дизассемблере CE ветвлений кода при проходе потоками разными цветами (можно видеть код, который не был пройден в разных ситуациях)
    4. Дополнительное окно дизассемблера с опциями подсветки инструкций по типу в градации черно-белых цветов: математические инструкции, логические инструкции, инструкции ветвления, на чтение и запись. 
    5. Улучшение плагина "Dessect Data Scanner" с DBVM или на 4-HW брекйпоинта. В случае DBVM количество брейкпоинтов не ограничено и можно определить тип данных одновременно для каждого байта в структуре по смещениям, а в случае 4-х байтов это в режиме без DBVM одновременно задействуются все 4 hw брейкпоинта, а не 1 hw как сейчас.
     
    Extensions: 
  12. MasterGH
    Вполне читерская программа Sikulix
     
    Помощник для нахождения отличий
     
    Исходник:
     
    Картинки для тренировки
     
    Игра
    Sikulix
    Документация
    Туториалы
     
    Sikulix умеет:
    ждать появления или исчезновения элемента, просто ждать, периодически просматривать область в background (например игрового чата); читать (и писать) текст в(/из) поля ввода, "нажимать на клавиатуру", подсвечивать области, кликать по элементам, удерживать и перетаскивать; перемещаться по окнам по названию процессов; сохранять скриншоты в том числе определенные области; показывать много разных диалогов: ввода, тултипов, сообщений; сравнивать изображения и находить отличные области (пример выше); поиск элементов по маске; поиск групп элементов и перебор их; создание гайдов или руководств  
    Из наиболее интересных применений:
    1) в играх где необходим поиск графических элементов с действиями (кликеры, поиск отличий или поиск/подсчет элементов, маджонги и другие);
    2) нажать на найденных элементы(кнопки, чек-боксы);
    3) найти текстовое значение, перевести в число, посчитать;
    4) ожидает выхода человека из скайпа (или что-то вроде мониторинга чатов);
     
    Ну и так далее...
  13. MasterGH
    Вступление
     
    В CE выделим участок кода и функцию
    Sub eax,edx - вычитание и наиболее значимее чем запись и чтение.
    После декомпиляции
    Если выделили две инструкции
     
    Обращать внимание будем на математику, логику, условия и потом на чтение и запись.
    В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"
     
     
    Как поставить декомпилятор
    1. С форума Cheat Engine качаем архив
    2. Распаковываем в папку с Cheat Engine
    3. В настройках открываем плагин cesmartdec.dll
    4. Идем на инструкцию, выделяем функцию 
    5. Декомпилируем на первой выделенной инструкции из всех выделенных
     
  14. MasterGH
    Я решил рассмотреть три новые функции:
     
    Пользовательские типы данных в hex-окне Фильтр на окне определения адресов Поиск данных в окне Tracer  
    1. Пользовательские тип данных в hex-окне
     
    Пример как сделать:
     
    Фильтр на окне определения адресов
     
     
    3. Поиск данных в окне Tracer

     
    Обычный поиск, как на прошлых скринах
     
    Примеры
     
    Ну и более интересная версия перебора и одновременного выделения записей.
     Здесь нужно открыть окно "Трейсера" и рядом в Lua окне писать свои условия в функции "Compare()", "PrintData()", Selected()
     

     
    Документация
     
    Для вывода referencedBytes из трейслога можно использовать byteTableToDword(referencedBytes) (смотрим документации выше) получая из TfrmTracer.Entry[index].referencedBytes или в строке поиска у Трейслога вбить 
    byteTableToDword(referencedBytes) > 0 and print(string.format("0x%08X - 0x%08X", RIP, byteTableToDword(referencedBytes))) == 1  
    Практическое применение
     
    Больше всего могут интересовать реальные практические примеры. Если будет время, желание может быть сделаю, а так просто общий обзор.
  15. MasterGH
    Наткнувшись на тему вспомнил, что  не все написал. В прошлом посте блога рассматривал бряк через DBVM.  К сожалению, та версия dbvm из поста блога пропускала очень много инструкций и практически смысла нет её юзать.  Например она определяла 16 инструкций, когда их было несколько тысяч, т.е. например 500 оффестов и на каждой по 10 инструкций. По DBVM надо, конечно, писать Дарк Байту, но желания нет.
     
    Так вот. Не только с DBVM можно ставить бряки на участок памяти.  Есть еще тип  брейкпоинтов page exceptions. О нем давно-давно известно и он как на ладони, но почему-то я пропустил его, когда искал оффсеты в структурах
     

     
    С ним можно работать с lua и без. Ловит огромное количество инструкций. Желательно мощное железо, т.к. игра скорее всего будет очень тормозить по 2-5 fps. Но на короткий запуск сойдет. 5 секунд и достаточно для снятия логов. На пару действий в игре тоже сойдет: выстрел или пермещение персонажа, прыжок или вообще ничего не делаем просто снимаем логи.
     
    1) способ поставить бряк из окна памяти. Подопытная программа "Tutorial-x86_64.exe"

     

     

    Здесь видно, что размер 720 байт
     
    Логи из окна инструкций CE 
     
    2) Способ через Lua (подробнее в документации)
    debug_setBreakpoint(structure_address, sizeMemory, bptAccess, bpmException, onBreakpoint)  
    P.S. Я написал про два способа установки брейкпоинта на множество адресов без DBVM. Вручную можно ставить такие брейкпоинты, но дальше уже кропотливый просмотр на предмет того чем это может помочь. Это может помочь определить типы данных и помочь прикинуть размер структуры, а также найти активные оффсеты. Можно на Lua автоматически определять активные offsets по базовому адресу структуры и эту структуру создать и заполнить в dessectData. Если будет время напишу скрипт.
  16. MasterGH
    Пример лога снятия данных с брейкпоинта на структуру 0x1000 за 10 секунд.
    В структуре по смещению 0x2C0  находится здоровье персонажа. На начало этой структуры и был поставлен брейкпоинт .
     
    Ниже будет большой кусок опкодов, который работает со структурой. Можно посмотреть в каком порядке опкоды исполняются и с какими смещениями, насколько далеко они друг от друга. Некоторые смещения рядом с известными смещениями могут заинтересовать.  Одинаковые опкоды в определенном порядке, но по разным RIP тоже могут заинтересовать. Switch-case могут заинтересоваь в виде cmp [x]. число. Инструкции чтения из структуры больше интересуют, т.к. они могут более вероятно, на что-то влиять - из них читается и для чего-то это нужно. 
     
     
    Причем последовательность инструкций идет в порядке вызова, но RIP всегда уникальный (RIP не дублируются). Здесь RIP, т.к. CE 64 разрядный
    Если последовательность к данным структуры примерно сохраняется, то можно обратить внимание на обращение к адресам в структуре рядом со здоровьем по смещению 2с0: до обращения к адресу здоровья, во время и после. Я выделил их стрелками. Эти смещения могут быть связаны со здоровьем

     
    Интересные моменты могут быть с так называемыми switch-case операциями. Можно пытаться их подменить

  17. MasterGH
    Обычно, дается 4 аппаратных брейкпоинта на адреса памяти. Их можно включать одновременно  и найти инструкции, которые в данный момент срабатывают. Так можно определить тип данных у адресов и найти инструкции. По инструкциям найти смещения внутри дизассемблированной инструкции. По смещениям визуально определить структуры в структурах. Расструтуризовать структуру в dessect data и найти много интересных параметров для читов. Вручную с 4мя бряками делать очень хлопотно. 
     
    Начинается все с установки огромного бряка на структуру из туториала CE.

     
    Логи
     
    По логам видим, что какие-то инструкции обращаются и скорее всего обращаются к нашей той самой структуре. Проверим так ли это и заодно увидим к каким другим структурам идет обращение
     

     
    Видим, что одна из инструкций действительно обращается к нашей структуре и далеко за пределам диапазона 4 брейкпоинтов. Т.е. это действительно огромный такой брейкпоинт на всю структуру.
    Также видим, что инструкция отработала по другим 4 структурам и это могли быть враги  и друзья игрока.
    Также видим, что тип данных автоматически неверно определился в окна DesectData и мы можем его скорективать - это будет 1 байт

     
    Вот так можно проводить ручную расструктуризацию. Кропотливо по байтикам на весь размер структуры выставлять коментарий и правильный тип данных - не все типы данных могут подцепиться и при экспериментах с изменением значений могут быть глюки в игре или даже вылеты. После того как вся структура изучена, можно сделать множество читов, которых нет ни в одном трейнере, если их еще не сделали.
  18. MasterGH
    Функции:
    1) Три типа данных: float, double, integer
    2)  10 слотов сохранений
    3) Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию
    4) Озвучивание загрузки или сохранения

    Как пользоваться:
    1. Подключаемся к процессу игры любым способом (хоть вручную, хоть на Lua, чем угодно)
    2. В CE вставляем Lua скрипт
     
    3. Меняем адрес teleport_address = "03D2C6DC"   на тот который нужно.
    Здесь может быть указатель например  -"[[address+XX]+XX]" или через registersymbol() в АА скриптах.
    Не тестировалось если адрес еще невалидный, т.е. не существует в памяти. По идее слоты проинициализируются с нулевыми координатами по умолчанию. Поэтому лучше Lua скрипт запускать в момент существования адреса. Проверка на существование адреса - getAddressSafe(string, local OPTIONAL, shallow OPTIONAL): returns the address of a symbol, or nil if not found. Similar to getAddress when errorOnLookup is false, but returns nil instead. Проверку можно делать по таймеру. Запуск скрипта это последняя строка 
     
    4.Меняем тип данных type_data = 'INTEGER'            -- FLOAT, DOUBLE, INTEGER

    Данный скрипт предоставляется как есть. Сделан для всех пользователей форума и можно использовать его в любых целях: в образовательных, в коммерческих. Если что-то не работает, то придется править вам самим. У меня к сожалению нет времени на оказание помощи. Справочник по луа функциям в файле"celua.txt"
  19. MasterGH
    За нейронными сетями и быстрыми вычислениями (например на тензорных ядрах видеокарт) 
     
    скорее всего,  огромное будущее и огромный спрос. Стартануть в эту тему можно,  изучив статью с хабра о принципах AlphaGo Zero и вот эту.  Основные моменты это рекуррентные сети, которые ищут в глубь и сверточные сети, которые чем-то похоже на хеш-сумму (на тензорных ядрах они-то и быстро считаются). 
     
    На данный момент по своей работе я активно развиваюсь в нескольких направлениях: в многопоточном программировании на CPU/GPU,  вычислительных шейдерах, сокетах. Если писать программы на одном CPU ядре, то все чаще этого не хватает по мощности как на ПК так и тем более на мобильных устройствах. Такое ощущение, что без многопоточного программирования скоро нельзя будет никуда устроиться работать. Сейчас  тенденция много ядер на CPU и их использовать. А еще лучше и быстрее что-то "тяжелое" отправить вычислять на GPU. Это не говоря по обработке графических данных. С ними очень эффективно работают программы на GPU. А чтобы системы соединялись между собой на расстояниях надо хорошо знать сокеты и многопоточное программирование. Основная фишка в многопоточности это спланировать множество задач из одной точки программы и в другой точке ждать, когда они все одновременно выполнятся. Некоторые, задачи при этом должны синхронизироваться только с основным потоком. Когда все задачи выполняться на разных ядрах CPU, то итоговый результат на каком-то одном ядре уже сделает все что требуется. Бонусом к ускорению на CPU ядрах служат специальные ассемблерные инструкции, которые например, позволяют обрабатывать больше данных за меньшее количество тактов.
     
    Интересующимся ссылки в основном по Unity игровом движке
     
  20. MasterGH
    Спавн итемов удалось сделать через dnSpy.
    При клике на любой предмет на меню крафта он создается в инвентаре, а если там занято, то выкидывается на карту.
     
    Я переписал метод клика на рецепт, вот он оригинальный
     
    На этот
     
     
     
    Для спавна заменить Assembly-CSharp.dll из архива, сделав копию предварительно
    Assembly-CSharp.rar
×
×
  • Создать...

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

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