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

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

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

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

                                    но привыкнув к нему потом очень лениво становится в других движках рыться с поиском опять

                                    Тут всё на оборот... Когда всё показано и рассказано, нет не какого интереса, смотреть подобные игры. Хотя когда то давно, году так в -2005- я бессмертие сделал на фар край 1 - радости не было предела :)

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

                                      @LIRW Кстати да, помню и я свой восторг когда тоже самое бессмертие там же сделал))) Видимо мы один опыт пережили. Напомнил мне о тех временах.)) А по поводу не интересно смотреть на игры из видео, ну не скажи... К примеру я в видео увидел какой-то метод новый, принял его для себя и уже пользуясь им пробую расковырять что-то свою. А для закрепления опыта из видео можно повторить пару раз те же действия, чтоб как говориться сформировалась мышечная память. Ведь мы не редко смотрим в инете как построить дом или выложить печку в бане и после видео ведь не теряем интерес к тому, что надо выложить печь в бане, а пользуемся полученным опытом и идём и выкладываем печь без тех ошибок которые могли бы совершить без видео. Согласись?

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

                                        @Iniar есть подобные вещи для unity, unreal engine, source1/2 и это как минимум. А вообще по сути в каждом движке игры можно найти что-то, что облегчает создание читов.
                                        А способ работает только на mono играх, если игра ill2cpp, то там будет по-другому.

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

                                          @__fastcall Хорошо, а для unreal и source такие приспособы уже есть в CE или их надо плагинами ставить? И по поводу ill2cpp - верно понял, что моно там не будет отрабатывать? Как тогда запустив игру можно понять в ill2cpp она или нет? Вот как, говориться визуально это получится сделать?

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

                                            @Iniar я не знаю, есть ли такое на СЕ, я все же на с++ читы делаю и поэтому я не искал. Моно и ил2спп как-то по файлам различаться должны вроде, это надо посмотреть, ибо я уже давно игры на юнити не трогал. Кстати, попробуй в моно дисекторе через поиск найти accescode или как он там на фото.

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