Комментарии 14
У il2cpp несколько другой подход, в котором я пока не осоьо разобрался. Насколько понимаю, они перегоняют исходный код в плюсы, после чего перехват осуществляется все тем же способом, как в примере перехватываются функции моно.
Проблема в том, что не всегда срабатывает перехват, возможно, не хватает места для трамплина либо что-то делаю не так.
Оффсеты дампятся через il2cppdumper, потом ida. В памяти проще рассчитать как findexportbyname любой экспортированной функции-baseaddress+ida offset.
К счсстью таких игр пока мало попадалось.
Frida — один из мастхевных инструментов, которым, кстати, удобно не только ломать что-либо, но и добавлять функционал.
Где то на хабре есть моя статья про добавление мультиплеера в игру с помощью Frida.
Да, я пару лет тоже назад писал что-то по этой самой фриде. Полезна отладка в рпальном времени+можнт не писать свой инжектор, а испол зовать их тулзу.
Ну и времени на исследования уходит несоизмеримо меньше
После чего запилил на c# простенькую dll которая открывала серверный сокет и отправляла подключенным клиентам информацию о положении персонажа(эта dll инжектится в середину игры). Очень повезло, что разработчики игры оказались поклонниками паттерна — синглтон, поэтому извлечь необходимую информацию оказалось совсем несложно. Ну а потом сделал приложение на Android которое эту информацию показывало на карте.
Единственное что я не знаю, что использует Unity3D под винду: если все тот же Mono, то описанный в статье способ должен работать и под виндой. Кстати, он же должен работать и под iOS, но проверить не на чем.
Впрочем, как оказалось, под андроид — тоже)
Любопытно, спасибо.
Но опять же, чисто по своему опыту-пока боллшая часть под андроид-таки моно.
Initially, Unity Android ARM 64-bit support will only support IL2CPP scripting backend. IL2CPP technology offers C++ class performance for your scripts and can make your applications start-up time twice as fast. If you are publishing your games to Google Play and still using Mono scripting backend, we strongly recommend you consider moving to IL2CPP instead.
Кроме того, этот способ извлекает подгруженные dll'ки: да, в случае, если они лежат в apk просто так, смысла его применять нет, но очень часто разработчики шифруют тем или иным способом как минимум Assemble_CSharp(сталкивался в 3-4 играх, пока тягал из apk, потом стал тащить из памяти, потому реальный процент не знаю).
Вот этот способ позволяет извлекать все библиотеки после их подгрузку в память, а значит в их исходном, нешифрованном состоянии.
Универсальный дампер/инжектор Unity3D (Mono, Android)