Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Как искать оффсеты после дампа IL2cppDumper на Unity

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Ноя 2025
Сообщения
41
Реакции
0
Доброго времени суток! В общем,сделал я дамп
Пожалуйста, авторизуйтесь для просмотра ссылки.
*игра BLOKPOST*.Кинул файлы global-metadata.dat и GameAssembly.dll в одну папку.
Снимок12123213.PNG






















Посмотрел файл script json - там только строковые литералы, есть ещё файл il2cpp.h(не знаю что это,вроде код на C++) и dump.cs(в dump.cs хранится исходный код,но без логики).
Я не могу понять,как мне найти оффсеты и смещения с адресами(из этих трёх этих файлов или программами?).И нужно ли использовать dnSpy для этой игры?
Для External(без хуков,пожалуйста)
 
для начала тебе в любом случае в dnSpy нужно открыть игру и посмотреть что там ваще есть, по другому логику не посмотреть(остается только дизассемблер). в dump.cs лежат оффсеты классов, полей и методов
 
для начала тебе в любом случае в dnSpy нужно открыть игру и посмотреть что там ваще есть, по другому логику не посмотреть(остается только дизассемблер). в dump.cs лежат оффсеты классов, полей и методов
Пасиб
 
все нужные тебе структуры игры и оффсеты лежат в dump.cs, доступ к ним получаешь как в любой игре, GameAssembly.dll + оффсет, исходный код методов там не найдешь - они скомпилированы в натив, днспай не поможет, анализируй через иду
 
все нужные тебе структуры игры и оффсеты лежат в dump.cs, доступ к ним получаешь как в любой игре, GameAssembly.dll + оффсет, исходный код методов там не найдешь - они скомпилированы в натив, днспай не поможет, анализируй через иду
А через Ghidra можно?
 
все нужные тебе структуры игры и оффсеты лежат в dump.cs, доступ к ним получаешь как в любой игре, GameAssembly.dll + оффсет, исходный код методов там не найдешь - они скомпилированы в натив, днспай не поможет, анализируй через иду
привет, вижу ты разбираешься, слушай, у меня проблема, игра на l2cpp, я ее дампил чтобы получить dummydll , взял GameAssembly, закинул в dnspy, далее отредачил нужный код, жму скомпилировать и пишет мол нужно пропатчить mono , игра на l2cpp, как? ,мне нужно обновить дллку GameAssembly чтобы получились изменения в игре
 
привет, вижу ты разбираешься, слушай, у меня проблема, игра на l2cpp, я ее дампил чтобы получить dummydll , взял GameAssembly, закинул в dnspy, далее отредачил нужный код, жму скомпилировать и пишет мол нужно пропатчить mono , игра на l2cpp, как? ,мне нужно обновить дллку GameAssembly чтобы получились изменения в игре
Тебе не нужен dnSpy для IL2cpp игры,ты делаешь то,что для Mono игр.Для IL2cpp нужен дампер(можно который в моем вопросе),потом в dump.cs ищешь функцию нужную тебе(там будет ее оффсет)+ дизассемблер(там ищешь класс этой функции) и потом GameAssembly + оффсет класса


вроде так
 
Последнее редактирование:
Найдите Имя: Откройте dump.cs в текстовом редакторе. Найдите нужный вам класс и имя метода или поля (например, класс Player и метод Update).
  1. Найдите Адрес: Откройте script.json (или il2cpp.h).
  2. Сопоставьте: Используйте поиск (Ctrl+F) в script.json, чтобы найти полное имя, которое вы обнаружили в dump.cs. Имя в json обычно имеет формат ClassName$$MethodName (например, Player$$Update).
Рядом с этим именем вы увидите его адрес (RVA) — это и есть нужный оффсет от начала бинарного файла (GameAssembly.dll или libil2cpp.so)
 
Тебе не нужен dnSpy для IL2cpp игры,ты делаешь то,что для Mono игр.Для IL2cpp нужен дампер(можно который в моем вопросе),потом в dump.cs ищешь функцию нужную тебе(там будет ее оффсет)+ дизассемблер(там ищешь класс этой функции) и потом GameAssembly + оффсет класса


вроде так
слушай, а если NameSpace: UnityEngine.Rendering.Universal
public struct CameraData //TypeDefIndex 7652
rva: rva, offset: offset, va: va
public static camera get_current()
то надо так же через GameAssembly + оффсет или как?
 
слушай, а если NameSpace: UnityEngine.Rendering.Universal
public struct CameraData //TypeDefIndex 7652
rva: rva, offset: offset, va: va
public static camera get_current()
то надо так же через GameAssembly + оффсет или как?
а также, вот игра не на mono, а на il2cpp, я конечно ее сдампил, я могу как в моно свои классы делать?
 
а также, вот игра не на mono, а на il2cpp, я конечно ее сдампил, я могу как в моно свои классы делать?
Не,нельзя
слушай, а если NameSpace: UnityEngine.Rendering.Universal
public struct CameraData //TypeDefIndex 7652
rva: rva, offset: offset, va: va
public static camera get_current()
то надо так же через GameAssembly + оффсет или как?
Бро,честно сам не знаю,попробуй вопрос на форуме задать
 
слушай, а если NameSpace: UnityEngine.Rendering.Universal
public struct CameraData //TypeDefIndex 7652
rva: rva, offset: offset, va: va
public static camera get_current()
то надо так же через GameAssembly + оффсет или как?
static_func = GameAssembly.dll + RVA

а вообще, юзай ил2спп апи если нет лимитейшенов, это удобнее, правильнее и проще, il2cpp_resolve_icall сразу вернёт тебе поинтер метода по его сигнатуре и не сломается после обновления игры, почитай ману ил2спп
 
static_func = GameAssembly.dll + RVA

а вообще, юзай ил2спп апи если нет лимитейшенов, это удобнее, правильнее и проще, il2cpp_resolve_icall сразу вернёт тебе поинтер метода по его сигнатуре и не сломается после обновления игры, почитай ману ил2спп
Спасибо вам всем!!
 
Доброго времени суток! В общем,сделал я дамп
Пожалуйста, авторизуйтесь для просмотра ссылки.
*игра BLOKPOST*.Кинул файлы global-metadata.dat и GameAssembly.dll в одну папку.
Посмотреть вложение 319149





















Посмотрел файл script json - там только строковые литералы, есть ещё файл il2cpp.h(не знаю что это,вроде код на C++) и dump.cs(в dump.cs хранится исходный код,но без логики).
Я не могу понять,как мне найти оффсеты и смещения с адресами(из этих трёх этих файлов или программами?).И нужно ли использовать dnSpy для этой игры?
Для External(без хуков,пожалуйста)
в иде открываешь игру, загружаешь скрипт ida_with_struct_py3.py. будет 2 диалоговых окна: с выбором script.json и il2cpp.h. спустя минут 10 ида отлагает и ты сможешь изучать игру.

если пишешь интернал могу посоветовать библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.

невовремя я конечно, но всё же
 
static_func = GameAssembly.dll + RVA

а вообще, юзай ил2спп апи если нет лимитейшенов, это удобнее, правильнее и проще, il2cpp_resolve_icall сразу вернёт тебе поинтер метода по его сигнатуре и не сломается после обновления игры, почитай ману ил2спп
кстатие, к примеру есть функция
// Namespace: StylizedWater2.UnderwaterRendering
public class UnderwaterRenderer : MonoBehaviour // TypeDefIndex: 13222
{
и мне нужно вызвать от нее:
public float fogBrightness; // 0x70
- но по сути, 0x70 имею другие Fields, как мне вызвать именно ту, которую я хочу?
 
Спасибо вам вс
Спасибо вам всем!!
:catjam:
в иде открываешь игру, загружаешь скрипт ida_with_struct_py3.py. будет 2 диалоговых окна: с выбором script.json и il2cpp.h. спустя минут 10 ида отлагает и ты сможешь изучать игру.

если пишешь интернал могу посоветовать библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.

невовремя я конечно, но всё же
Спасибо
 
Последнее редактирование:
кстатие, к примеру есть функция
// Namespace: StylizedWater2.UnderwaterRendering
public class UnderwaterRenderer : MonoBehaviour // TypeDefIndex: 13222
{
и мне нужно вызвать от нее:
public float fogBrightness; // 0x70
- но по сути, 0x70 имею другие Fields, как мне вызвать именно ту, которую я хочу
Ты знаешь,что 0x70 это смещение fogBrightness ,знаешь что fogBrightness это поле UnderwaterRenderer, нашел указатель на объект UnderwaterRenderer и точно знаешь что это этот объект.И когда ты это нашёл,то 0x70 уже уникальный адрес,потому что он ведь относится к какому-то определенному классу и полю.И получается вот именно та функция,которая тебе требуется
 
Назад
Сверху Снизу