Недавно в раст добавили обфускацию оффсетов, и пастеркам сложно зайти на
uc (noad) и сделать это по гайду оттуда.
Посмотреть вложение 291291
1. Для примера возьмем BasePlayer. Сначала нужно получить «TypeInfo» класса, найденного в script.json (сгенерированном il2cppdumper).
Посмотреть вложение 291294
2. Откройте GameAssembly.dll в IDA и перейдите по адресу классов. Для примера переименовал qword в «base_player_c».
Посмотреть вложение 291293
3.Здесь мы можем либо нажать X, чтобы просмотреть ссылки на эту переменную. Если нажать F5 для декомпиляции этой функции, то видно что она вызывает список других функций, которые ссылаются на другие qwords.
Посмотреть вложение 291295
Нам это неинтересно, поэтому мы можем прокрутить изображение дальше вниз, пока не найдем, где юзается переменная base_player_c.
Посмотреть вложение 291296
Теперь мы видим, что он устанавливает v28 в base_player_c и проверяет, является ли base_player_c + 0xE0(224) действительным, и если нет, то переинициализирует класс. После этого вызывается функция с v28 + некоторыми смещениями в качестве первого параметра и еще одним qword в качестве второго параметра. Мы можем дважды щелкнуть на этой функции, чтобы перейти к ней и декомпилировать.
Поскольку мы уже знаем, что первый параметр (a1) - это наш base_player_c + некоторые смещения, нам просто нужно посмотреть, где используется a1, потому что игра должна сначала расшифровать это значение перед использованием.
То, что я называю «некоторыми смещениями» (base_player_c + 0xB8 ] + 0x958 ), сначала указывает на статические field'ы (0xB8), а затем на VALID экземпляр visiblePlayerList (0x958).
Посмотреть вложение 291297
4. Дважды нажать на функцию, чтобы перейти к ней и декомпилировать ее. В результате вы получите расшифрованную функцию.
Посмотреть вложение 291298
И теперь вы научились декомпилить оффсеты, чтобы обновлять свои пасты плюсминуса. Этот процесс по идее можно автоматизировать и делать это быстрее, к тому же репозиторий BlazerDumper больше не обновляют.
UPD: 2 часть скоро