Skip to content
This repository has been archived by the owner on Jan 8, 2024. It is now read-only.

Commit

Permalink
inject with "native bridge"
Browse files Browse the repository at this point in the history
  • Loading branch information
RikkaW committed Oct 24, 2020
1 parent 1068c60 commit 92b83a0
Show file tree
Hide file tree
Showing 26 changed files with 2,939 additions and 336 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Riru only does one thing, inject into zygote in order to allow modules run their
## Requirements

Android 7.0+ devices rooted with [Magisk](https://github.com/topjohnwu/Magisk)
Android 6.0+ devices rooted with [Magisk](https://github.com/topjohnwu/Magisk)

## Guide

Expand All @@ -33,7 +33,7 @@ Android 7.0+ devices rooted with [Magisk](https://github.com/topjohnwu/Magisk)

Before v22.0, we use the method of replacing a system library (libmemtrack) that will be loaded by zygote. However, it seems to cause some weird problems. Maybe because libmemtrack is used by something else.

Then we found a super easy way, add our so file into `/system/etc/public.libraries.txt`. All so files in `public.libraries.txt` will be automatically "dlopen-ed" by the system. This way is from [here](https://blog.canyie.top/2020/02/03/a-new-xposed-style-framework/).
Then we found a super easy way, through "native bridge". The specific so will be automatically "dlopen-ed" and "dlclose-ed" by the system. This way is from [here](https://github.com/canyie/NbInjection).

* How to know if we are in an app process or a system server process?

Expand Down
9 changes: 0 additions & 9 deletions app/src/main/java/moe/riru/manager/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,6 @@ class MainActivity : AppActivity() {

// --------------------------------------------

val publicLibsFile = SuFile.open("/system/etc/public.libraries.txt")
val publicLibs = publicLibsFile.readTextOrNull()?.split('\n')?.toList()
if (publicLibs?.contains("libriru.so") != true) {
message.append("No libriru.so found in $publicLibsFile.\nCheck if there is other Magisk modules that modify $publicLibsFile.")
return
}

// --------------------------------------------

val devRandomFile = SuFile.open("/data/adb/riru/dev_random")
val devRandom = devRandomFile.readTextOrNull()
if (devRandom == null) {
Expand Down
132 changes: 68 additions & 64 deletions core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ import org.apache.tools.ant.filters.FixCrLfFilter
import java.nio.file.Files
import java.security.MessageDigest

apply plugin: 'com.android.library'
plugins {
id 'com.android.application'
}

def apiVersion = rootProject.ext.riruApiVersion
def minApiVersion = rootProject.ext.riruMinApiVersion
Expand All @@ -30,6 +32,12 @@ android {
}
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
buildFeatures {
prefab true
}
Expand All @@ -48,6 +56,9 @@ repositories {
dependencies {
implementation project(':riru')
implementation 'rikka.ndk.thirdparty:xhook:1.2.0'

implementation 'androidx.annotation:annotation:1.1.0'
compileOnly project(':stub')
}

def outDir = file("$rootDir/out")
Expand All @@ -68,73 +79,66 @@ static def renameOrFail(from, to) {
}
}

android.libraryVariants.all { variant ->
def task = variant.assembleProvider.get()
task.doLast {
// clear
delete { delete magiskDir }

// copy from template
copy {
from "$rootDir/template/magisk_module"
into magiskDir.path
exclude 'customize.sh'
}
copy {
from file("$rootDir/template/magisk_module/customize.sh")
into magiskDir.path
filter { line ->
line.replaceAll('%%%RIRU_API%%%', apiVersion.toString())
.replaceAll('%%%RIRU_VERSION_CODE%%%', moduleProp['versionCode'].toString())
.replaceAll('%%%RIRU_VERSION_NAME%%%', moduleProp['version'].toString())
android.applicationVariants.all { variant ->
variant.outputs.all {
def task = variant.assembleProvider.get()
task.doLast {
// clear
delete { delete magiskDir }

// copy from template
copy {
from "$rootDir/template/magisk_module"
into magiskDir.path
exclude 'customize.sh'
}
copy {
from file("$rootDir/template/magisk_module/customize.sh")
into magiskDir.path
filter { line ->
line.replaceAll('%%%RIRU_API%%%', apiVersion.toString())
.replaceAll('%%%RIRU_VERSION_CODE%%%', moduleProp['versionCode'].toString())
.replaceAll('%%%RIRU_VERSION_NAME%%%', moduleProp['version'].toString())
}
filter(FixCrLfFilter.class,
eol: FixCrLfFilter.CrLf.newInstance("lf"))
}
filter(FixCrLfFilter.class,
eol: FixCrLfFilter.CrLf.newInstance("lf"))
}

// copy .git files manually since gradle exclude it by default
Files.copy(file("$rootDir/template/magisk_module/.gitattributes").toPath(), file("${magiskDir.path}/.gitattributes").toPath())

// generate module.prop
def modulePropText = ""
moduleProp.each { k, v -> modulePropText += "$k=$v\n" }
modulePropText = modulePropText.trim()
file("$magiskDir/module.prop").text = modulePropText

// copy native files
def nativeOutDir = file("build/intermediates/cmake/$variant.name/obj")

file("$magiskDir/system").mkdirs()
file("$magiskDir/system_x86").mkdirs()
renameOrFail(file("$nativeOutDir/arm64-v8a"), file("$magiskDir/system/lib64"))
renameOrFail(file("$nativeOutDir/armeabi-v7a"), file("$magiskDir/system/lib"))
renameOrFail(file("$nativeOutDir/x86_64"), file("$magiskDir/system_x86/lib64"))
renameOrFail(file("$nativeOutDir/x86"), file("$magiskDir/system_x86/lib"))

renameOrFail(file("$magiskDir/system/lib/libriru.so"), file("$magiskDir/system/lib/libriru.so"))
renameOrFail(file("$magiskDir/system/lib64/libriru.so"), file("$magiskDir/system/lib64/libriru.so"))
renameOrFail(file("$magiskDir/system_x86/lib/libriru.so"), file("$magiskDir/system_x86/lib/libriru.so"))
renameOrFail(file("$magiskDir/system_x86/lib64/libriru.so"), file("$magiskDir/system_x86/lib64/libriru.so"))

renameOrFail(file("$magiskDir/system/lib/libriruhide.so"), file("$magiskDir/system/lib/libriruhide.so"))
renameOrFail(file("$magiskDir/system/lib64/libriruhide.so"), file("$magiskDir/system/lib64/libriruhide.so"))
renameOrFail(file("$magiskDir/system_x86/lib/libriruhide.so"), file("$magiskDir/system_x86/lib/libriruhide.so"))
renameOrFail(file("$magiskDir/system_x86/lib64/libriruhide.so"), file("$magiskDir/system_x86/lib64/libriruhide.so"))
//file("$magiskDir/zygote_restart").mkdir()
//renameOrFail(file("$magiskDir/system/lib/zygote_restart"), file("$magiskDir/zygote_restart/zygote_restart_arm"))
//renameOrFail(file("$magiskDir/system/lib64/zygote_restart"), file("$magiskDir/zygote_restart/zygote_restart_arm64"))
//renameOrFail(file("$magiskDir/system_x86/lib/zygote_restart"), file("$magiskDir/zygote_restart/zygote_restart_x86"))
//renameOrFail(file("$magiskDir/system_x86/lib64/zygote_restart"), file("$magiskDir/zygote_restart/zygote_restart_x64"))

// generate sha1sum
fileTree("$magiskDir").matching {
exclude "README.md", "META-INF"
}.visit { f ->
if (f.directory) return
file(f.file.path + ".sha256sum").text = sha256sum(f.file)
// copy .git files manually since gradle exclude it by default
Files.copy(file("$rootDir/template/magisk_module/.gitattributes").toPath(), file("${magiskDir.path}/.gitattributes").toPath())

// generate module.prop
def modulePropText = ""
moduleProp.each { k, v -> modulePropText += "$k=$v\n" }
modulePropText = modulePropText.trim()
file("$magiskDir/module.prop").text = modulePropText

// copy native files
def nativeOutDir = file("build/intermediates/cmake/$variant.name/obj")

// copy dex
copy {
from zipTree(file(outputFile)).matching { include 'classes.dex' }.singleFile
into magiskDir.path
}

file("$magiskDir/system").mkdirs()
file("$magiskDir/system_x86").mkdirs()
renameOrFail(file("$nativeOutDir/arm64-v8a"), file("$magiskDir/system/lib64"))
renameOrFail(file("$nativeOutDir/armeabi-v7a"), file("$magiskDir/system/lib"))
renameOrFail(file("$nativeOutDir/x86_64"), file("$magiskDir/system_x86/lib64"))
renameOrFail(file("$nativeOutDir/x86"), file("$magiskDir/system_x86/lib"))

// generate sha1sum
fileTree("$magiskDir").matching {
exclude "README.md", "META-INF"
}.visit { f ->
if (f.directory) return
file(f.file.path + ".sha256sum").text = sha256sum(f.file)
}
}
task.finalizedBy zipMagiskMoudle
}
task.finalizedBy zipMagiskMoudle
}

task zipMagiskMoudle(type: Zip) {
Expand Down
16 changes: 10 additions & 6 deletions core/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,14 @@ add_library(riruhide SHARED hide.cpp wrap.cpp pmparser.c)
target_include_directories(riruhide PRIVATE ${CMAKE_SOURCE_DIR})
target_link_libraries(riruhide log)

#add_executable(zygote_restart
# zygote_restart.cpp pmparser.c)
#
#target_link_libraries(zygote_restart log)
#
set_target_properties(riru riruhide
PROPERTIES LINK_FLAGS_RELEASE -s)
PROPERTIES LINK_FLAGS_RELEASE -s)

if ("${ANDROID_ABI}" STREQUAL "x86" OR "${ANDROID_ABI}" STREQUAL "x86_64")
add_definitions(-DHAS_NATIVE_BRIDGE)
endif()

add_library(riruloader SHARED loader.cpp misc.cpp)
include_directories(include)
target_link_libraries(riruloader log)
set_target_properties(riruloader PROPERTIES LINK_FLAGS_RELEASE -s)
Loading

0 comments on commit 92b83a0

Please sign in to comment.