绕过移动端系统限制的dlopen库byOpen



  • byOpen是一个绕过移动端系统限制的增强版dlfunctions库。支持App中加载和使用Android系统库接口(即使maps中还没有被加载也支持)。Android 7以上dlopen, System.load都是被限制调用的,虽然目前网上有Nougat_dlfunctions等库通过从maps中找so库来绕过加载限制。不过对于app中还没被加载到maps的so库,这种方式就不行了。

    而byOpen不仅支持fake dlopen方式从maps加载,还可以将还没加载到maps的so库绕过系统限制强行加载进来使用,实现更加通用化得dlopen。

    具体实现原理主要还是借鉴了一种绕过Android P对非SDK接口限制的简单方法的思想和实现方式。

    byOpen参考了实现,并且做了一些小改进:不在/proc/self/maps中的系统库,也能绕过限制强行加载进来使用;除了从.dynsym中检索符号,还支持从.symtab中检索符号,参考:Enhanced_dlfunctions,也修复了里面的一些bug;整个dlopen过程只有一次malloc分配,省去整个符号表的内存分配和copy;兼容原始dlopen,如果是低版本android系统,没有限制,还是会优先切到原生dlopen上去直接调用。

    项目地址: http://swizi.open.global/


Log in to reply