Skip to content

Commit

Permalink
Support Zygisk
Browse files Browse the repository at this point in the history
  • Loading branch information
canyie committed Mar 1, 2022
1 parent aba0ce3 commit c24cb0a
Show file tree
Hide file tree
Showing 8 changed files with 460 additions and 56 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,11 @@ dependencies {

def moduleProp = [
id: 'riru_dreamland',
name: 'Riru - Dreamland',
name: 'Dreamland',
author: 'canyie',
version: rootProject.ext.versionName + "_" + rootProject.ext.versionCode,
versionCode: rootProject.ext.versionCode,
description: 'A third-party Xposed framework implementation, supports Android 7.0 ~ 11. Requires module \'Riru\' is installed. Telegram group: @DreamlandFramework, QQ group: 949888394.',
description: 'A third-party Xposed framework implementation, supports Android 7.0 ~ 12. Requires module \'Riru\' is installed or Zygisk is enabled. Telegram group: @DreamlandFramework, QQ group: 949888394.',
minMagisk: rootProject.ext.minMagiskVersion,
api: rootProject.ext.riruApiVersion
]
Expand Down
1 change: 1 addition & 0 deletions app/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ add_library(riru_dreamland
utils/well_known_classes.cpp
dreamland/flavor.cpp
dreamland/riru_flavor.cpp
dreamland/zygisk_flavor.cpp
dreamland/dreamland.cpp
dreamland/android.cpp
dreamland/resources_hook.cpp
Expand Down
50 changes: 50 additions & 0 deletions app/src/main/cpp/dreamland/zygisk_flavor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//
// Created by canyie on 2022/2/28.
//

#include "flavor.h"
#include "../zygisk.hpp"
#include "../utils/macros.h"

using namespace dreamland;

using zygisk::Api;
using zygisk::AppSpecializeArgs;
using zygisk::ServerSpecializeArgs;

class DreamlandZygiskFlavor : public zygisk::ModuleBase {
public:
void onLoad(Api* api, JNIEnv* env) override {
this->api_ = api;
this->env_ = env;
skip_ = true;
Flavor::OnModuleLoaded(false);
}

void preAppSpecialize(AppSpecializeArgs* args) override {
skip_ = Flavor::ShouldSkip(args->is_child_zygote && *args->is_child_zygote, args->uid);
if (!skip_)
Flavor::PreFork(env_, false);
}

void postAppSpecialize(const AppSpecializeArgs* args) override {
/** FIXME: check if the zygote that created the child process is main zygote */
if (skip_ || !Flavor::PostForkApp(env_, false))
api_->setOption(zygisk::Option::DLCLOSE_MODULE_LIBRARY);
}

void preServerSpecialize(ServerSpecializeArgs* args) override {
if (LIKELY(!Flavor::IsDisabled())) Flavor::PreFork(env_, true);
}

void postServerSpecialize(const ServerSpecializeArgs* args) override {
if (!Flavor::IsDisabled()) Flavor::PostForkSystemServer(env_);
}

private:
Api *api_;
JNIEnv *env_;
bool skip_;
};

REGISTER_ZYGISK_MODULE(DreamlandZygiskFlavor)
2 changes: 1 addition & 1 deletion app/src/main/cpp/pine.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ extern "C" {
void PineSetAndroidVersion(int version);
void* PineOpenElf(const char* elf);
void PineCloseElf(void* handle);
void* PineGetElfSymbolAddress(void* handle, const char* symbol);
void* PineGetElfSymbolAddress(void* handle, const char* symbol, bool warn_if_missing);
bool PineNativeInlineHookSymbolNoBackup(const char* elf, const char* symbol, void* replace);
void PineNativeInlineHookFuncNoBackup(void* target, void* replace);
};
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/cpp/utils/scoped_elf.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ namespace dreamland {
PineCloseElf(handle_);
}

bool GetSymbolAddress(const char* symbol, void** out) {
*out = PineGetElfSymbolAddress(handle_, symbol);
bool GetSymbolAddress(const char* symbol, void** out, bool warn_if_missing = true) {
*out = PineGetElfSymbolAddress(handle_, symbol, warn_if_missing);
return *out != nullptr;
}

Expand Down
Loading

0 comments on commit c24cb0a

Please sign in to comment.