Red de conocimiento informático - Aprendizaje de programación - ¿Cuál es la conexión y diferencia entre ganchos e inyección de DLL?

¿Cuál es la conexión y diferencia entre ganchos e inyección de DLL?

De hecho, la inyección y la vinculación están inextricablemente vinculadas y, a menudo, hablamos de ambas juntas, lo que lleva a muchas personas a pensar que son la misma cosa.

La seguridad de las aplicaciones tiene un concepto llamado integridad, lo que significa que los atacantes no pueden alterar maliciosamente los programas o datos. Dependiendo del momento de la manipulación, tenemos dos formas de comprometer la integridad de una aplicación: estática y dinámica.

En Android, el método de manipulación estática consiste en descompilar el apk, modificarlo o agregar código y luego volver a empaquetarlo. Una vez que el usuario instala el apk modificado, el código del atacante se cargará en el espacio del proceso en tiempo de ejecución. . medio.

El método de manipulación dinámica es un gancho. Si quiero alterar el código, entonces lo que quiero lograr es controlar el programa para que ejecute mi código cuando el programa está a punto de ejecutar una determinada lógica. Este comportamiento se llama gancho.

El programa en tiempo de ejecución existe en forma de proceso y el código y los datos se colocan en su propio proceso. El problema es que el sistema operativo aísla los procesos, por lo que mi código está en mi proceso, el código de otras personas está en los procesos de otras personas y los procesos de otras personas no pueden saltar a mi proceso para ejecutar mi código. El reempaquetado mencionado anteriormente también puede considerarse como un método de inyección estática. El método de inyección dinámica disfruta de una inyección de biblioteca similar en Android y Linux. El método más utilizado en Internet es libinject lanzado por Yuki Furukawa. Además, está Xposed, que utiliza un método de inyección especial que es una combinación de estático y dinámico.