void hook_dlopen(int api_level) { void *symbol = NULL; if (api_level > 23) { if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfoPv", "linker", (unsigned long *) &symbol) == 0) { inlineHookDirect((unsigned int) symbol, (void *) new_do_dlopen_V24, (void **) &orig_do_dlopen_V24); } } else if (api_level >= 19) { if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfo", "linker", (unsigned long *) &symbol) == 0) { inlineHookDirect((unsigned int) symbol, (void *) new_do_dlopen_V19, (void **) &orig_do_dlopen_V19); } } else { if (findSymbol("__dl_dlopen", "linker", (unsigned long *) &symbol) == 0) { inlineHookDirect((unsigned int) symbol, (void *) new_dlopen, (void **) &orig_dlopen); } } if (!symbol) { HOOK_SYMBOL(RTLD_DEFAULT, dlopen); } }
void IOUniformer::startUniformer(int api_level) { HOOK_SYMBOL(RTLD_DEFAULT, kill); HOOK_SYMBOL(RTLD_DEFAULT, __getcwd); HOOK_SYMBOL(RTLD_DEFAULT, chdir); HOOK_SYMBOL(RTLD_DEFAULT, truncate); HOOK_SYMBOL(RTLD_DEFAULT, __statfs64); HOOK_SYMBOL(RTLD_DEFAULT, execve); // * HOOK_SYMBOL(RTLD_DEFAULT, stat); // * HOOK_SYMBOL(RTLD_DEFAULT, access); // * HOOK_SYMBOL(RTLD_DEFAULT, readlink); /** * Using MSHook to Hook `unlink` will produce crash(ARM/THUMB). * MSHook BUG??? * So we use the new hook lib. */ HOOK_SYMBOL(RTLD_DEFAULT, unlink); HOOK_SYMBOL(RTLD_DEFAULT, __open); HOOK_SYMBOL(RTLD_DEFAULT, mkdir); HOOK_SYMBOL(RTLD_DEFAULT, chmod); HOOK_SYMBOL(RTLD_DEFAULT, lstat); HOOK_SYMBOL(RTLD_DEFAULT, link); HOOK_SYMBOL(RTLD_DEFAULT, symlink); HOOK_SYMBOL(RTLD_DEFAULT, mknod); HOOK_SYMBOL(RTLD_DEFAULT, rmdir); HOOK_SYMBOL(RTLD_DEFAULT, chown); HOOK_SYMBOL(RTLD_DEFAULT, rename); HOOK_SYMBOL(RTLD_DEFAULT, utimes); HOOK_SYMBOL(RTLD_DEFAULT, fstatat); HOOK_SYMBOL(RTLD_DEFAULT, fchmodat); HOOK_SYMBOL(RTLD_DEFAULT, symlinkat); HOOK_SYMBOL(RTLD_DEFAULT, readlinkat); HOOK_SYMBOL(RTLD_DEFAULT, unlinkat); HOOK_SYMBOL(RTLD_DEFAULT, linkat); HOOK_SYMBOL(RTLD_DEFAULT, utimensat); HOOK_SYMBOL(RTLD_DEFAULT, __openat); HOOK_SYMBOL(RTLD_DEFAULT, faccessat); HOOK_SYMBOL(RTLD_DEFAULT, mkdirat); HOOK_SYMBOL(RTLD_DEFAULT, renameat); HOOK_SYMBOL(RTLD_DEFAULT, fchownat); HOOK_SYMBOL(RTLD_DEFAULT, mknodat); hook_dlopen(api_level); HOOK_SYMBOL(RTLD_DEFAULT, dlsym); #if defined(__i386__) || defined(__x86_64__) // Do nothing #else GodinHook::NativeHook::hookAllRegistered(); #endif }
void IOUniformer::startUniformer(int api_level, int preview_api_level) { HOOK_SYMBOL(RTLD_DEFAULT, kill); HOOK_SYMBOL(RTLD_DEFAULT, __getcwd); HOOK_SYMBOL(RTLD_DEFAULT, truncate); HOOK_SYMBOL(RTLD_DEFAULT, __statfs64); HOOK_SYMBOL(RTLD_DEFAULT, execve); HOOK_SYMBOL(RTLD_DEFAULT, __open); if ((api_level < 25) || (api_level == 25 && preview_api_level == 0)) { HOOK_SYMBOL(RTLD_DEFAULT, utimes); HOOK_SYMBOL(RTLD_DEFAULT, mkdir); HOOK_SYMBOL(RTLD_DEFAULT, chmod); HOOK_SYMBOL(RTLD_DEFAULT, lstat); HOOK_SYMBOL(RTLD_DEFAULT, link); HOOK_SYMBOL(RTLD_DEFAULT, symlink); HOOK_SYMBOL(RTLD_DEFAULT, mknod); HOOK_SYMBOL(RTLD_DEFAULT, rmdir); HOOK_SYMBOL(RTLD_DEFAULT, chown); HOOK_SYMBOL(RTLD_DEFAULT, rename); HOOK_SYMBOL(RTLD_DEFAULT, stat); HOOK_SYMBOL(RTLD_DEFAULT, chdir); HOOK_SYMBOL(RTLD_DEFAULT, access); HOOK_SYMBOL(RTLD_DEFAULT, readlink); HOOK_SYMBOL(RTLD_DEFAULT, unlink); } HOOK_SYMBOL(RTLD_DEFAULT, fstatat); HOOK_SYMBOL(RTLD_DEFAULT, fchmodat); HOOK_SYMBOL(RTLD_DEFAULT, symlinkat); HOOK_SYMBOL(RTLD_DEFAULT, readlinkat); HOOK_SYMBOL(RTLD_DEFAULT, unlinkat); HOOK_SYMBOL(RTLD_DEFAULT, linkat); HOOK_SYMBOL(RTLD_DEFAULT, utimensat); HOOK_SYMBOL(RTLD_DEFAULT, __openat); HOOK_SYMBOL(RTLD_DEFAULT, faccessat); HOOK_SYMBOL(RTLD_DEFAULT, mkdirat); HOOK_SYMBOL(RTLD_DEFAULT, renameat); HOOK_SYMBOL(RTLD_DEFAULT, fchownat); HOOK_SYMBOL(RTLD_DEFAULT, mknodat); // hook_dlopen(api_level); #if defined(__i386__) || defined(__x86_64__) // Do nothing #else GodinHook::NativeHook::hookAllRegistered(); #endif }