byOpen é uma versão aprimorada da biblioteca dlfunctions que contorna as limitações do sistema móvel.
Recursos da Open
Suporta carregamento e utilização da interface da biblioteca do sistema Android no App (mesmo que os mapas ainda não tenham sido carregados).
No Android 7 e superior, dlopen e System.load não podem ser chamados, embora atualmente existam bibliotecas como Nougat_dlfunctions na Internet que ignoram as restrições de carregamento, encontrando a biblioteca so nos mapas.
No entanto, este método não funcionará para a biblioteca so do aplicativo que não foi carregada nos mapas.
ByOpen não apenas suporta carregamento falso de dlopen de mapas, mas também pode carregar à força bibliotecas que ainda não foram carregadas em mapas, ignorando as restrições do sistema, para obter um dlopen mais universal.
Nota: O método de implementação atual é relativamente universal em teoria. Pelo menos foi testado corretamente no meu Android 10, mas não foi totalmente testado em detalhes.
Princípios relacionados byOpen
O princípio de implementação específico é relativamente simples. Baseia-se principalmente na ideia e na implementação de um método simples para contornar as restrições do Android P em interfaces não SDK.
Embora o objetivo principal deste artigo seja ignorar a API oculta, o método usado nele para se disfarçar como uma chamada de sistema também pode ser usado com System.loadLibrary para fazer o sistema pensar que o próprio sistema está chamando System.loadLibrary.
Isso ignora a restrição de namespace do carregador de classe do Android N, carrega qualquer biblioteca so no sistema/sistema/lib em mapas e, em seguida, usa dlopen falso para dlsym.
por uso da interface Open
As bibliotecas e interfaces estáticas relevantes estão em: dlopen.h
Os métodos de uso relevantes são exatamente os mesmos do dlopen nativo
typedef by_char_t const* (*curl_version_t)();
by_pointer_t handle = by_dlopen("libcurl.so", BY_RTLD_LAZY);
se(manuseio)
{
by_pointer_t addr = by_dlsym(handle, "curl_version");
se (endereço)
{
curl_version_t curl_version = (curl_version_t)addr;
by_print("curl_version: %s", curl_version());
}
by_dlclose(handle);
}