• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Гайд Unity Genshin Impact IL2CPP Dump Part 1

(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
429
Реакции
120
Вступление:
Спонсором этой статьи стали вечные вопросы и просьбы помочь сдампить Геншин, а также из-за ЧСВ некоторых особ, которые считают себя уникальными ( мем отдельный ). Многие, кто не имели дел с этой игрой и зайдут просто почитать, скажу сразу, НЕЛЬЗЯ сдампить какой-то сторонней программой ( если ее не делали специально под эту игру), в папке с игрой вы не увидите привычные модули как для других IL2CPP игр. Я буду часто ссылаться на сурс IL2CPP и IL2CPP Resolver, ибо это единственная ПОЛЕЗНАЯ информация, которую вы можете найти на сегодняшний день.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
( для понимания, а так-же создания своих структур )
Хочу сказать сразу: я больше не буду кому-то лично помогать. У вас теперь есть статья в открытом доступе ( которой к сожалению не было у меня при обучении ).

Теория:
1747039290017.png
Я не буду точно объяснять, что и как происходит, ведь вы не за этим пришли?) Начнем с того, что в Геншине, как и во всех остальных играх, структура IL2CPP не отличается. Есть всеми привычный
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Собственно если мы решили сделать дампер, нам нужен Class::Init для того, чтобы его хукнуть и получать все классы, которые инициализируются в игре ( можно конечно вызывать функцию инициализации, но это ужасно и неправильно ).

Практика:
Я хочу сказать сразу важное, геншин не нужно дампить сторонней программой ( KsDumper и другие ), можно просто загрузить в иду сам .exe.
Начать же я хочу с поиска Class::Init. Эту функцию можно найти с помощью
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
1747040186388.png
Первый же xref ( обычно единственный ) - это наша функция Class::Init. Теперь можно ее хукнуть. Наша функция должна выглядеть примерно вот так:
C++:
Expand Collapse Copy
bool __fastcall ClassInit(il2cpp_class* class_, void* a) {
    using orig = bool(__fastcall*)(void*, void*);
    bool result = ((orig)o_object_new)(class_, a);

    return result;
}
Отлично, начало положено и я хочу сразу перейти к поиску имени класса, я не хочу искать саму функцию получения имени функции, когда это можно сделать через оффсет: Class + ?? = name.
Так как же найти этот оффсет? Я предлагаю вам посмотреть сурс IL2CPP и найти
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Мы будем искать по этому xref - "IReferenceArray`1". Как правило это второй xref, при переходе по нему вы увидите такую картину:
1747040618097.png
Если внимательно посмотреть, в сурсе IL2CPP идет сравнение, в котором первый аргумент - objectClass->name. Как раз таки это нам и нужно! У нас же этим первым аргументом переменная, которая равна class + 0x30, это и будет переменной name. Мы нашли имя класса, для более внимательных, там же есть namespace класса, теперь у вас есть база для дампера IL2CPP, желаю вам удачи, а так-же хочу выразить спасибо этому человеку - Komok050505( @popugapopugay ).​
 
Последнее редактирование:
античит задетектит такой хук и не даст зайти в игру, тем более там кастомные структуры il2cpp - выводится только мусор
 
античит задетектит такой хук и не даст зайти в игру, тем более там кастомные структуры il2cpp - выводится только мусор
Да ну) Не врешь? Т.е. мой проект полностью с нуля - это выдумка?
1749732815349.png
 
Привет,мб неуместный вопрос, а если выделить паттерны сигны с других il2цп игр и попробовать их на этой игре, то проще же будет?или такая тема не ворк для этой игры?
 
Привет,мб неуместный вопрос, а если выделить паттерны сигны с других il2цп игр и попробовать их на этой игре, то проще же будет?или такая тема не ворк для этой игры?
Привет! Нет, это не будет здесь работать, ибо паттерны слетают после следующего обновления из-за хэширования в этой игре
 
Привет! Нет, это не будет здесь работать, ибо паттерны слетают после следующего обновления из-за хэширования в этой игре
Спасибо за ответ, а еще небольшой вопрос, насколько тяжело снимается обфа с полей и т.д. (если вообще снимается) и будет ли рабочий подход, при котором ты ставишь хук на LoadMetadata, потом получаешь размер метадаты (путем сложения exportedTypeDefinitionsOffset и exportedTypeDefinitionsCount) и записываешь себе
 
Спасибо за ответ, а еще небольшой вопрос, насколько тяжело снимается обфа с полей и т.д. (если вообще снимается) и будет ли рабочий подход, при котором ты ставишь хук на LoadMetadata, потом получаешь размер метадаты (путем сложения exportedTypeDefinitionsOffset и exportedTypeDefinitionsCount) и записываешь себе
Обфускацию с полей и методов нельзя снять.
 
Спасибо за ответ, очень жаль :(
Можно снять только если есть ключ расшифровки. Но сливали такое только в 2.8 версии, а так-же после случился рекод компилятора, и поэтому не будет работать паттерн сканнер на те функции в 2.8, и кроме как анализа той версии - ничего толкового ты оттуда не получишь.
 
Назад
Сверху Снизу