Как перехватить системные вызовы моего приложения для Android (не рутированное устройство)
Я пытаюсь перехватить все системные вызовы, сделанные моим Android-приложением, на устройстве без рута.
Поэтому каждый раз, когда мое приложение записывает / читает файл, я хочу перехватить системный вызов и зашифровать / расшифровать поток в целях безопасности. Часть шифрования не проблема, но как мне перехватить системные вызовы?
Поскольку части приложения представляют собой модули, разработанные сторонними поставщиками, для которых я не могу изменить исходный код, другого способа обеспечить безопасное хранение данных нет.
Поскольку у меня нет доступа с правами root, я не могу получить доступ к адресу таблицы системных вызовов, как описано здесь, и я не могу сделать это также через модуль LKM.
Буду признателен за любые предложения, спасибо.
Редактировать:
Хорошо, теперь я получил кодовую ссылку от Simone Margaritelli! причина, по которой мой код продолжал падать, состоит в том, что я должен был установить правильные разрешения на доступ к памяти:
uint32_t page_size = getpagesize();
uint32_t entry_page_start = reloc& (~(page_size - 1));
mprotect((uint32_t *)entry_page_start, page_size, PROT_READ | PROT_WRITE);
2 ответа
Вот как вы можете перехватывать системные вызовы на Android без прав root (конечно, это работает не только для вашего собственного процесса).
Вы можете сослаться на Suterusu. Но это не потокобезопасно, и я также пытаюсь найти потокобезопасное решение.