riru-core模块官方版是让用户可以制作出自己模块,拥有了软件以后用户的手机将会更加的强大,让用户使用手机拥有更多的功能和权限,用户可以轻松的获得更加有趣的手机功能。
Riru 只做一件事,注入 zygote 以允许模块在应用程序或系统服务器中运行它们的代码。
Riru是Magisk的模块,所以首先要安装Magisk Manager,如果用户没有,小编这里为用户提供了下载地址:http://www.downcc.com/soft/484716.html
Magisk Manager下载安装以后,按照:模块 - 从存储安装 - 选择下载的zip的步骤就可以轻松安装了。
为什么要做出 Riru 呢?
因为 libmemtrack.so 只有一个,如果有人想用替换 libmemtrack 的套路来做点什么别人就做不了。所以就制造了 Riru 来占下 libmemtrack 但是提供了模块这样的东西。
她怎么工作呢?
简而言之,替换一个会被 zygote 进程加载的共享库。
首先要找到那个共享库,而且那个共享库要越简单越好,所以就盯上了只有 10 个导出函数的 libmemtrack。 然后就可以自己提供一个叫 libmemtrack 并且也提供了原来的函数们的库,这样就可以进去 zygote 进程也不会发生爆炸。(然而现在看来选 libmemtrack 也不是很好)
接着如何知道自己已经在应用进程或者系统服务进程里面。 JNI 函数 (com.android.internal.os.Zygote#nativeForkAndSpecialize & com.android.internal.os.Zygote#nativeForkSystemServer) 会在应用进程或者系统服务进程被 fork 出来的时候被调用。 所以只要把这两个函数换成自己的。这部分很简单,只要 hook jniRegisterNativeMethods 因为所有 libandroid_runtime 里面的 JNI 方法都是通过这个注册,然后就可以再调用 RegisterNatives 来替换它们。
构建
在 Android Studio 或命令行执行 gradle task :riru-core:assembleMagiskRelease,zip 会被存到 release。
Riru的原理是通过替换会被Zygote加载的libmemtrack.so从而实现Zygote注入,而安卓应用进程都是从Zygote fork的,注入了Zygote也就等同于注入了接下来会启动的游戏,也就可以轻松实现修改了。然后hook掉Zygote.nativeForkAndSpecialize函数监听app启动。