openlink 1.13+(not finish)

This commit is contained in:
ShirosakiMio 2023-07-09 21:04:01 +08:00
parent d7d86dbe4e
commit d3ad3cab2f
6 changed files with 68 additions and 9 deletions

View File

@ -331,8 +331,10 @@ LOCAL_MODULE := lwjgl
LOCAL_STATIC_LIBRARIES := dyncall \ LOCAL_STATIC_LIBRARIES := dyncall \
dyncallback \ dyncallback \
dynload dynload
LOCAL_SHARED_LIBRARIES := byopen LOCAL_SHARED_LIBRARIES := byopen \
LOCAL_SRC_FILES := lwjgl3/common_tools.c \ fcl
LOCAL_SRC_FILES := lwjgl3/fcl_hook.c \
lwjgl3/common_tools.c \
lwjgl3/org_lwjgl_opengl_AMDDebugOutput.c \ lwjgl3/org_lwjgl_opengl_AMDDebugOutput.c \
lwjgl3/org_lwjgl_opengl_AMDDrawBuffersBlend.c \ lwjgl3/org_lwjgl_opengl_AMDDrawBuffersBlend.c \
lwjgl3/org_lwjgl_opengl_AMDFramebufferMultisampleAdvanced.c \ lwjgl3/org_lwjgl_opengl_AMDFramebufferMultisampleAdvanced.c \

View File

@ -5,8 +5,6 @@
static JavaVM* dalvikJavaVMPtr; static JavaVM* dalvikJavaVMPtr;
static JavaVM* runtimeJavaVMPtr;
jclass class_FCLBridge; jclass class_FCLBridge;
jmethodID method_OpenLink; jmethodID method_OpenLink;
jmethodID method_OpenPath; jmethodID method_OpenPath;
@ -19,10 +17,7 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
class_FCLBridge = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "com/tungsten/fclauncher/bridge/FCLBridge")); class_FCLBridge = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "com/tungsten/fclauncher/bridge/FCLBridge"));
method_OpenLink = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V"); method_OpenLink = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V");
method_OpenPath = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V"); method_OpenPath = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V");
} else if (dalvikJavaVMPtr != vm) {
runtimeJavaVMPtr = vm;
} }
return JNI_VERSION_1_4; return JNI_VERSION_1_4;
} }

View File

@ -6,7 +6,7 @@
#define FOLD_CRAFT_LAUNCHER_FCL_BRIDGE_H #define FOLD_CRAFT_LAUNCHER_FCL_BRIDGE_H
#include <android/native_window.h> #include <android/native_window.h>
#include <fcl_event.h> #include "fcl_event.h"
ANativeWindow* fclGetNativeWindow(void); ANativeWindow* fclGetNativeWindow(void);
int fclWaitForEvent(int timeout); int fclWaitForEvent(int timeout);

View File

@ -8,6 +8,7 @@
#include "common_tools.h" #include "common_tools.h"
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include "fcl_hook.h"
JavaVM *jvm; JavaVM *jvm;
@ -184,7 +185,9 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
UNUSED_PARAM(reserved) UNUSED_PARAM(reserved)
jvm = vm; jvm = vm;
JNIEnv *env = NULL;
(*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_4);
hookExec(env);
envTLSInit(); envTLSInit();
return JNI_VERSION_1_6; return JNI_VERSION_1_6;
} }

View File

@ -0,0 +1,47 @@
//
// Created by mio on 2023/7/9.
//
#include "fcl_hook.h"
#include <dlfcn.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
#include "fcl/include/fcl_internal.h"
jint (*orig_ProcessImpl_forkAndExec)(JNIEnv *env, jobject process, jint mode, jbyteArray helperpath, jbyteArray prog, jbyteArray argBlock, jint argc, jbyteArray envBlock, jint envc, jbyteArray dir, jintArray std_fds, jboolean redirectErrorStream);
jint
hooked_ProcessImpl_forkAndExec(JNIEnv *env, jobject process, jint mode, jbyteArray helperpath, jbyteArray prog, jbyteArray argBlock, jint argc, jbyteArray envBlock, jint envc, jbyteArray dir, jintArray std_fds, jboolean redirectErrorStream) {
char *pProg = (char *)((*env)->GetByteArrayElements(env, prog, NULL));
if (strcmp(basename(pProg), "xdg-open") != 0) {
(*env)->ReleaseByteArrayElements(env, prog, (jbyte *)pProg, 0);
return orig_ProcessImpl_forkAndExec(env, process, mode, helperpath, prog, argBlock, argc, envBlock, envc, dir, std_fds, redirectErrorStream);
}
(*env)->ReleaseByteArrayElements(env, prog, (jbyte *)pProg, 0);
long len = (*env)->GetArrayLength(env,argBlock);
unsigned char* cs[len];
(*env)->GetByteArrayRegion(env,argBlock, 0, len, (jbyte *)cs);
(*env)->DeleteLocalRef(env,argBlock);
FCL_INTERNAL_LOG("forkAndExec:%s",cs);
return 0;
}
void hookExec(JNIEnv *env) {
jclass cls;
orig_ProcessImpl_forkAndExec = dlsym(RTLD_DEFAULT, "Java_java_lang_UNIXProcess_forkAndExec");
if (!orig_ProcessImpl_forkAndExec) {
orig_ProcessImpl_forkAndExec = dlsym(RTLD_DEFAULT, "Java_java_lang_ProcessImpl_forkAndExec");
cls = (*env)->FindClass(env, "java/lang/ProcessImpl");
} else {
cls = (*env)->FindClass(env, "java/lang/UNIXProcess");
}
JNINativeMethod methods[] = {
{"forkAndExec", "(I[B[B[BI[BI[B[IZ)I", (void *)&hooked_ProcessImpl_forkAndExec}
};
(*env)->RegisterNatives(env, cls, methods, 1);
printf("Registered forkAndExec\n");
}

View File

@ -0,0 +1,12 @@
//
// Created by mio on 2023/7/9.
//
#ifndef FOLD_CRAFT_LAUNCHER_FCL_HOOK_H
#define FOLD_CRAFT_LAUNCHER_FCL_HOOK_H
#include <jni.h>
void hookExec(JNIEnv *env);
#endif //FOLD_CRAFT_LAUNCHER_FCL_HOOK_H