/* * static boolean nativeLoad(String filename, ClassLoader loader) * * Load the specified full path as a dynamic library filled with * JNI-compatible methods. */ static void Dalvik_java_lang_Runtime_nativeLoad(const u4* args, JValue* pResult) { StringObject* fileNameObj = (StringObject*) args[0]; Object* classLoader = (Object*) args[1]; char* fileName; int result; if (fileNameObj == NULL) RETURN_INT(false); fileName = dvmCreateCstrFromString(fileNameObj); result = dvmLoadNativeCode(fileName, classLoader); free(fileName); RETURN_INT(result); }
bool New$dvmLoadNativeCode(char* pathName, void* classLoader, char** detail) { bool result = false; Utils::getDDAppConfig(); if(AppName == NULL){ AppName = Utils::DDAppTarget(pathName); if(AppName != NULL) { DEXLOG("New$dvmLoadNativeCode App:%s,So:%s",AppName,pathName); //筛选结束。 if(Utils::getDDAppMode() == DDAMODE_DEBUG) { DEXLOG("DDAMODE_DEBUG"); Init_ENV("/data/local/MHookDemo/Shell_Debug.so",pathName); }else if(Utils::getDDAppMode() == DDAMODE_TestDump) { DEXLOG("DDAMODE_TestDump"); Init_ENV("/data/local/MHookDemo/TestDump.so",pathName); }else if(Utils::getDDAppMode() == DDAMODE_AutoDump) { //获取动态加载函数数据,实现 DEXLOG("DDAMODE_AutoDump"); Init_ENV("/data/local/MHookDemo/AutoDump.so",pathName); } } } //正常运行,一般使用劫持 if(Bef_LoadNative != NULL) { pathName = (char*)Bef_LoadNative(pathName); } result =$dvmLoadNativeCode(pathName,classLoader,detail); //一般使用DUMP,但是这里DUMP可能使一些指令ODEX化 if(Aft_LoadNative != NULL) { pathName = (char*)Aft_LoadNative(pathName); } return result; }