GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Вопрос по трюку в скрипте автоассеблера

    Запланировано Прикреплена Закрыта Перенесена Взлом игр (средний уровень и выше)
    22 Сообщения 3 Posters 651 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • I
      Iniar
      отредактировано

      Добрый день. Прошу подсказки у знающих людей, как можно реализовать вот какую фишку. У меня есть инструкция в коде игры через которую проходит несколько адресов. Объясню поточнее. Я нашёл инструкцию нужного мне действия в игре. Делаю поиск адресов к котором обращается эта инструкция и там в результатах выводит сразу 4-7 адресов и счётчик хитов увеличивается постоянно. Так вот мне нужно каждый из этих 7 адресов вывести в отдельную метку (переменную). Как это сделать?
      Если я делаю известным мне способом: создаю label(z1), registersymbol(z1) и т.д. потом записываю из регистра в метку z1, то у меня в метке оказывается лишь самое последнее значение из семи адресов. Т.е. самый последний адрес в метке оказывается, а остальные 6 нет. А мне надо, чтоб было z1,z2,z3,z4...z7 и каждый адрес записался в свою метку. Чтоб я потом в таблице мог их прикрепить к скрипту и выводить в них значения из каждого адреса по порядку.

      StoneWeaverS 1 ответ Последний ответ Ответить Цитировать 0
      • StoneWeaverS
        StoneWeaver administrators @Iniar
        отредактировано

        @Iniar привет! Привет! Перед записью в метку тебе надо проверять, какой адрес записан в метку, и если не совпадает, записывать его в другое место. Скорее всего, на ассемблере тебе для этого понадобится цикл, ну и адреса нужно будет помещать в стартовую метку плюс смещение размером с размер адреса (4 байта, если игра 32 бит, и 8 байт, если игра 64 бита).

        I 2 ответов Последний ответ Ответить Цитировать 0
        • I
          Iniar @StoneWeaver
          отредактировано

          @StoneWeaver Я думаю, что это немного не то решение. Потому как я не знаю какие будут адрес. Они всегда разные. Я забыл об этом упомянуть в начальном топике. А то о чём ты говоришь, подходит для того если я знаю адреса. В частности для того чтоб их сверять, надо знать с чем сверять.

          StoneWeaverS 1 ответ Последний ответ Ответить Цитировать 0
          • I
            Iniar @StoneWeaver
            отредактировано

            @StoneWeaver На примере объясню что мне надо... Я нашёл инструкцию в героях 7 которая показывает кол-во войск в битве. Так вот эта инструкция обращается сразу и к моим и к войскам соперника. Когда я ищу адреса к которым обращается данная инструкция, то она выводит и допустим 4 вида войск с моей стороны и 5 видов войск с стороны врага. Так вот мне нужно под скриптом сделать 9 меток в каждую из которых будет выводиться кол-во соответственно по порядку сначала моих 4 видов и потом 5 видов соперника.

            1 ответ Последний ответ Ответить Цитировать 0
            • Partizan1078P
              Partizan1078
              отредактировано Partizan1078

              Тебе нужно сделать фильтр. По типу "свой чужой"
              Это как я отфильтровывал слоты друг от друга в инвенторе героя в игрушке dysmantle.
              45a64cf9-cb26-48d8-a183-eab61ca7a989-sdfsterty54645634hdfgh.png
              Как спойлер добавить? Хотел скрипт выложить а он 188 строк.

              I StoneWeaverS 3 ответов Последний ответ Ответить Цитировать 0
              • I
                Iniar @Partizan1078
                отредактировано Iniar

                @Partizan1078 Да, почти тоже самое задумываю. Тоже скрипт, а ниже будут метки с соответствующим значением. Но я так понимаю, у тебя где сравнение r15 с 00,01,02.... идёт - это ты точно знаешь что есть слот 00, 01 и т.д... Т.е. подозреваю, что в r15 у тебя чередуется индекс слота инвентаря и ты можешь сравнивать их и записывать. Это то я бы с лёгкостью сделал по данной логике. А как быть мне с рандомными адресами? С чем мне их сравнивать?

                Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
                • I
                  Iniar @Partizan1078
                  отредактировано

                  @Partizan1078 По поводу спойлера во время написания ответа есть выше над текстом раздел Код. Наверно его надо... Это конечно не спойлер, но код будет отдельно видно. Спойлер тоже не нашёл.

                  123-321
                  
                  1 ответ Последний ответ Ответить Цитировать 0
                  • Partizan1078P
                    Partizan1078 @Iniar
                    отредактировано

                    @Iniar Тебе надо найти фильт. Это может быть как у меня в скрипте регистр или он (фильтр) может быть в структуре, стеке. Что конкретно ломаешь ща сам хочу глянуть.

                    I 2 ответов Последний ответ Ответить Цитировать 0
                    • I
                      Iniar @Partizan1078
                      отредактировано

                      @Partizan1078 Ломаю героев 7. Там весьма много новых для меня решений от разрабов. Пока что интересный процесс. Там они замутили одну инструкцию на сразу много разных значений. К примеру инструкция обращающаяся к войскам вне боя обращается ещё к куче разных параметров. Т.е. когда ищу адреса к которым обращается инструкция, то там и кол-во войск и где-то там же какие-то параметры войск... Но я отрыл инструкцию которая конкретно уже в бою обращается исключительно к кол-ву войск. И их можно прям в бою редактировать под себя как у врагов поставить по 1 воину, так и у себя сделать 999 состава войска. И нужно отцидить их как-то. По анализу структуры для каждого моего и каждого вражеского войска по началу структуры вижу, что есть некоторые различители для видимо очерёдности... На данный момент у меня в бою 3 моих войска и 3 вражеских. И по смещению некоему от начала структуры идёт 121, 122, 123,124,125,126. Из них первые 3 моих, потом 3 врага. Но пока не понял, постоянные ли это значения или меняются из боя в бой.

                      1 ответ Последний ответ Ответить Цитировать 0
                      • StoneWeaverS
                        StoneWeaver administrators @Partizan1078
                        отредактировано StoneWeaver

                        Пользователь @Partizan1078 написал в Вопрос по трюку в скрипте автоассеблера:

                        Хотел скрипт выложить а он 188 строк

                        Выкладывай, обернув тегом "Код", система сама его ограничит в небольшом окне, в котором будет отдельная возможность листать код.

                        1 ответ Последний ответ Ответить Цитировать 0
                        • StoneWeaverS
                          StoneWeaver administrators @Iniar
                          отредактировано

                          Пользователь @Iniar написал в Вопрос по трюку в скрипте автоассеблера:

                          @StoneWeaver Я думаю, что это немного не то решение. Потому как я не знаю какие будут адрес. Они всегда разные. Я забыл об этом упомянуть в начальном топике. А то о чём ты говоришь, подходит для того если я знаю адреса. В частности для того чтоб их сверять, надо знать с чем сверять.

                          А я разве говорил, что заранее будет известно? Я сказал, что ты сверяешь значение, которое записываешь. Хотя сейчас подумал, и это годится только для одного прохода цикла, для многократного прохода так не сработает.

                          I 1 ответ Последний ответ Ответить Цитировать 0
                          • I
                            Iniar @StoneWeaver
                            отредактировано

                            @StoneWeaver Хм. Я пока не совсем понял твою идею. Пока не понял с чем сравнивать имеешь в виду. Если у тебя та же идея, что и у Partizan1078, то мне для этого надо найти сначала по какому триггеру можно фильтровать.

                            StoneWeaverS 1 ответ Последний ответ Ответить Цитировать 0
                            • StoneWeaverS
                              StoneWeaver administrators @Iniar
                              отредактировано

                              @Iniar Нет, у меня была идея при первом проходе в пустую ячейку записывать адрес, а потом сравнивать, есть ли он уже в массиве, но это непростой алгоритм, для многократного прохода цикла нужно внимательно думать, чтобы не перетереть адреса

                              I 1 ответ Последний ответ Ответить Цитировать 0
                              • I
                                Iniar @StoneWeaver
                                отредактировано

                                @StoneWeaver Ну да, в такой реализации получится не малый код на создание массива, заполнение его и сравнивание потом с регистром инструкции. Ну и наверно да, чтоб в каждом следующем бою данные актуализировались - нужно будет выключать и включать скрипт каждый раз наверно. Я так понял.

                                1 ответ Последний ответ Ответить Цитировать 0
                                • I
                                  Iniar @Partizan1078
                                  отредактировано

                                  @Partizan1078 если есть герои меча и магии 7, посмотри инструкцию - 1401E4F72 - MMH7Game-Win64-Shipping.PIBGetInterface+2D2 - cmp [rcx+000006EC],eax. Посмотри адреса к которым она обращается именно в бою когда поле боя на экране.

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • Partizan1078P
                                    Partizan1078
                                    отредактировано Partizan1078

                                    Дело такое.
                                    Игра сделана на Unreal engine.
                                    Это говорит о том что проще всего выходить на игровой мир и уже от него строить указатели. Как то так.
                                    69972710-de6e-487d-a4b0-bccd2f343ba4-cvbcvbre464fghb.png
                                    Версия игры 1.8 37786

                                    Сделал скрит на World.

                                    [ENABLE]
                                    aobscanmodule(pWorld,MMH7Game-Win64-Shipping.exe,48 8B ? ? ? ? ? 8B ? 8B ? ? 85 ? 7F ? 74)
                                    alloc(newmem,$1000,pWorld)
                                    label(return)
                                    label(World)
                                    registersymbol(World)
                                    registersymbol(pWorld)
                                    
                                    newmem:
                                      mov [World],rcx
                                      mov rbx,[rcx+00000080]
                                      jmp return
                                    
                                    World:
                                    dq 00
                                    
                                    pWorld:
                                      jmp newmem
                                      nop 2
                                    return:
                                    
                                    [DISABLE]
                                    pWorld:
                                    db 48 8B 99 80 00 00 00
                                    unregistersymbol(*)
                                    dealloc(newmem)
                                    {
                                    // ORIGINAL CODE - INJECTION POINT: MMH7Game-Win64-Shipping.exe+78BDEA
                                    MMH7Game-Win64-Shipping.exe+78BDD8: 5F                    - pop rdi
                                    MMH7Game-Win64-Shipping.exe+78BDD9: 5E                    - pop rsi
                                    MMH7Game-Win64-Shipping.exe+78BDDA: F3 C3                 - repe ret 
                                    MMH7Game-Win64-Shipping.exe+78BDDC: CC                    - int 3 
                                    MMH7Game-Win64-Shipping.exe+78BDDD: CC                    - int 3 
                                    MMH7Game-Win64-Shipping.exe+78BDDE: CC                    - int 3 
                                    MMH7Game-Win64-Shipping.exe+78BDDF: CC                    - int 3 
                                    MMH7Game-Win64-Shipping.exe+78BDE0: 48 89 5C 24 08        - mov [rsp+08],rbx
                                    MMH7Game-Win64-Shipping.exe+78BDE5: 57                    - push rdi
                                    MMH7Game-Win64-Shipping.exe+78BDE6: 48 83 EC 20           - sub rsp,20
                                    // ---------- INJECTING HERE ----------
                                    MMH7Game-Win64-Shipping.exe+78BDEA: 48 8B 99 80 00 00 00  - mov rbx,[rcx+00000080]
                                    // ---------- DONE INJECTING  ----------
                                    MMH7Game-Win64-Shipping.exe+78BDF1: 8B FA                 - mov edi,edx
                                    MMH7Game-Win64-Shipping.exe+78BDF3: 8B 43 68              - mov eax,[rbx+68]
                                    MMH7Game-Win64-Shipping.exe+78BDF6: 85 C0                 - test eax,eax
                                    MMH7Game-Win64-Shipping.exe+78BDF8: 7F 22                 - jg MMH7Game-Win64-Shipping.exe+78BE1C
                                    MMH7Game-Win64-Shipping.exe+78BDFA: 74 20                 - je MMH7Game-Win64-Shipping.exe+78BE1C
                                    MMH7Game-Win64-Shipping.exe+78BDFC: 4C 8D 0D 9D D1 10 01  - lea r9,[MMH7Game-Win64-Shipping.exe+1898FA0]
                                    MMH7Game-Win64-Shipping.exe+78BE03: 48 8D 15 56 D5 10 01  - lea rdx,[MMH7Game-Win64-Shipping.exe+1899360]
                                    MMH7Game-Win64-Shipping.exe+78BE0A: 48 8D 0D 17 D5 10 01  - lea rcx,[MMH7Game-Win64-Shipping.exe+1899328]
                                    MMH7Game-Win64-Shipping.exe+78BE11: 41 B8 3F 02 00 00     - mov r8d,0000023F
                                    MMH7Game-Win64-Shipping.exe+78BE17: E8 24 D5 91 FF        - call MMH7Game-Win64-Shipping.exe+A9340
                                    }
                                    

                                    Пользовался инструментом для СЕ
                                    Тык

                                    I 2 ответов Последний ответ Ответить Цитировать 2
                                    • I
                                      Iniar @Partizan1078
                                      отредактировано

                                      @Partizan1078 оу, сколько инфы... Расскажи по подробней что за приспособа и как её пользовать? На моей СЕ 6.8.3 приспособа не работает. Когда запускаю скрипт Unreal Engine, то он не активируется. А Tools просто везде по вопросам выдаёт.
                                      Ну и скрипт World тоже не отрабатывает. По оффсетам с скрина твоего у меня пусто. Видимо версия игры не та. К тому же ты говоришь - выходить на мир. Но на скрине я у тебя не увидел кол-во войск в бою которые мне нужны. А только касаемо перса информация выводится.

                                      Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
                                      • I
                                        Iniar @Partizan1078
                                        отредактировано Iniar

                                        @Partizan1078 И можешь поподробней объяснить как мне к примеру попасть в анализе структур в такой же массив как у тебя на скрине с описанием смещения? Как отловить начало структуры мира? Моя версия игры - 1.6 34396

                                        1 ответ Последний ответ Ответить Цитировать 0
                                        • Partizan1078P
                                          Partizan1078 @Iniar
                                          отредактировано Partizan1078

                                          @Iniar ce 7.5. Я и не искал того что тебе нужно. Я по быстрому просто глянул. Что к чему.

                                          I 1 ответ Последний ответ Ответить Цитировать 0
                                          • I
                                            Iniar @Partizan1078
                                            отредактировано

                                            @Partizan1078 Ну я пока ничего не понял, как с твоей приспособой взаимодействовать. Поставил 7.5, но просто тыкаю по пунктам скриптов и не понимаю связей пока. Что-то срабатывает, где-то просто вопросы. Так что вопрос по поводу моего начального топика всё ещё актуален. Как по очереди записать в метки значение нескольких адресов. По твоему примеру сделал скрипт которые сверяет по смещению 4C от начала структуры войск в бою значения 121,122,123... о которых писал выше, но в переменных w1,w2 и т.д. помещается один и тот же адрес и значения скачут.

                                            Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
                                            • Первое сообщение
                                              Последнее сообщение