В данной статье я немного расскажу о том, как c помощью фреймворка AndHook можно перенаправлять вызовы функций в native-библиотеках. Можно перехватывать вызовы как публичных (экспортируемых функций), так и непубличные, напрямую по их адресу. Подробнее о перенаправлении можно почитать тут, и на странице фреймворка. В качестве примера будет рассмотрен случай с внедрением своей библиотеки. Однако данный фреймворк также позволяет работать и без пересбора приложения с помощью xposed. В данной статья я буду использовать Visual Studio и BatchApkTool для Windows. Вместо Visual Studio можно использовать Android Studio, или вообще компилировать через gcc или clang (вариант для продвинутых). Вместо BatchApkTool можно использовать apktool. Подробно по поводу работы с BatchApkTool я останавливаться не буду, т.к. разобраться с работой в программе не трудно. Для начала нужно разобрать АПК с помощью BatchApkTool или apktool. Теперь скачаем библиотеку и заголовочный файл со страницы проекта, для этого нужно перейти по этой ссылке и этой ссылке и скачать библиотеку для вашей платформы. (Я не нашел чем отличаются версия Compat от обычной, лично я использовал обычную версию. Возможно, подскажут в комментариях) В программе Visual Studio Installer должны быть установлены следущие компоненты: 
Остальные по желанию. Обратите внимание на содержание спойлера выше, если не выполнить предыдущий этап, то либо не будет нужного шаблона, либо решение не скомпилируется. Нужно выбрать шаблон "Динамическая общая библиотека (Android)", и затем ввести название.  После того как проект будет создан нужно его настроить для этого нужно щелкнуть правой кнопкой мыши вот сюда:

и открыть свойства. В свойствах проекта выбираем Конфигурация: Все конфигурации, Платформа: <Ваша целевоя платформа>, Целевой уровень API можно выбрать 14 для ARM и X86, а для ARM64 и X64 уже нужен 21 уровень.
Также по желанию можно поменять компилятор.
Затем во вкладке Компановщик->Ввод в поле дополнительные зависимости нужно указать путь к скачанной нами библиотке и библиотеке, функции которой мы хотим перехватывать: 
 Обратите внимание на то, что мы можем делать один проект для нескольких платформ, поэтому, если вы собироаетесь компилировать для нескольких платформ, то нужно переключить на другую платформу и выбрать библиотеку для другой платформы. Теперь нужно добавить заголовочный файл. Нужно перейти в папку с решением.  Теперь нужно скопировать скачанный ранее заголовочный файл в эту папку и добавить его в проект. Для того чтобы добавить файл в проект можно перетащить его из папки на обозреватель решений.  Затем нужно подключит заголовочный файл, добавив в начало нашего .cpp файла строку Непосредственно сама функция RegisterHooks: Также для патчинга под несколько архитектур удобно использовать #define После того как мы закончили писать код его необходимо скомпилоровать.
Для этого нужно:   Если платформ несколько повторить пункты 1-2. Теперь необходимо скопировать нашу библиотеку и библиотеку AndHook в папку lib нашего приложения для каждой из архитектур. (Скомпилированнаяя библиотека будет в папке с решением). Теперь для того чтобы наша библиотека загружалась нужно отредактировать приложение. Для этого нужно найти MainActivity нашего приложения. В начало метода onCreate в MainActivity добавим следующие строки: Где вместо SharedObject1 имя вашей библиотеки без lib и .so
Для il2cpp-игр вместо MainActivity добавляем в метод onCreate в файле smali/com/unity3d/player/UnityPlayerActivity.smali. Далее рекомпилируем приложение. Полезные ссылки:
https://github.com/asLody/AndHook/
http://armconverter.com/
http://armconverter.com/hextoarm/