byOpen adalah versi perpustakaan dlfunctions yang disempurnakan yang melewati batasan sistem seluler.
olehFitur Terbuka
Mendukung pemuatan dan penggunaan antarmuka perpustakaan sistem Android di Aplikasi (meskipun peta belum dimuat).
Pada Android 7 dan yang lebih baru, dlopen dan System.load dilarang dipanggil. Meskipun saat ini ada perpustakaan seperti Nougat_dlfunctions di Internet yang melewati batasan pemuatan dengan menemukan perpustakaan tersebut dari peta.
Namun, metode ini tidak akan berfungsi untuk perpustakaan di aplikasi yang belum dimuat ke dalam peta.
ByOpen tidak hanya mendukung pemuatan dlopen palsu dari peta, tetapi juga dapat memuat secara paksa perpustakaan yang belum dimuat ke dalam peta, melewati batasan sistem, untuk mencapai dlopen yang lebih universal.
Catatan: Metode implementasi saat ini secara teori relatif universal. Setidaknya sudah teruji OK di Android 10 saya, tetapi belum sepenuhnya diuji secara detail. Harap evaluasi sendiri apakah akan menggunakannya.
oleh prinsip-prinsip terkait Open
Prinsip implementasi spesifiknya relatif sederhana. Prinsip ini terutama mengacu pada ide dan implementasi metode sederhana untuk melewati batasan Android P pada antarmuka non-SDK.
Meskipun tujuan utama artikel ini adalah untuk melewati hide api, metode yang digunakan di dalamnya untuk menyamar sebagai panggilan sistem juga dapat digunakan dengan System.loadLibrary untuk membuat sistem mengira bahwa sistem itu sendiri yang memanggil System.loadLibrary.
Ini melewati batasan classloader-namespace Android N, memuat semua perpustakaan di sistem/sistem/lib ke dalam peta, dan kemudian menggunakan dlopen palsu ke dlsym.
oleh penggunaan antarmuka Open
Pustaka dan antarmuka statis yang relevan ada di: dlopen.h
Metode penggunaan yang relevan sama persis dengan dlopen asli
typedef by_char_t const* (*curl_version_t)();
by_pointer_t handle = by_dlopen("libcurl.so", BY_RTLD_LAZY);
jika (menangani)
{
by_pointer_t addr = by_dlsym(pegangan, "curl_version");
jika (tambahan)
{
curl_version_t curl_version = (curl_version_t)tambahan;
by_print("curl_version: %s", curl_version());
}
oleh_dlclose(pegangan);
}