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

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

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

      @Iniar К сожалению у меня нету времени из-за подготовки к ЕГЭ, но ты можешь в ютубе написать Reversing unity games и там будут гайды на эту тему.

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

        @__fastcall Понял, спасибо за наводку, попробую порыть. Но моя задача всё же остаётся открытой. Возможно ли это реализовать в CE? А попутно пока буду пробовать освоить тему с реверсом в предложенных тобой приложениях.

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

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

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

            @__fastcall Конечно я понимаю, что там обязательно должен присутствовать метод сравнивания, а так же в каком-то виде где-то лежит так называемый мастер-пароль с которым идёт сравнение. Но вот выйти на данный метод конкретно в Subnautica у меня пока не вышло и раз это скорей всего можно сделать через CE, то я прошу знающих людей помочь мне в поиске пути к этому методу сравнения, а там уже думаю, что увижу что с чем сравнивается и смогу выуживать при вводе неверного рандомного пароля типа 1234 уже верный пароль с которым сравниваются эти 1234.

            Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
            • 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
                                            • Первое сообщение
                                              Последнее сообщение