core.c 1.73 KB
Newer Older
1256748979@qq.com committed
1 2 3 4
//
// Created by 12567 on 2021/3/31.
//

Fear1ess committed
5 6 7
#include <jni.h>
#include <syscall.h>
#include "wdun.h"
1256748979@qq.com committed
8
#include "cJSON.h"
1256748979@qq.com committed
9
#include "wd_jni.h"
Fear1ess committed
10
#include "collect.h"
1256748979@qq.com committed
11
#include "fake_dlfcn.h"
Fear1ess committed
12 13 14 15

//import asm symbol
IMPORTWDSYSCALL

Fear1ess committed
16 17 18 19 20
#define WDMAIN_CLASS_NAME              "com/reyun/wandun/WdMain"
#define WDMAIN_GETWDID_METHOD_NAME     "getWdIdNative"
#define WDMAIN_GETWDID_METHOD_SIG      "()Ljava/lang/String;"
#define WDMAIN_INIT_METHOD_NAME        "initNative"
#define WDMAIN_INIT_METHOD_SIG         "(Landroid/content/Context;)V"
Fear1ess committed
21

Fear1ess committed
22
jobject g_app_context = NULL;
Fear1ess committed
23

1256748979@qq.com committed
24 25
struct wd_funcs g_funcs;

Fear1ess committed
26 27
JNIEXPORT jstring jni_get_wdid(JNIEnv* env, jobject thiz) {
    do_collect(env);
1256748979@qq.com committed
28
    return NULL;
Fear1ess committed
29 30 31 32 33 34
}

JNIEXPORT void jni_init(JNIEnv* env, jobject thiz, jobject context) {
    if(!g_app_context) {
        g_app_context = (*env)->NewGlobalRef(env, context);
    }
Fear1ess committed
35 36 37 38 39
}

JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
    int pid = WDSYSCALL(SYS_getpid);
    JNIEnv* env = NULL;
Fear1ess committed
40
    if((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6) == JNI_OK) {
Fear1ess committed
41
        jclass cls = (*env)->FindClass(env, WDMAIN_CLASS_NAME);
Fear1ess committed
42 43
        JNINativeMethod methods[] = {{WDMAIN_GETWDID_METHOD_NAME, WDMAIN_GETWDID_METHOD_SIG, (void*)jni_get_wdid},
                                     {WDMAIN_INIT_METHOD_NAME, WDMAIN_INIT_METHOD_SIG, (void*)jni_init}};
Fear1ess committed
44
        (*env)->RegisterNatives(env, cls, methods, sizeof(methods)/sizeof(JNINativeMethod));
Fear1ess committed
45
        (*env)->DeleteLocalRef(env, cls);
Fear1ess committed
46
    }
1256748979@qq.com committed
47 48 49 50 51 52 53

    //find lic needed symbol
    struct so_info* si = fake_dlopen("libc.so", 0);
    g_funcs.wd_popen = fake_dlsym(si, "popen");
    g_funcs.wd_pclose = fake_dlsym(si, "pclose");
    g_funcs.wd_system_property_get = fake_dlsym(si, "__system_property_get");
    fake_dlclose(si);
Fear1ess committed
54 55 56
    return JNI_VERSION_1_6;
}