-
Автор темы
- #1
Недавно в раст добавили обфускацию оффсетов, и пастеркам сложно зайти на uc (noad) и сделать это по гайду оттуда.
1. Для примера возьмем BasePlayer. Сначала нужно получить «TypeInfo» класса, найденного в script.json (сгенерированном il2cppdumper).
2. Откройте GameAssembly.dll в IDA и перейдите по адресу классов. Для примера переименовал qword в «base_player_c».
3.Здесь мы можем либо нажать X, чтобы просмотреть ссылки на эту переменную. Если нажать F5 для декомпиляции этой функции, то видно что она вызывает список других функций, которые ссылаются на другие qwords.
Нам это неинтересно, поэтому мы можем прокрутить изображение дальше вниз, пока не найдем, где юзается переменная base_player_c.
Теперь мы видим, что он устанавливает 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).
4. Дважды нажать на функцию, чтобы перейти к ней и декомпилировать ее. В результате вы получите расшифрованную функцию.
И теперь вы научились декомпилить оффсеты, чтобы обновлять свои пасты плюсминуса. Этот процесс по идее можно автоматизировать и делать это быстрее, к тому же репозиторий BlazerDumper больше не обновляют.
UPD: 2 часть скоро
1. Для примера возьмем BasePlayer. Сначала нужно получить «TypeInfo» класса, найденного в script.json (сгенерированном il2cppdumper).
2. Откройте GameAssembly.dll в IDA и перейдите по адресу классов. Для примера переименовал qword в «base_player_c».
3.Здесь мы можем либо нажать X, чтобы просмотреть ссылки на эту переменную. Если нажать F5 для декомпиляции этой функции, то видно что она вызывает список других функций, которые ссылаются на другие qwords.
Нам это неинтересно, поэтому мы можем прокрутить изображение дальше вниз, пока не найдем, где юзается переменная base_player_c.
Теперь мы видим, что он устанавливает 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).
4. Дважды нажать на функцию, чтобы перейти к ней и декомпилировать ее. В результате вы получите расшифрованную функцию.
И теперь вы научились декомпилить оффсеты, чтобы обновлять свои пасты плюсминуса. Этот процесс по идее можно автоматизировать и делать это быстрее, к тому же репозиторий BlazerDumper больше не обновляют.
UPD: 2 часть скоро
Последнее редактирование: