#android #reverse-engineering #xposed #xposed-framework
#Android #обратное проектирование #xposed #xposed-framework
Вопрос:
Итак, я работаю над модулем Xposed, который должен соответствовать нескольким приложениям, цель модуля — создать автоматизированное создание группы модулей для разных приложений, что мне нужно знать, есть ли способ узнать все методы, которые вызываются определенным приложением во время его запуска?Например, если бы я мог создать модуль Xposed, который сохранял бы имена всех вызываемых методов в базе данных, это было бы очень полезно, или если у вас есть что-то на уме относительно автоматизации модулей Xposed, пожалуйста, укажите мне в этом направлении. Наконец, цель приложения — показать пользователю энергопотребление каждого метода в приложении и показать, какие из них потребляют больше энергии, чем другие, поэтому мне нужно автоматизировать процесс, чтобы я мог создавать несколько модулей для разных приложений, не просматривая все коды других приложений.
Ответ №1:
То, что вы хотите сделать, теоретически возможно:
Например, вы можете загрузить dex-файлы приложения во время выполнения, изучить каждый класс и метод и подключить их. Однако это будет иметь несколько существенных недостатков:
- При подключении многих функций в приложении выполнение значительно замедляется. Даже на высокопроизводительных устройствах пользователи не примут это. Это также увеличит количество сообщений об ошибках Android о приложениях, которые не реагируют, поскольку ваш модуль Xposed замедляет их работу.
- С моей точки зрения, еще худшая проблема заключается в том, что замедление, конечно, означает, что процессору предстоит выполнить гораздо больше работы, так что в итоге вы резко сократите время автономной работы вашего модуля Xposed. Таким образом, в конце концов, ваше приложение для мониторинга использования батареи, которое использует данные, управляемые модулем Xposed, должно будет показать, что Xposed и ваш модуль потребляют более 50% заряда батареи (просто необработанная оценка, может достигать 80%) из-за большого количества подключенных методов.
Перехват методов — это технология, которая работает хорошо, только если вы используете всего несколько методов, которые выполняются не очень часто.
В качестве альтернативы вы можете использовать его на специальных тестовых устройствах для оценки чего-либо (поэтому он не используется на обычном устройстве, используемом каждый день). В этой среде увеличение использования батареи и замедление работы приложений не являются большой проблемой.
Комментарии:
1. Это просто для исследования, над которым я работаю, оно не должно быть выпущено для обычного пользователя, спасибо за ответ, 2-я проблема на самом деле может вызывать беспокойство, но поможет ли это, если только применить хуки для некоторых тестов, а затем выбрать только пару методов для подключения за раз, чтобы получить большеточные результаты?
2. @khaledsabri Если вы делаете это только для одного приложения и только для тестирования, я бы рекомендовал использовать Frida вместо Xposed. Скорость разработки намного выше благодаря динамическому обновлению кода JavaScript во время работы приложения вместо перезагрузки устройства при каждом обновлении модуля Xposed.
3. Легко ли перейти на Frida из Xposed, потому что с xposed уже проделана большая работа
4. Итак, я, наконец, дошел до того, что я на самом деле пытаюсь это сделать, обратное проектирование прошло хорошо, но о проблемах с производительностью, сколько методов я должен подключить сразу, прежде чем я начну замечать какие-либо задержки, потому что в exposed есть метод, называемый hookAllMethods, который подключает все методы в классе, о котором я думал, подключая все методы.методы одного класса за раз может ли это вызвать проблемы?
5. На самом деле дело не в количестве методов, которые вы подключаете, а в том, сколько подключенных методов вызывается в секунду. Если вы подключите один метод, который выполняется тысячу раз в секунду, вы заметите это (также зависит от процессора используемого телефона). Просто попробуйте. Если вы получаете сообщения о том, что приложения не отвечают, вы знаете, что это было уже слишком.