byOpen est une version améliorée de la bibliothèque dlfunctions qui contourne les limitations du système mobile.
parOpen Features
Prend en charge le chargement et l'utilisation de l'interface de la bibliothèque du système Android dans l'application (même si les cartes n'ont pas encore été chargées).
Sur Android 7 et supérieur, dlopen et System.load ne peuvent pas être appelés, bien qu'il existe actuellement des bibliothèques telles que Nougat_dlfunctions sur Internet qui contournent les restrictions de chargement en trouvant la bibliothèque so à partir des cartes.
Cependant, cette méthode ne fonctionnera pas pour la bibliothèque so de l'application qui n'a pas été chargée dans les cartes.
ByOpen prend non seulement en charge le faux chargement de dlopen à partir de cartes, mais peut également charger de force des bibliothèques qui n'ont pas encore été chargées dans des cartes, en contournant les restrictions du système, pour obtenir un dlopen plus universel.
Remarque : La méthode de mise en œuvre actuelle est relativement universelle en théorie. Au moins, elle a été testée correctement sur mon Android 10, mais elle n'a pas été entièrement testée en détail. Veuillez l'évaluer par vous-même si vous souhaitez l'utiliser.
byOpen principes associés
Le principe spécifique de mise en œuvre est relativement simple. Il s'appuie principalement sur l'idée et la mise en œuvre d'une méthode simple pour contourner les restrictions d'Android P sur les interfaces non SDK.
Bien que l'objectif principal de cet article soit de contourner l'API hide, la méthode utilisée pour se déguiser en appel système peut également être utilisée avec System.loadLibrary pour faire croire au système que le système lui-même appelle System.loadLibrary.
Cela contourne la restriction d'espace de noms du chargeur de classe d'Android N, charge toute bibliothèque so du système/système/lib dans des cartes, puis utilise un faux dlopen pour dlsym.
parUtilisation de l'interface ouverte
Les bibliothèques et interfaces statiques pertinentes se trouvent dans : dlopen.h
Les méthodes d'utilisation pertinentes sont exactement les mêmes que celles du dlopen natif.
typedef by_char_t const* (*curl_version_t)();
by_pointer_t handle = by_dlopen("libcurl.so", BY_RTLD_LAZY);
si (poignée)
{
by_pointer_t addr = by_dlsym(handle, "curl_version");
si (adresse)
{
curl_version_t curl_version = (curl_version_t)addr;
by_print("curl_version : %s", curl_version());
}
by_dlclose(poignée);
}