美文网首页
VirtualApp hook so及activity回调

VirtualApp hook so及activity回调

作者: LiuJP | 来源:发表于2019-01-21 17:14 被阅读13次

先推几篇VA原理

  1. virtualapp
  2. https://blog.csdn.net/ganyao939543405/article/details/76146760?ref=myread

VA项目地址:

https://github.com/asLody/VirtualApp

IOUniformer.cpp hook so

void inlineHookSymbol(void *sohandle, const char *symbol, void *replace, void **result) {
 void *address = dlsym(sohandle, symbol);
  if (address) {
    MSHookFunction(address, replace, result);
  }
}
void *(*org_runtime_invoke)(void *a_method, void *a_obj, void **a_params, int **a_exc) = NULL;

void *new_runtime_invoke(void *a_method, void *a_obj, void **a_params, int **a_exc) {
//    register_Class_From_Image(a_method);
//    runInMonoInvokeRuntimeHooker(a_method, a_obj, a_params);
return org_runtime_invoke(a_method, a_obj, a_params, a_exc);
}


void onSoLoaded(const char *name, void *handle) {
ALOGE("%s %s %d", __FUNCTION__, name, handle);
if (strstr(name, "libil2cpp.so"))
    inlineHookSymbol(handle, "il2cpp_runtime_invoke", (void *) &new_runtime_invoke,
                     (void **) &org_runtime_invoke);
}

int findSymbol(const char *name, const char *libn,
           unsigned long *addr) {
int ret = find_name(getpid(), name, libn, addr);
return ret;
}


int hook_dlopen_rom24(void *symbol, const char *rom) {
//hw mate8_8.0
int ret = findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfoPKv", "linker",
                     (unsigned long *) &symbol);
if (ret == 0) {
    MSHookFunction(symbol, (void *) new_do_dlopen_V24,
                   (void **) &orig_do_dlopen_V24);
}
ALOGE("%s %s %d", __FUNCTION__, rom, ret);
return ret;
}

void hook_dlopen(int api_level, const char *rom) {
void *symbol = NULL;
if (api_level > 23) {

    if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfoPv", "linker",
                   (unsigned long *) &symbol) == 0) {
        MSHookFunction(symbol, (void *) new_do_dlopen_V24,
                       (void **) &orig_do_dlopen_V24);
    } else {
        hook_dlopen_rom24(symbol, rom);
    }

} else if (api_level >= 19) {
    if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfo", "linker",
                   (unsigned long *) &symbol) == 0) {
        MSHookFunction(symbol, (void *) new_do_dlopen_V19,
                       (void **) &orig_do_dlopen_V19);
    }
} else {
    if (findSymbol("__dl_dlopen", "linker",
                   (unsigned long *) &symbol) == 0) {
        MSHookFunction(symbol, (void *) new_dlopen, (void **) &orig_dlopen);
    }
}
}

activity回调

com.lody.virtual.client.ipc.VActivityManager

   public void onActivityResumed(Activity activity) {
    VLog.e("ga",activity.getClass().getName());
    IBinder token = mirror.android.app.Activity.mToken.get(activity);
    try {
        getService().onActivityResumed(VUserHandle.myUserId(), token);
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

activity 就是 app 的activity


壹杯敬月光

相关文章

网友评论

      本文标题:VirtualApp hook so及activity回调

      本文链接:https://www.haomeiwen.com/subject/pyzcjqtx.html