Cómo conectar las llamadas del sistema de mi aplicación Android (dispositivo no enraizado)

Estoy intentando interceptar todas las llamadas de sistema hechas por mi aplicación de Android en un dispositivo no arraigado.

Así que cada vez que mi aplicación escribe / lee un archivo, quiero interceptar la llamada al sistema y cifrar / descifrar el flujo por motivos de seguridad. La parte de cifrado no es un problema, pero ¿cómo intercepto las llamadas del sistema?

Debido a que partes de la aplicación son módulos desarrollados por proveedores de terceros de los que no puedo cambiar el código fuente, no hay otra forma de asegurarse de que los datos se almacenan de forma segura.

Como no tengo acceso root, no puedo acceder a la dirección de la tabla de llamadas del sistema como se describe aquí y tampoco puedo hacerlo a través de un módulo LKM.

Agradecería cualquier sugerencia, gracias.

Editar:

Ok Tengo el formulario de enlace de código Simone Margaritelli para trabajar ahora! La razón por la cual mi código siguió fallando es porque tuve que establecer las permisiones de acceso de memoria correctas:

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); 

Así es como puede conectar syscalls en Android sin permisos de root (solo funciona para su propio proceso, por supuesto, esto no es del sistema).

Puede hacer referencia a Suterusu . Pero no es un hilo seguro, y también estoy tratando de encontrar una solución de hilo seguro.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.