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

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

Первый же xref ( обычно единственный ) - это наша функция Class::Init. Теперь можно ее хукнуть. Наша функция должна выглядеть примерно вот так:
Отлично, начало положено и я хочу сразу перейти к поиску имени класса, я не хочу искать саму функцию получения имени функции, когда это можно сделать через оффсет: Class + ?? = name.
Так как же найти этот оффсет? Я предлагаю вам посмотреть сурс IL2CPP и найти

Если внимательно посмотреть, в сурсе IL2CPP идет сравнение, в котором первый аргумент - objectClass->name. Как раз таки это нам и нужно! У нас же этим первым аргументом переменная, которая равна class + 0x30, это и будет переменной name. Мы нашли имя класса, для более внимательных, там же есть namespace класса, теперь у вас есть база для дампера IL2CPP, желаю вам удачи, а так-же хочу выразить спасибо этому человеку - Komok050505( @popugapopugay ).
Спонсором этой статьи стали вечные вопросы и просьбы помочь сдампить Геншин, а также из-за ЧСВ некоторых особ, которые считают себя уникальными ( мем отдельный ). Многие, кто не имели дел с этой игрой и зайдут просто почитать, скажу сразу, НЕЛЬЗЯ сдампить какой-то сторонней программой ( если ее не делали специально под эту игру), в папке с игрой вы не увидите привычные модули как для других IL2CPP игр. Я буду часто ссылаться на сурс IL2CPP и IL2CPP Resolver, ибо это единственная ПОЛЕЗНАЯ информация, которую вы можете найти на сегодняшний день.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
( для понимания, а так-же создания своих структур )Хочу сказать сразу: я больше не буду кому-то лично помогать. У вас теперь есть статья в открытом доступе ( которой к сожалению не было у меня при обучении ).
Теория:

Я не буду точно объяснять, что и как происходит, ведь вы не за этим пришли?) Начнем с того, что в Геншине, как и во всех остальных играх, структура IL2CPP не отличается. Есть всеми привычный
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Собственно если мы решили сделать дампер, нам нужен Class::Init для того, чтобы его хукнуть и получать все классы, которые инициализируются в игре ( можно конечно вызывать функцию инициализации, но это ужасно и неправильно ).Практика:
Я хочу сказать сразу важное, геншин не нужно дампить сторонней программой ( KsDumper и другие ), можно просто загрузить в иду сам .exe.
Начать же я хочу с поиска Class::Init. Эту функцию можно найти с помощью
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Первый же xref ( обычно единственный ) - это наша функция Class::Init. Теперь можно ее хукнуть. Наша функция должна выглядеть примерно вот так:
C++:
bool __fastcall ClassInit(il2cpp_class* class_, void* a) {
using orig = bool(__fastcall*)(void*, void*);
bool result = ((orig)o_object_new)(class_, a);
return result;
}
Так как же найти этот оффсет? Я предлагаю вам посмотреть сурс IL2CPP и найти
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Мы будем искать по этому xref - "IReferenceArray`1". Как правило это второй xref, при переходе по нему вы увидите такую картину:
Если внимательно посмотреть, в сурсе IL2CPP идет сравнение, в котором первый аргумент - objectClass->name. Как раз таки это нам и нужно! У нас же этим первым аргументом переменная, которая равна class + 0x30, это и будет переменной name. Мы нашли имя класса, для более внимательных, там же есть namespace класса, теперь у вас есть база для дампера IL2CPP, желаю вам удачи, а так-же хочу выразить спасибо этому человеку - Komok050505( @popugapopugay ).
Последнее редактирование: