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

    Subnautica Взлом кода двери

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

      @__fastcall Если появится некоторое время, можешь тоже подключиться к процессу? Сохранение игры у панели замка двери могу предоставить для экономии времени в игре.

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

        @Iniar Скинь assembly c sharp.dll. Ща попробую поискать.

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

          @__fastcall Это нужно взять в dnspy? Скажу, что развиваю навыки в CE и имеется который уровень программирования (логику программирования понимаю на среднем уровне), а так же на среднем уровне понимаю assembler. Но твой запрос не понял. Опиши краткий алгоритм действий пожалуйста. Я попытаюсь разобраться. Может это для меня будет легко, просто я эти действия другими словами понимаю.

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

            @Iniar Я просто хотел, чтобы ты мне скинул из папки с игрой файл assemblyCSharp.dll, т.к мне лень игру скачивать. Т.к пароли статичные, то возможно их можно найти по строкам.

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

              @__fastcall Понял теперь, сейчас на работе, после работы скину в личку или сюда. Подумал, что надо где-то уже код игры выгрузить и тебе прислать, что пока было бы не особо быстро, пока разобрался бы. Если не сложно, можешь потом пояснялку пожалуйста небольшую сделать по своим исследованиям файла. Если время и желание есть. Хотелось бы по мимо результата всё же какой-то опыт на практике конкретной ещё получить. Пароли сами как таковые мне не нужны. Мне больше интересен разбор игры через CE, так как я пока в ней больше понимаю как можно докуда-то добраться, чем например через dnspy, но пояснялки будут полезны для понимания. Заранее спасибо.

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

                @__fastcall
                архив с ассембли сишарп как обещал

                По другому увы не нашёл как скинуть архив. После конвертации в картинку тут ошибку пишет при загрузке, а в ЛС у меня ещё нет прав отправлять файлы.

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

                  @Iniar 104b90aa-3527-4050-8ed3-32382c03c87a-image.png
                  Ну по коду вроде похоже на то.

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

                    @__fastcall Вроде как да, этот самый код. И зелёный цвет ниже присутствует в параметре колор. Это вроде, если верно понял код, то когда на клавиши нажимаешь и когда код верно вводишь появляется зелёный замок открытый. Сейчас вопрос, как исходя их этого можно в CE выйти на то место где коды сравнивает? И можно ли обращая внимание на этот скрин кода?

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

                      @__fastcall И кстати вопрос сразу же.Из кода видно, что есть переменная accessCode. Можно ли её в CE найти по данному названию и попасть в эту самую процедуру?

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

                        @Iniar я поэтому и скинул скрин с RVA.

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

                          @__fastcall В RVA адрес на начало процедуры?

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

                            @Iniar Assembly-CSharp.dll + RVA = Адрес метода. Вроде так.

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

                              @__fastcall Хорошо. Посмотрел в CE в редакторе памяти список подгруженных библиотек. Но там не нашёл эту длл-ку. Этот адрес можно получить как то через CE или в чём-то другом?

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

                                @Iniar Вообщем, я забыл, как это делать через dnspy, сделай просто через CE -> Mono dissector. Там можно через поиск будет найти метод этот.

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

                                  Помнится был у меня заказец на подобно.(открыть заблокированные двери)Игра Гедония и тож на юнити.
                                  Я поступил гораздо проще. А именно так. Давайте будем рассуждать логически. Возьмём любую отрывающуюся дверь. Сделаем допущение. Если дверь в открытом состоянии то это флаг равный 1 (единица) а если закрыта то это = 0. Следовательно. Я могу воспользоваться сканером. Обычно флаги хранятся как 1 байт. Найдя этот флаг я могу уже от чего-то оттолкнуться. Не так ли?
                                  Причём флаг может быть не только 1-0 а допустим 144=открыто 72=закрыто. И всё наоборот. Всё что угодно разрабу в голову придёт.
                                  Ну та вот найдя инструкции работающие не с одной конкретной дверью а с видимыми (как минимум)

                                  И кстати за счёт того что СЕ парсит структуры мне удалось найти в структуре двери значение Lock = 0 или =1

                                  Упешно написал скрипт который открывает все двери.

                                  И да если не удаётся найти флаг. Всегда можно поискать угол открытия двери или чего угодно

                                  Гедония. Не помню какая версия.
                                  Открытие всех дверей.

                                  [ENABLE]
                                  {$lua}
                                  if (LaunchMonoDataCollector()==0) then
                                    error('Failed to Activate Mono Features')
                                  end
                                  {$asm}
                                  aobscanregion(UnDoor,Door:Interact+230, Door:Interact+293, 0F 84 ? ? ? ? 66)
                                  registersymbol(UnDoor)
                                  UnDoor:
                                  db E9 6D 01 00 00 90
                                  
                                  [DISABLE]
                                  UnDoor:
                                  db 0F 84 6C 01 00 00
                                  unregistersymbol(UnDoor)
                                  {
                                  // ORIGINAL CODE - INJECTION POINT: Door:Interact+25e
                                  Door:Interact+230: 4C 8B 8D 40 FF FF FF           - mov r9,[rbp-000000C0]
                                  Door:Interact+237: 4C 89 8D 50 FF FF FF           - mov [rbp-000000B0],r9
                                  Door:Interact+23e: 4D 8D 00                       - lea r8,[r8]
                                  Door:Interact+241: 83 38 00                       - cmp dword ptr [rax],00
                                  Door:Interact+244: 66 90                          - nop 2
                                  Door:Interact+246: 49 BB 2E E9 4F 12 BF 02 00 00  - mov r11,000002BF124FE92E
                                  Door:Interact+250: 41 FF D3                       - call r11
                                  Door:Interact+253: E9 CB 04 00 00                 - jmp Door:Interact+723
                                  Door:Interact+258: 0F B6 46 35                    - movzx eax,byte ptr [rsi+35]
                                  Door:Interact+25c: 85 C0                          - test eax,eax
                                  // ---------- INJECTING HERE ----------
                                  Door:Interact+25e: 0F 84 6C 01 00 00              - je Door:Interact+3d0
                                  // ---------- DONE INJECTING  ----------
                                  Door:Interact+264: 66 90                          - nop 2
                                  Door:Interact+266: 49 BB 70 A0 82 0A 6E 02 00 00  - mov r11,0000026E0A82A070
                                  Door:Interact+270: 41 FF D3                       - call r11
                                  Door:Interact+273: 48 8B C8                       - mov rcx,rax
                                  Door:Interact+276: 48 BA 30 EF 2F CD BE 02 00 00  - mov rdx,000002BECD2FEF30
                                  Door:Interact+280: 48 8D 64 24 00                 - lea rsp,[rsp+00]
                                  Door:Interact+285: 90                             - nop 
                                  Door:Interact+286: 49 BB C0 65 5A DD BD 02 00 00  - mov r11,System.String:op_Equality
                                  Door:Interact+290: 41 FF D3                       - call r11
                                  Door:Interact+293: 85 C0                          - test eax,eax
                                  }
                                  
                                  1 ответ Последний ответ Ответить Цитировать 1
                                  • Partizan1078P
                                    Partizan1078
                                    отредактировано

                                    Ещё бывают такие игры как дай лайт 2.
                                    В которых что-бы открыть замок нужна отмычка.
                                    Бывает такое что в соседнем регисре хранится "правильное число".
                                    И его нужно всего лишь подменить!(регистр)

                                    [ENABLE]
                                    aobscanmodule(EeasyOpenLock,gamedll_ph_x64_rwdi.dll,F3 ? ? ? ? ? ? ? 33 ? 0F 2F ? 73 ? 89 ? ? ? ? ? 0F 57)
                                    registersymbol(EeasyOpenLock)
                                    EeasyOpenLock:
                                    movss [rcx+00000138],xmm4
                                    //F3 0F 11 A1 38 01 00 00
                                    
                                    [DISABLE]
                                    EeasyOpenLock:
                                    db F3 0F 11 89 38 01 00 00
                                    unregistersymbol(EeasyOpenLock)
                                    {
                                    // ORIGINAL CODE - INJECTION POINT: gamedll_ph_x64_rwdi.dll+F44F92
                                    gamedll_ph_x64_rwdi.dll+F44F5D: F3 0F 5D C8                    - minss xmm1,xmm0
                                    gamedll_ph_x64_rwdi.dll+F44F61: 80 B9 40 01 00 00 00           - cmp byte ptr [rcx+00000140],00
                                    gamedll_ph_x64_rwdi.dll+F44F68: F3 0F 11 89 3C 01 00 00        - movss [rcx+0000013C],xmm1
                                    gamedll_ph_x64_rwdi.dll+F44F70: 74 09                          - je gamedll_ph_x64_rwdi.dll+F44F7B
                                    gamedll_ph_x64_rwdi.dll+F44F72: 80 7A 1C 00                    - cmp byte ptr [rdx+1C],00
                                    gamedll_ph_x64_rwdi.dll+F44F76: 74 03                          - je gamedll_ph_x64_rwdi.dll+F44F7B
                                    gamedll_ph_x64_rwdi.dll+F44F78: 0F 57 C9                       - xorps xmm1,xmm1
                                    gamedll_ph_x64_rwdi.dll+F44F7B: F3 0F 58 89 38 01 00 00        - addss xmm1,[rcx+00000138]
                                    gamedll_ph_x64_rwdi.dll+F44F83: F3 0F 10 25 45 34 0E 01        - movss xmm4,[gamedll_ph_x64_rwdi.dll+20283D0]
                                    gamedll_ph_x64_rwdi.dll+F44F8B: C6 81 40 01 00 00 00           - mov byte ptr [rcx+00000140],00
                                    // ---------- INJECTING HERE ----------
                                    gamedll_ph_x64_rwdi.dll+F44F92: F3 0F 11 89 38 01 00 00        - movss [rcx+00000138],xmm1
                                    // ---------- DONE INJECTING  ----------
                                    gamedll_ph_x64_rwdi.dll+F44F9A: 33 C9                          - xor ecx,ecx
                                    gamedll_ph_x64_rwdi.dll+F44F9C: 0F 2F CB                       - comiss xmm1,xmm3
                                    gamedll_ph_x64_rwdi.dll+F44F9F: 73 0B                          - jae gamedll_ph_x64_rwdi.dll+F44FAC
                                    gamedll_ph_x64_rwdi.dll+F44FA1: 89 8E 38 01 00 00              - mov [rsi+00000138],ecx
                                    gamedll_ph_x64_rwdi.dll+F44FA7: 0F 57 C9                       - xorps xmm1,xmm1
                                    gamedll_ph_x64_rwdi.dll+F44FAA: EB 12                          - jmp gamedll_ph_x64_rwdi.dll+F44FBE
                                    gamedll_ph_x64_rwdi.dll+F44FAC: 0F 2F CC                       - comiss xmm1,xmm4
                                    gamedll_ph_x64_rwdi.dll+F44FAF: 76 0D                          - jna gamedll_ph_x64_rwdi.dll+F44FBE
                                    gamedll_ph_x64_rwdi.dll+F44FB1: C7 86 38 01 00 00 00 00 B4 42  - mov [rsi+00000138],42B40000
                                    gamedll_ph_x64_rwdi.dll+F44FBB: 0F 28 CC                       - movaps xmm1,xmm4
                                    }
                                    
                                    1 ответ Последний ответ Ответить Цитировать 2
                                    • Partizan1078P
                                      Partizan1078 @Iniar
                                      отредактировано Partizan1078

                                      @Iniar Скинь сейвы перед дверью с паролем. И желательно что-бы была рядышком дверь разлоченая.

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

                                        @Partizan1078 Привет, очень интересные варианты предложил. Да, я тоже стараюсь думать логически и эти варианты почти все прошёл. Дело в том, что именно у Subnautica поиск флага в 1 - 0 у меня падает в ошибку. Потому что число найденных адресов переваливает за 10000000......... и видимо CE не хватает памяти или ещё чего, хотя место на диске вроде как есть ещё для файла БД поиска. И ищет это всё по минут 40-50. Но не суть, главное, что просто в конце выходит ошибка при втором отсеивании к примеру и всё насмарку. Далее, про флаг открыто/закрыто отличный от 1-0, согласен, бывает и такое и этот флаг ещё нужно поймать. Можно пробовать поиском неизвестного значения, но опять же неизвестно ведь как он обрабатывается. Уменьшается при открытии двери или увеличивается. Получается приходится опять пользоваться неопределённым поиском типа Изменилось/не изменилось значение, а это опять тутуева куча результатов поиска. Я пробовал искать прогресс исследования рецепта при сканировании нового предмета сканером (к слову эта задумка тоже не поддалась мне в том виде в котором я хотел бы, а именно я хотел чтоб сканируешь какой нибудь новый предмет и попадаешь на общую инструкцию которая проверяет полностью все или хотя бы начатые рецепты в дереве чертежей, а там уже меняешь все рецепты на выполненные и по завершению сканирования любого нового предмета простого у тебя открываются и сложные рецепты с несколькими стадиями изучения. У меня остался сейв и для этой задумки, рядом несколько костюмов КРАБ и их достаточно для полного открытия рецепта. Или поймать статус рецепта опять же флагом - изучен/не изучен и общую инструкцию проверяющую все рецепты, чтоб вместе изучаемым открыть сразу все остальные рецепты, но это тоже не удалось поймать. Могу и на эту идею скинуть сейв для исследований, если интересно. Мне удалось добиться лишь попадания на стадию исследования. Допустим у меня уже открыт рецепт КРАБа 1/4, я нашёл, что стадии в 2 байта и максимум стадии в 2 байта. И общую инструкцию которая все начатые рецепты проверяет. Меняю максимум у всех на 1 и изучаю очередной КРАБ. Должно по нормальному быть Краб 2/4, но после моих действий КРАБ открывается и все начатые рецепты как будто открываются, становятся цветными вместо серых, но после открытия краба я вижу ингредиенты для его создания, а мнимо открытые рецепты остаются без ингредиентов как будто не открыты. Пока отложил эту идею, потому как неделю с ней возился и чуть устал). Эти поиски усложняются тем, что в Subnautica необычайно много всякого мусора ищет и результаты поиска вылазят за миллиарды и триллиарды. В других играх я намного проще искал флаги, но тут это просто жуть. И кстати после того как например ищешь флаг рецепта и при этом его надо найти за 3-4 шага всего, что почти нереально, а при достижении открытия рецепта его уже откатить назад не получается, приходится перезагружать сейв и после этого адреса все меняются. С дверью чуть проще, там бесконечное число попыток подбора кода без перезапуска сейва, но дело в поиске флага убивается ошибкой при отсеивании.

                                        По поводу сейва рядом с дверью, как раз я нашёл удачное место где есть две двери рядом. От одной я точно знаю пароль и её можно разблочить и открыть, а от второй пароль не нашёл. Они буквально в одном коридоре. Сегодня после работы скину архив тебе. Если интересно, на поиск рецептов тоже могу скинуть. Сейчас пока идеи с стадиями рецептов и дверями иссякли, пробую сделать бесплатный крафт. Пока получилось сделать требования к крафту зелёными вместо красных при нехватке ресурсов, но создаваться пока не хочет предмет. Там беда в том, что ресурсы не стаковые, а поодиночно валяются в инвентаре. Буду ещё исследовать дальше.

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

                                          Пользователь @__fastcall написал в Subnautica Взлом кода двери:

                                          Mono dissector
                                          Очень и очень интересная наводка, спасибо. Честно говоря, раньше мельком слышал о Mono dissector в CE, но не углублялся, а оказывается это очень даже мощная штука. По твоей наводке посмотрел ангоязычный туториал, и попутно наткнулся на туториал от Геймхаклаб как раз по Subnautica. А я всегда задавался вопросом, как так у людей в анализе структур вся структура по классам выставлена и прописаны имена. Теперь это для меня стало понятно. В туториале от Геймхаклаб рассказано про то как кислород найти через Моно, но я этого не знал и нашёл кислород, воду, голод обычными методами поиска и тоже сделал скрипты. А ещё на бесконечный огнетушитель и заряд батарей в приборах. Ещё у огнетушителя нашёл параметры силы тушения и множитель траты содержимого. Если увеличить параметр силы тушения, то любой огонь тушится с первого клика мышки. Но с Моно я теперь смогу дома порыться более углублёно. И возможно выйду на классы крафта и рецептов.

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

                                            @__fastcall Но кстати жаль, что данный анализ работает только для игр в Uniti. А есть ли парсер для игр в других движках? Моно в CE конечно весьма облегчает жизнь, но привыкнув к нему потом очень лениво становится в других движках рыться с поиском опять.))

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