Pull to refresh

Comments 14

UFO just landed and posted this here
Спасибо за статью! Было бы интересно почитать о подобном в отношении il2cpp, все же постепенно большинство проектов переходит на него.

У il2cpp несколько другой подход, в котором я пока не осоьо разобрался. Насколько понимаю, они перегоняют исходный код в плюсы, после чего перехват осуществляется все тем же способом, как в примере перехватываются функции моно.
Проблема в том, что не всегда срабатывает перехват, возможно, не хватает места для трамплина либо что-то делаю не так.
Оффсеты дампятся через il2cppdumper, потом ida. В памяти проще рассчитать как findexportbyname любой экспортированной функции-baseaddress+ida offset.
К счсстью таких игр пока мало попадалось.

Frida — один из мастхевных инструментов, которым, кстати, удобно не только ломать что-либо, но и добавлять функционал.
Где то на хабре есть моя статья про добавление мультиплеера в игру с помощью Frida.

Да, я пару лет тоже назад писал что-то по этой самой фриде. Полезна отладка в рпальном времени+можнт не писать свой инжектор, а испол зовать их тулзу.
Ну и времени на исследования уходит несоизмеримо меньше

Я недавно начал играть в игру Subnautica, так вот мне там жутко не хватало карты местности(но это на десктопе, а не на телефоне). Так вот после непродолжительного исследования выяснилось, что эта игра написана на Unity, поэтому я начал гуглить как добавлять функционал в Unity игры, и нашел вот эту штуку github.com/aw-3/Unity-Injector
После чего запилил на c# простенькую dll которая открывала серверный сокет и отправляла подключенным клиентам информацию о положении персонажа(эта dll инжектится в середину игры). Очень повезло, что разработчики игры оказались поклонниками паттерна — синглтон, поэтому извлечь необходимую информацию оказалось совсем несложно. Ну а потом сделал приложение на Android которое эту информацию показывало на карте.
Да, под винду довольно несложно заниматься подобными вещами. Есть куча метод для редактирования кода под Unity3d, от Mono.Cecil до инжектов разного плана. Правда, если на игре есть защита, то сначала придется ее обходить(к примеру, на пиратских серверах Rust развлекался, делая мини-карту и развешивая здоровенные цилиндры над игроками, а на сервере с включенным VAC'ом быстро прилетел автобан, возможно, не стоило использовать встроенные «админские» фичи).
Единственное что я не знаю, что использует Unity3D под винду: если все тот же Mono, то описанный в статье способ должен работать и под виндой. Кстати, он же должен работать и под iOS, но проверить не на чем.
Впрочем, как оказалось, под андроид — тоже)
Под десктопы — только mono, под iOS — только il2cpp, под android — mono / il2cpp, но использовать mono на android уже смысла нет — il2cpp достаточно стабилен с таргетом fw3.5, поэтому так просто ломать уже не получится = придется ковырять нейтив-код.

Любопытно, спасибо.
Но опять же, чисто по своему опыту-пока боллшая часть под андроид-таки моно.

blogs.unity3d.com/ru/2017/12/20/meeting-google-play-requirements-in-the-future
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.
Похоже, что со временем таки придется реверсить и их. Если интересно будет, конечно.
Эм, то есть по сути статья о том, как извлечь моновские дллки из апк и, в случае необходимости, подменить их? Но ведь всё то же самое можно сделать тем же банальным apktool без всяких рутов. Или я чего-то не понимаю?
Это статья о том, как это сделать на лету, без пересборки и подписи apk. Кроме того, некоторые игры проверяют чексумму apk, а вот проверку на изменение памяти пока нигде не видел(кроме 1 игрушки, в которой вообще довольно параноидальная система безопасности, проверяющая наличие рута и падающая при наличии подключения к adb-тут так и не понял, в чем реальная причина).
Кроме того, этот способ извлекает подгруженные dll'ки: да, в случае, если они лежат в apk просто так, смысла его применять нет, но очень часто разработчики шифруют тем или иным способом как минимум Assemble_CSharp(сталкивался в 3-4 играх, пока тягал из apk, потом стал тащить из памяти, потому реальный процент не знаю).
Вот этот способ позволяет извлекать все библиотеки после их подгрузку в память, а значит в их исходном, нешифрованном состоянии.
Sign up to leave a comment.

Articles