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

ChestGlaring

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

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

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

    8

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

  1.     Весь мир контейнер и ты в нем контейнер с контейнером. С этих слов и начинается наше приключение в мире отладки и исследований.
        

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

        Использование игровой консоли для спавна, на примере TES Skyrim команда выглядит как player.AddItem <ID> <количество>, во многих играх спавн с помощью консольной команды умеет класть предмет только в инвентарь игрока.
        

        На этапе поиска откуда начать взлом существует разветвление.

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

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

     

                            dP4Bqmp.png

        

      Будем отталкиваться в анализе дампа от этого сообщения.

    Идея проста, если мы найдем функцию, которая сообщает об успешном выполнении консольной команды, значит где-то ранее, есть функция спавна. 
    Как только найдем функцию, отображающую сообщение, необходимо будет сохранить список вызовов, которые были ранее, для этого в x64dbg необходимо перейти во вкладку Call Stack.

    Получаем вот такой список. Далее необходимо исследовать функции сверху вниз, восстанавливая только основные переменные, чтобы не тратить впустую время.

     

    Address          To               From             Siz Comment                   Party 
    000000A0B28FE9D8 00007FF6E84D8872 00007FF6E84A0ABF 7B0 skyrimse.00007FF6E84A0ABF User
    000000A0B28FF188 00007FF6E84D7B8D 00007FF6E84D8872 7B0 skyrimse.00007FF6E84D8872 User
    000000A0B28FF938 00007FF6E84D8E2B 00007FF6E84D7B8D 80  skyrimse.00007FF6E84D7B8D User
    000000A0B28FF9B8 00007FF6E849739F 00007FF6E84D8E2B A0  skyrimse.00007FF6E84D8E2B User
    000000A0B28FFA58 00007FF6E8497692 00007FF6E849739F 60  skyrimse.00007FF6E849739F User
    000000A0B28FFAB8 00007FF6E8A8AF07 00007FF6E8497692 50  skyrimse.00007FF6E8497692 User
    000000A0B28FFB08 00007FF6E876362D 00007FF6E8A8AF07 40  skyrimse.00007FF6E8A8AF07 User
    000000A0B28FFB48 00007FF6E875F4F4 00007FF6E876362D 90  skyrimse.00007FF6E876362D User
    000000A0B28FFBD8 00007FF6E875CC05 00007FF6E875F4F4 30  skyrimse.00007FF6E875F4F4 User
    000000A0B28FFC08 00007FF6E94FB17A 00007FF6E875CC05 40  skyrimse.00007FF6E875CC05 User
    000000A0B28FFC48 00007FF88ED46FD4 00007FF6E94FB17A 30  skyrimse.00007FF6E94FB17A System
    000000A0B28FFC78 00007FF88FE5CEC1 00007FF88ED46FD4 80  kernel32.00007FF88ED46FD4 System
    000000A0B28FFCF8 0000000000000000 00007FF88FE5CEC1     ntdll.00007FF88FE5CEC1    User


        В теории, необходимо искать функцию по нескольким параметрам:
    1. Скорее всего это вызов виртуальной функции (Слава ООП)
    2. В аргументах передается указатель на конструктор предмета, который необходим для выделения памяти под конкретно выбранный тип предмета.

    Указатель на виртуальную таблицу класса игрока/мира/npc в зависимости где будет создаваться предмет.  

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

        

        Походу исследования, я нашел 3 функции, которые подходят под описание выше. В итоге находим её и восстановив видим это.

     

    hMqa70a.png

        

      Дальше, необходимо её как-то проверить и чтобы не заниматься ерундой, по типу написания длл или использования скриптов для вызова функции, просто меняем значения в передаваемых аргументах. Например, так: 

     

     

        

      Функция выглядит довольно просто для вызова извне. Первый аргумент указатель на виртуальную таблицу класса игрока. Вторым аргументом идет конструктор для типа оружия.

    Четвертым, количество создаваемых предметов. Остальные аргументы при тестировании не на что не влияли. 


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

    На этом первая часть статьи подходит к концу, дальше будет интересней.
     

    • Плюс 1
×
×
  • Создать...

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

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