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

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

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

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

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

    _ 1 ответ Последний ответ 11 мар. 2024 г., 14:31 Ответить Цитировать 0
    • _
      __fastcall @Iniar
      отредактировано 11 мар. 2024 г., 14:31

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

      I 2 ответов Последний ответ 11 мар. 2024 г., 15:00 Ответить Цитировать 0
      • I
        Iniar @__fastcall
        отредактировано 11 мар. 2024 г., 15:00

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

        _ 1 ответ Последний ответ 11 мар. 2024 г., 15:03 Ответить Цитировать 0
        • I
          Iniar @__fastcall
          отредактировано 11 мар. 2024 г., 15:03

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

          1 ответ Последний ответ Ответить Цитировать 0
          • _
            __fastcall @Iniar
            отредактировано 11 мар. 2024 г., 15:03

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

            I 1 ответ Последний ответ 11 мар. 2024 г., 15:05 Ответить Цитировать 0
            • I
              Iniar @__fastcall
              отредактировано 11 мар. 2024 г., 15:05

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

              _ 1 ответ Последний ответ 11 мар. 2024 г., 15:07 Ответить Цитировать 0
              • _
                __fastcall @Iniar
                отредактировано 11 мар. 2024 г., 15:07

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

                I 1 ответ Последний ответ 11 мар. 2024 г., 15:16 Ответить Цитировать 0
                • I
                  Iniar @__fastcall
                  отредактировано 11 мар. 2024 г., 15:16

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

                  _ 1 ответ Последний ответ 11 мар. 2024 г., 15:37 Ответить Цитировать 0
                  • _
                    __fastcall @Iniar
                    отредактировано 11 мар. 2024 г., 15:37

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

                    I 2 ответов Последний ответ 12 мар. 2024 г., 05:04 Ответить Цитировать 0
                    • P
                      Partizan1078
                      отредактировано 11 мар. 2024 г., 19:51

                      Помнится был у меня заказец на подобно.(открыть заблокированные двери)Игра Гедония и тож на юнити.
                      Я поступил гораздо проще. А именно так. Давайте будем рассуждать логически. Возьмём любую отрывающуюся дверь. Сделаем допущение. Если дверь в открытом состоянии то это флаг равный 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
                      • P
                        Partizan1078
                        отредактировано 11 мар. 2024 г., 19:57

                        Ещё бывают такие игры как дай лайт 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
                        • P
                          Partizan1078 @Iniar
                          отредактировано Partizan1078 3 нояб. 2024 г., 20:45 11 мар. 2024 г., 20:45

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

                          I 1 ответ Последний ответ 12 мар. 2024 г., 03:58 Ответить Цитировать 0
                          • I
                            Iniar @Partizan1078
                            отредактировано 12 мар. 2024 г., 03:58

                            @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
                              отредактировано 12 мар. 2024 г., 05:04

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

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

                              1 ответ Последний ответ Ответить Цитировать 0
                              • I
                                Iniar @__fastcall
                                отредактировано 12 мар. 2024 г., 05:06

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

                                L _ 2 ответов Последний ответ 12 мар. 2024 г., 05:43 Ответить Цитировать 0
                                • L
                                  LIRW @Iniar
                                  отредактировано 12 мар. 2024 г., 05:43

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

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

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

                                  I 1 ответ Последний ответ 12 мар. 2024 г., 05:55 Ответить Цитировать 1
                                  • I
                                    Iniar @LIRW
                                    отредактировано 12 мар. 2024 г., 05:55

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

                                    1 ответ Последний ответ Ответить Цитировать 0
                                    • _
                                      __fastcall @Iniar
                                      отредактировано __fastcall 3 дек. 2024 г., 06:29 12 мар. 2024 г., 06:28

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

                                      I 1 ответ Последний ответ 12 мар. 2024 г., 06:33 Ответить Цитировать 0
                                      • I
                                        Iniar @__fastcall
                                        отредактировано 12 мар. 2024 г., 06:33

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

                                        _ 2 ответов Последний ответ 12 мар. 2024 г., 06:37 Ответить Цитировать 0
                                        • _
                                          __fastcall @Iniar
                                          отредактировано 12 мар. 2024 г., 06:37

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

                                          I 1 ответ Последний ответ 12 мар. 2024 г., 06:59 Ответить Цитировать 0
                                          25 из 53
                                          • Первое сообщение
                                            25/53
                                            Последнее сообщение