Subnautica Взлом кода двери
-
@__fastcall Хм, глянул в инете по поводу dnspy - что это. Интересная тема. Если есть время, можешь на примере той же Subnautica небольшое видео сделать, что можно получить через dnspy и как (в каком виде) выйти к примеру на пароли дверей в игре? Скажу честно, в этом направлении я пока только от тебя узнал про анализ кода таким способом.
-
@Iniar К сожалению у меня нету времени из-за подготовки к ЕГЭ, но ты можешь в ютубе написать Reversing unity games и там будут гайды на эту тему.
-
@__fastcall Понял, спасибо за наводку, попробую порыть. Но моя задача всё же остаётся открытой. Возможно ли это реализовать в CE? А попутно пока буду пробовать освоить тему с реверсом в предложенных тобой приложениях.
-
@Iniar Можно конечно в СЕ реализовать, там скорее всего где-то есть метод, который просто сравнивает пароли, его и по названию можно попробовать отыскать. А там уже через патч кода делать, как угодно.
-
@__fastcall Конечно я понимаю, что там обязательно должен присутствовать метод сравнивания, а так же в каком-то виде где-то лежит так называемый мастер-пароль с которым идёт сравнение. Но вот выйти на данный метод конкретно в Subnautica у меня пока не вышло и раз это скорей всего можно сделать через CE, то я прошу знающих людей помочь мне в поиске пути к этому методу сравнения, а там уже думаю, что увижу что с чем сравнивается и смогу выуживать при вводе неверного рандомного пароля типа 1234 уже верный пароль с которым сравниваются эти 1234.
-
@__fastcall Если появится некоторое время, можешь тоже подключиться к процессу? Сохранение игры у панели замка двери могу предоставить для экономии времени в игре.
-
@Iniar Скинь assembly c sharp.dll. Ща попробую поискать.
-
@__fastcall Это нужно взять в dnspy? Скажу, что развиваю навыки в CE и имеется который уровень программирования (логику программирования понимаю на среднем уровне), а так же на среднем уровне понимаю assembler. Но твой запрос не понял. Опиши краткий алгоритм действий пожалуйста. Я попытаюсь разобраться. Может это для меня будет легко, просто я эти действия другими словами понимаю.
-
@Iniar Я просто хотел, чтобы ты мне скинул из папки с игрой файл assemblyCSharp.dll, т.к мне лень игру скачивать. Т.к пароли статичные, то возможно их можно найти по строкам.
-
@__fastcall Понял теперь, сейчас на работе, после работы скину в личку или сюда. Подумал, что надо где-то уже код игры выгрузить и тебе прислать, что пока было бы не особо быстро, пока разобрался бы. Если не сложно, можешь потом пояснялку пожалуйста небольшую сделать по своим исследованиям файла. Если время и желание есть. Хотелось бы по мимо результата всё же какой-то опыт на практике конкретной ещё получить. Пароли сами как таковые мне не нужны. Мне больше интересен разбор игры через CE, так как я пока в ней больше понимаю как можно докуда-то добраться, чем например через dnspy, но пояснялки будут полезны для понимания. Заранее спасибо.
-
@__fastcall
архив с ассембли сишарп как обещалПо другому увы не нашёл как скинуть архив. После конвертации в картинку тут ошибку пишет при загрузке, а в ЛС у меня ещё нет прав отправлять файлы.
-
@Iniar
Ну по коду вроде похоже на то. -
@__fastcall Вроде как да, этот самый код. И зелёный цвет ниже присутствует в параметре колор. Это вроде, если верно понял код, то когда на клавиши нажимаешь и когда код верно вводишь появляется зелёный замок открытый. Сейчас вопрос, как исходя их этого можно в CE выйти на то место где коды сравнивает? И можно ли обращая внимание на этот скрин кода?
-
@__fastcall И кстати вопрос сразу же.Из кода видно, что есть переменная accessCode. Можно ли её в CE найти по данному названию и попасть в эту самую процедуру?
-
@Iniar я поэтому и скинул скрин с RVA.
-
@__fastcall В RVA адрес на начало процедуры?
-
@Iniar Assembly-CSharp.dll + RVA = Адрес метода. Вроде так.
-
@__fastcall Хорошо. Посмотрел в CE в редакторе памяти список подгруженных библиотек. Но там не нашёл эту длл-ку. Этот адрес можно получить как то через CE или в чём-то другом?
-
@Iniar Вообщем, я забыл, как это делать через dnspy, сделай просто через CE -> Mono dissector. Там можно через поиск будет найти метод этот.
-
Помнится был у меня заказец на подобно.(открыть заблокированные двери)Игра Гедония и тож на юнити.
Я поступил гораздо проще. А именно так. Давайте будем рассуждать логически. Возьмём любую отрывающуюся дверь. Сделаем допущение. Если дверь в открытом состоянии то это флаг равный 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 }