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

MasterGH

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

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

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

    129

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

  1. MasterGH
    Чтобы получить цвет из компонента нужно найти его на форме CE через Lazarus. Этот компонент нельзя найти визуально, он скрыт.
    Узнал об этом случайно, когда зашел на форум Cheat Engine в тему расширений на Lua. Теперь в дизассемблере можно будет быстренько цвета менять

  2. MasterGH
    11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума.
     
    Поздравляю всех: 
    активных пользователей,
    высший состав форума, админов и модеров,
    старожил,
    помогаторов,
    тех кто был на форуме очень давно и перестал заходить.
     
    Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально  пропустил.
     
    Можно пожелать всем бесконечного энтузиазма на тему поиска сигнатур и значений, сравнении структур и стеков, дизассемблирования и ассемблирования. Энтузиазма в программировании на  C++ и WinAPI. Энтузизма в том, чтобы найти универсальное решение при создании любого чита для любой игры.
     
    P.S. Для энтузиазма. Подкину идею. Мне нравится видеть, как наборы инструкций можно условно разделить на: математические, логические, ветвления, чтения и записи и другие. При этом математические на мой взгляд наиболее выделяются, т.к. они заставляют в игре всему меняться. Хотя логические инструкции тоже могут что-то менять, но по ощущениям не так явно менять, как математические инструкции. По математическим в основном меняются перемещение камеры и перемещение персонажа и изменяются игровые значения.  Можно отдизассемблировать весь игровой код и найти все математические операции и точно некоторые из них связаны с будущими читами. Это всякие добавить, отнять, умножить, разделить. Не думаю, что их будет за тысячу даже, которые именно нужны для читов, а не те которые что-то рассчитывают не понятно что) Если руки дойдут, то возьму IDA да пройдусь по какой-нибудь игре с поиском всех математических инструкций, поставлю на них счетчик срабатывания да прогуляюсь в игре персонажем... Если будет время...
  3. MasterGH
    Проведено огромное количество опытов над структурами. Много переделок.
    Очень кратко напишу, что поменялось.
     
    1. Название структуры состоит из адреса, количества адресов в ней и  времени в миллисекундах на один байт в структуре.
    Подчеркнуто красным

     
    2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность,  тем точнее результат
    3. В именах структур теперь ценная информация. Это смещение, регистр и тип
     
    На скриншоте ниже можно посмотреть пункты 2 и 3.
    Также на этом скриншоте я заморозил по соседству адрес (поставил Lock) и пару раз пострелял в игре Сталкере Зов Припяти
     

     
    Выводы, которые я сделал за очень и очень скромное время пользования. За минут 15 и на паре структур оружия в двух разных играх L4D2 и Сталкер Зов Припяти
    1. Если править 4-х байтовые значения, то легко можно нарваться на вылет игры. Но подключившись снова, можно продолжить.
    2. Правки значений с типом в 1 байт могут заблокировать оружие (в двух играх) или же устроить скорострельность на полную катушку в L4D2.
    3. Правки значений с типом float. Можно легко нарваться на вылет в игре, если например поставить нолик. Деление на ноль или какая-то иная причина. Лучше ставить чуть больше нуля, можно положительные или отрицательные значения
    4. Частенько бывают адреса в структуре, на которых включаются инструкции записи только после изменения значения. Тут я пока ничего не смог сделать, просто удалить их из структуры как лишние.
    5. Для сканера используется 1 аппаратный брейкпоинт, остальные три штуки еще не используются, т.к. сложно их прикрутить. Если использовать все 4 аппаратных бряка, то скорость сканера была бы в 4 раза быстрее. Сейчас на 2К байт по 10 мс, у меня уходит где-то 150 секунд. Если я ставил 20мс, то находилось на 10 смещений больше или какие-то другие смещения пропадали.
     
    Код будущего плагина все еще находится на стадии тестирования. Поэтому пока плагин не выкладываю.
     
    upd1:  инструкции cmp, add, sub, xor, and, not, test, mulss, fsub, fmul, dec, inc, mul; теперь выводятся в имя элемента структуры.
    На скриншоте случайно вышел на координаты UI таймера. Сделал три скана трех структур в новых окнах

     
     
    upd2: перемещение структуры



     
    Итог перемещения двух структур в первую

     
     
  4. MasterGH
    Завтра состоится очень скромная премьера 27 июня в 19.00 (по Московскому времени) видео "Фильтр-свой" чужой. 
    Почему видео находится не на официальном канале? Какая цель у видео?
    Это личное любительское видео-хобби по отладке и изменению игрового кода — взлому игр. Я записываю видео для себя и для желающих.
    Приходите смотреть
     
     
    gta3.CT
  5. MasterGH
    1. Нашел адрес патронов
    2. Поставил брейкпоинт
    3. Выкинул из рук Калаш с этими патронами
    4. Увидел инструкцию, которая срабатывает когда что-то выкидываешь.
     
    Решил зацепиться за эту инструкцию.
     
    Либо спавн до инструкции, либо после.
    Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали (маркеры слева на сриншоте снизу).
    Поставил кнопкой бряки на все инструкции ветвления
     
    Снимал бряки, когда в игре ничего не делал по F5
    Затем, когда прерываться перестал. Оказался на том месте на скриншоте. Там уже идет ветвление, когда выкидываешь.
    Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали.
     
     
    Получается что-то типа этого условия
    cmp [[edi+00048704]+10],[[edi+00048704]]
     
    Если предмет из рук не выкидывается на сцену, то условие истины и происходит прыжок. Если оружие было викинуто, то в правой части другое значение. Затем левая и правая где-то дальше обнулятся.
    ------------------
    Что я хочу сделать. Разобраться с поиском условий по ветвлениям, которые изменяют [[edi+00048704]+10] и [[edi+00048704]], делать это по аналогии как было описано выше. Для начала, для спавна не запускать поток на его функции, а поменять данные, которые проверяют условия (где-то по рутине), чтобы предметы сами из рук выкидывались. Пока так.
  6. MasterGH
    Долго не могу решить проблему
    Traceback (most recent call last): File "C:\air test\plugins\firebase\build.py", line 124, in run self.SIGNAL_INSERT_LOGVIEW.emit(_str.decode("GB2312").encode("utf-8")) UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 11-12: illegal multibyte sequence QObject::~QObject: Timers cannot be stopped from another thread Если кто шарит на питоне просьба помочь. Питон 2.7
     
    Основная строка
    self.SIGNAL_INSERT_LOGVIEW.emit(_str.decode("GB2312").encode("utf-8")) При билде апк в firebase через плагин в AirTest (QA-тестирование на Unity)
     
    Среда разработки от уважаемых китайских разработчиков Я думаю в связи с этим ошибки с кодировкой GB2312. Гуглил, искал... пока безтолку
     
     
    Исходники
    Билд
  7. MasterGH
    Пошаговая отладка в dnSpy позволяет ставить брейкпоинты на C# код во время работы игры, перемещаться по коду, просматривать значения переменных.
    Сэкономит кучу времени при поиске и отладке игрового кода,
     
    1. Страница загрузки dnSpy
    2. Скачиваем dnSpy и все архивы с mono.dll файлами
    Unity-debugging-4.x-win32.zip
    Unity-debugging-4.x-win64.zip
    Unity-debugging-win32.zip
    Unity-debugging-win64.zip
    3. Смотрим свойства exe файла игры и определяем по нему версию Unity. Например, "Версия продукта 5.5.0.3120186" или версия "файла 5.50.39994" может указывать на версию Unity 5.5.
    4. Определяем разрядность приложения через Process Explorer
    5. Т.к. версия Unity 5.5 и приложение 32 разрядное, то открываем Unity-debugging-win32.zip ищем там версию Unity и заменяем mono.dll в директории игры
    6. Запускаем игру и dnSpy x86 (игра 32 разрядная поэтому x86). Открываем файл "\...\Managed\Assembly-CSharp.dll" Запускаем отладку нажав F5 или кноgку Play
    7. Настраиваем соединение и жмем ок

    8. Ставим брейкпоинты, смотрим перемененные, перемещаемся по коду, пишем свой код и так далее
    9. После изменения кода, нужно перезаписать модуль предварительно сохранив его
     
    О других способах подключения пошаговой отладки есть на английском руководство.
    ----------------------
     
    Как работать в пошаговой отладке
     
    Работать можно почти также как и в Cheat Engine в пошаговой отладке или в среде разработки программ.
    Начать стоит с обзора названия пространств имен, названия классов, методов и полей, Названия могут подсказать логическую связь с читом, который хотим сделать.
    Стоит обратить внимание на такие названия как "IsPlayer, Player, Character, CharacterController, MainCharacter, Health, Inventory, Craft" и другие. Чтобы не искать вручную можно задействовать поиск сборкам. Поиск стандартного тега "Player" в виде в строки кода (в Unity выше версии 5.0) или свойства "IsPlayer" может помочь найти игрока или отличить от чужих.
     
    Важно представлять иерархию игровых объектов, которую мы не видим в dnSpy. Программист работая в Unity видит это окошко много лет и эту иерархию всегда представляет смотря на скрипты в dnSpy

    Скрипты наследники от MonoBehavior могут находиться на игровом объекте и могут работать как с ним так и с другими объектами. Получается такая штука, что игровой объект всегда имеет Transform компонент с полями позиций, углами и scale. Классы Transform и GameObject самые основные. Методами этих классов можно разместить объект в мире, создать или удалить его. В идеале удалив объект со сцены не должно быть никаких ошибок связанных с пустыми ссылками, потерей объекта. Также и клонировав объект, тоже не должно быть ошибок. Но не всегда так просто отспавнить игровой объект. Если это сделать методами UnityEngine, то другие классы ничего не будут знать о появлении игрового объекта. Нужно ставить брейкпоинт в функции Start или Awake в классе и трейсить по Shift+11 чтобы выйти на функцию разработчиков спавна этого GameObject. Функции Start или Awake (в классе наследника от MonoBehavior) срабатывают один раз при включении скрипта и инициализации. По ним можно выйти на строку кода, которая создает объекты в мире.
     
    Отдельно стоит сказать про количество скриптов. Практически в любой игре, которая мне попадалась в dnSpy много скриптов или очень много. Иногда и не будет понятных названий у типов (из-за обфускации). В любом случае при пошаговой отладке можно найти требующиеся участки кода для создания чита и использовать их по другой логике.
     
    Основные приемы
    В Update можно обновлять параметры только своего игрока. Например, в Character классе сделать сравнения в Update по IsPlayer свойству (если оно там есть) и у тебя за каждый кадр рендеринга будет максимум характеристик.
    В Update с классом Input можно считывать хоткеи.
    В Start и Awake можно подгружать свои ассеты с внутриигровым user interface. Код скриптов перед загрузкой ассетов должен быть внедрен через dnSpy
    Иерархию игровых объектов и инспектор, если очень нужно, то можно отрисовать в user interface. Обычно не требуется. (поищите по форуму в игрострое)
     
    В заключении
    Пока нет времени делать трейнер или таблицу на CE для включения опций в играх Unity. Для меня пока подходит способ через перезапись модуля в dnSpy вручную.
    Вместо трейнера можно сделать программу патчер, который будет проверять версию игры и перезаписывать модуль с возможностью вернуть оригинальный модуль
  8. 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
     
  9. MasterGH
    ИМХО отказываться от CE Lua скриптов из-за утечек памяти не стоит.
    Можно чистить память следующим образом
    function startCollectgarbageProcess(interval, showStatus) local timer1 = createTimer(true) timer1.Interval = interval timer1.onTimer = function () if (showStatus) then print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) end collectgarbage("restart") collectgarbage("collect") if (showStatus) then print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) end end end -- Собирать каждую 1 минуту и показать результат startCollectgarbageProcess(60000, true)  
  10. MasterGH
    Немного комментариев к этой версии.
     
    1. Исправлены смещения
    2. Добавлены также инструкции на запись
     
    На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.
     
  11. MasterGH
    Спавн итемов удалось сделать через dnSpy.
    При клике на любой предмет на меню крафта он создается в инвентаре, а если там занято, то выкидывается на карту.
     
    Я переписал метод клика на рецепт, вот он оригинальный
     
    На этот
     
     
     
    Для спавна заменить Assembly-CSharp.dll из архива, сделав копию предварительно
    Assembly-CSharp.rar
  12. MasterGH
    Legacy of Kain: Defiance
     
    Это старая PC игра выпущена в районе 2003-2004 годах, когда я еще учился в школе в классе 11-ом.
    В самом конце игры была сложная миссия сражения с боссом, никак не получалось её пройти.
     
    Кстати из этой игры есть персонаж на аватаре у пользователя с форума Cheat Engine
     
    Не мог пройти, как не пытался. То ли руки не из того места, пройти очень хотелось. Было у меня немного журналов игровых и там я много раз видел программу MTC. Казалось, что она очень сложная для понимания. Просто помнил о ней и не пользовался.
     
    Так вот игру пройти не мог и решил все-таки MTC научиться пользоваться. С помощью МТС я впервые сделал чит на HP и прошел игру. После этого я переломал все игры, которые у меня были, изучил в этой программе все что можно, хотя с большим трудом это все давалось. Потом появился Интернет. Узнал про Artmoney и другие сканеры. Кстати 9 мая разработчики обещали новую версию Artmoney.
     
    В общем с Legacy of Kain: Defiance и МТС, и началось увлечение взломом игр
  13. MasterGH
    Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше
     
    В утилите, которую я делал "Lua Regular Expressions (v. 1.0)"

     
    Текст во вкладке "gmatch"
     
    Game1
    gameCompany
    DAU
    53.21k
    -20%
    Game2
    gameCompany
    DAU
    20.35k
    -20%
     
    Поиск элемента после строки
     
    "DAU "DAU%c%c(.-)%c%c""
     > 53.21k;20.35k;
     
    Поиск элемента до строки
    Вот такой паттерн со двигом скобок для поиска прыдыдущеей фразы
     
    "%c%c(.-)gameCompany%c%c"
     
    не прокатит для вывода списка игр над фразой gameCompany
      
     > ;53.21k
     > -20%
     > 
     > Game2
     > ;
     
    Очевидно, можно сделать поиск по похожим фрагментам, которые идут последовательно сверху вниз. 
     
    Для просты сначала добавим первую пустую строку и видим повторяющиеся фрагменты
     
    %c%cGame1%c%cgameCompany%c%c
     
    пишем шаблон ".*%c%c(.-)%c%cgameCompany%c%c" и опять мимо
     
     > Game1;53.21k
     > -20%
     > 
     > Game2;
     
    Потому что текст над Game2 пошел выше Game2. Тогда делаем захват, только первой фразы и дальше не идем
     
    "%c%c(%w-)%c%cgameCompany%c%c"
     > Game1;Game2;
     
    И тогда все ок.
     
    Но это еще не все. Осталась первая пустая строка, которую добавили, если её удалить, тогда
     
    "%c%c(%w-)%c%cgameCompany%c%c"
     > Game2;
     
     Не видит Game1.
     
     Значит мы можем  убрать %c%c,
     
     "(%w-)%c%cgameCompany
     > Game1;Game2;
     
    Дальше название игры может быть таким "My Game: my Game". Здесь и пробел и двоеточие. В таком случае текст уже будет
     
    My Game1: my Game
    gameCompany
    DAU
    53.21k
    -20%
    My Game2: my Game
    gameCompany
    DAU
    20.35k
    -20%
     
    Пробуем
    (%w-)%c%cgameCompany
    > Game;Game;
     
    Что не верно, т.к. захват одним (%w-)
     
    Мы должны в скобках развернуть фразу имени игры. В ней могут быть пробелы, числа, текст и двоеточие
     
    ([%w%s]-)%c%cgameCompany
    >  my Game; my Game;
     
    Затем

    ([:%w%s]-)%c%cgameCompany

    > My Game1: my Game;

    > My Game2: my Game;
     
    Затем
    %c?%c?([:%w%s]-)%c%cgameCompany

    > My Game1: my Game;
    > My Game2: my Game;
     
    Вот и все. Если  попариться один раз, то тексты уже парсить будет гораздо быстрее.
     
    Так я вывел столбы DAU и названий игр в таблицу, что было в районе 500 строк из пару десятков тысяч строк
     
    p.s. Текст в консоли Lua отличается %c%c, а %с
    p.s.p.s. Можно разсплитить текст по "/n/r" или "/n" в таблицу строк и по индексам данных находить предыдущую или последующую фразу. Но мне проще две строки ввести "%c?%c?([:%w%s]-)%c%cgameCompany" и "DAU%c%c(.-)%c%c"
  14. MasterGH
    Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2
     
    Задача  try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс.
    В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...
     
    Пример от DarkByte для  try/except с счетчиком crashes
     
     
  15. MasterGH
    Вдохновение появилось после просмотра видео @Xipho по Ultimap
    Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA.
    Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать.
     
    Пока из подсказок я нашел это и это
     
    Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен не из ultimap, а из tracelog)
       
    Адрес1 - Tutorial-i386.exe+2578F - 29 83 AC040000        - sub [ebx+000004AC],eax" или адрес 0x00402B77
    Адрес2 - Tutorial-i386.exe+16DBED - 89 45 FC              - mov [ebp-04],eax или адрес  0x0056DBED
     
    И вот думаю, как  скрипт ниже переделать, чтобы сначала вывести текстовый маршрут, а потом и хотя бы одну ветвь кода. Т.е. поднимаясь вверх по иерархии вызовов нужно остановиться до Адреса2.
     
     
    Пока просто вывод от стартовой функции без условий
     
    Как будет время попробую доделать...
     
    p.s. Ну ничего так idc скрипты. Много всего, но смысл тот же, что и в CE Lua у некоторых функций. Еще не разобрался как Python подключить к IDA, пока на idc скриптах.
    Будет интересно еще посмотреть эту же задачу на Hydra и Radare, ну и в CE (в новой версии появилось окно диаграмм)
     
  16. MasterGH
    Поиск по модулям
     

     
    Исходник
     
    Поместить ModuleListRegioScan.lua в autorun.
     
    Что интересно, Дарк Байт решил написать на Lua. Эта функция жестко в CE не впиливается. Можно выбирать, хочу это расширение поставить или нет. Посмотрел, если понравится, то оставил. Cheat Engine перекомплировать не нужно и не нужно в нем делать опции скрывать или показывать функционал.
     
    Источник
  17. MasterGH
     
     
     
     
    Репозиторий
     
    1. На адрес устанавливается брейкпоинт.
    2. Идем в игру делаем или не делаем что-то
    3. Начинают срабатывать инструкции на брейкпоинте
    4. От каждой инструкции начинается трейслог, подобный тому, который есть у CE, но менее тормозной
    5. Заканчивается трейслог на инструкции, на 100-ом счетчике после ret-а (об этом пункте будет уточнение). Здесь выходим на коневой цикл
    6. Трейслог останавливается и ожидание следующей инструкции, которая сработает на брейкпоинте, она должна быть отличной
     
    В итоге мы имеем кучу трейслогов начинающихся с адреса работающего с параметром (например, кол-во патронов в обойме) и заканчивающихся на корневом цикле. Также мы собираем данные об адресах с рет-ами и счетчиками.
    По этим данным можно нарисовать схему, где ret-ы меняют направление пути прохождения потоком дизассемблерного кода
     
    На скриншотах ниже
    Вертикальные линии со кружками -— это ветвь трейслога
    Белый кружок — адрес ret-a, который не повторялся
    Пунктирный кружок — адрес ret-а, который повторялся. Стрелка от такого пунктирного круга будет указывать на белый круг.
     
    По схеме видим, где ret-ы меняют свое направление поднимаясь по рутине в корневом цикле
     
     
     
     
    По плану по визуальной части:
    1. Клик на кружок — переход на код
    2. Придумать что-то, чтобы стрелки не накладывались друг на друга
    3. Установка брейкпоинтов на кружках — становиться красными
    4. Легенда. Номер ветви, связанная инструкция, состояние брейкпоинтов. Комментарий к ветви
    5. Загрузка/сохранение легенды
     
    Для чего нужно. Для поиска условий, которые включают и выключают ветви кода. Т.е. чтобы можно было это условие быстро найти и изменив его, повторить выполнение кода ветви, которая "пробьётся" из корневого цикла. Таким образом попытаться повторить действие в игре, а если не получаться повторить, то определить дополнительные условия.
  18. MasterGH
    1. WebSite-Watcher позволяет отслеживать изменения на веб-страницах в том числе по по регулярным выражениям. Можно отслеживать изменения на сайтах Cheat Engine и других. Форум отслеживать смысла особого нет. Проще подписаться на обновление и почтовый клиент поставить.
    2. Программы тестирования и автоматизации под разные ОС:
        Sikuli — открытая кросс-платформенная визуальная среда создания сценариев-скриптов
        AirTest IDE — почти как Sikuli и более того, китайские разработчики были вдохновлены Sikili и решили взять из него многое и использоваться  в QA тестировании. 
    3. Автоматический скрывать значков на рабочем столе AutoHideDesctopIcons
    4. LightShot - быстро делаем скриншоты и заметки к ним. Можно еще использовать SnagIt, он еще и видео может снимать
    5. f.lux — софтина регулирующее цветовую температуру компьютерного монитора
    6. VerseQ — лучший на мой взгляд клавиатурный тренажер. Есть плагины тренировки на языки программирования
    7. Scanner — показывает график в виде секторов о данных на жестком диске
    8. ProcessExplorer, ProcessMonitor, WinScanner, API Monitor... все по системе
    9. Возможно понравится XYplorer как замена или дополнение к файловому браузеру
    10. NotePad ++ и sublime_text - на мой взгляд хорошие редакторы текста, может быть даже одни из лучших
     
    Как-то раз нужно было поставить пробелы между китайскими иероглифами в гугл таблице (все для игры на Unity), чтобы в игре разрядить текст и он не был мелким. На notepad++ это выгладило так

  19. MasterGH
    Пост для тех, кто интересуется Lua в Cheat Engine. 
     
    Можно подхватить разные моменты активации и деактивации записи в таблице CE и рассчитать размер кода между метками
     
    1. По шаблону вставляем АА код для туториала Cheat Engine
    2. Регистрируем метки-маркеры в АА коде
    3. Этими метками в Lua считаем и выводим ""endCode - startCode" размер байтов
     
    Пример, который подсчитал 15 байтов

     
     
     
    Пример скрипта
     
    Документация кому интересно
     
  20. MasterGH
    Вступление
     
    В CE выделим участок кода и функцию
    Sub eax,edx - вычитание и наиболее значимее чем запись и чтение.
    После декомпиляции
    Если выделили две инструкции
     
    Обращать внимание будем на математику, логику, условия и потом на чтение и запись.
    В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"
     
     
    Как поставить декомпилятор
    1. С форума Cheat Engine качаем архив
    2. Распаковываем в папку с Cheat Engine
    3. В настройках открываем плагин cesmartdec.dll
    4. Идем на инструкцию, выделяем функцию 
    5. Декомпилируем на первой выделенной инструкции из всех выделенных
     
  21. MasterGH
    Прошлая точка входа запускающая активирующий скрипт не хотела работать, если запустить гигантский трейнер (сгенеренный на CE), а потом игру.
     
    Для работы трейнера точка входа теперь  задается вот таким образом после генерации кода трейнера
     
    Подробнее в исходниках (лучше смотреть позже, после просмотра видео, которое еще готовится)
    gta3.CT
     
    У версии CE 7.2 есть к сожалению баги.
    1. При генерации трейнера нужно вручную править высоту надписей —  надписи срезаются.
    2. Количество нопов, если прописывать как "nop 7"в  АА, вроде,  на  x64 совсем не работает, только на x32 так можно писать нопы.
     
    Что получилось сделать.
    Сгенерить гиганский трейнер. При подключении к процессу автоматически включается главный скрипт. Работает он с часто обращаемой инструкцией. Извлекает поинтер на главного игрока. И далее по значениям меток может выполнять читы. А сопряженные скрипты могут в метки записывать активацию или использовать поинтер на главного персонажа на инструкциях урона для, например, onehit kill. В активирующем скрипте предполагается работа с оффсетами структуры персонажа и регистрируемыми метками. Например, в структуре можно еще штук 10  оффсетов найти через большой бряк на всю структуру. Значит еще +10 новых меток можно завести в активирующем скрипте и +10 АА скриптов, которые по этим меткам что-то включают....
     
    Переносимость на разные игры.
    В принципе "скелет" АА скриптов показан в исходниках и ожидается, что в этом основная фишка.
    По идее меняется: процесс,  оффсеты, сигнатуры, регистры, инструкции, иконка, заголовок. Для иной игры придется модифицировать  CT таблицу и сгенерировать трейнер.
     
    Если сравнивать, например, с созданием трейнеров на C++. Оффсеты — самое главное и поинтер на структуру, и сигнатура, которая поинтер вытащит. И трейнер получится меньший по размеру. Но на CE уже готово много, а результат фактически один и тот же — запись по оффестам с разным user interface или вообще без него.

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

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

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