(2)com.ijinshan.duba:Def;广告规则和扫描病毒信息由该进程通过Provide;(2)com.ijinshan.duba.roo;该进程以ROOT身份运行,该进程提供了手机毒霸其;(4)第三方(injectedprocess)被;通过ptrace()注入到第三方程序的代码,ks;三、JAVA虚拟机hook实现原理;目前Android进程代
(2)com.ijinshan.duba:DefendService进程
广告规则和扫描病毒信息由该进程通过Provider提供。
(2)com.ijinshan.duba.rootkeeper进程
该进程以ROOT身份运行,该进程提供了手机毒霸其它进程运行需要root身份才能执行的命令的Binder接口,第三方程序进程的代码注入由该进程完成。
(4)第三方(injected process)被注入程序进程
通过ptrace()注入到第三方程序的代码,ksremote.jar和libksrootclient.so完成java虚拟机hook和底层Socket hook。
三、JAVA虚拟机hook实现原理
目前Android进程代码的注入都是靠ptrace函数来完成。ptrace进程后完成底层函数的重定向。金山毒霸代码注入包括两部分:
1、底层C函数HOOK
2、JAVA虚拟机HOOK
代码注入基本流程如下:
1、com.ijinshan.duba.rootkeeper进程ptrace第三方进程,并注入libksrootclient.so文件
2、libksrootclient.so代码完成底层C函数hook并调用ksremote.jar代码,ksremote.jar完成java虚拟机hook
(1)C代码如何完成对java代码的调用呢?
基本代码实现如下:
[cpp] view plaincopy
1. int (*callStatic)(const char* className, const char* methodName);
2. JavaVM* (*getJavaVM)();
3. JNIEnv* (*getJNIEnv)();
4.
5. void* handle = dlopen("/system/lib/libandroid_runtime.so", RTLD_NOW);
6.
7. getJNIEnv = dlsym(handle, "_ZN7android14AndroidRuntime9getJNIEnvEv");
8. JNIEnv* env = getJNIEnv();
9.
10. jclass classloaderClass = (*env)->FindClass(env,"java/lang/ClassLoader");
11. jmethodID getsysloaderMethod = (*env)->GetStaticMethodID(env,classloaderClass<span style="font-family: Arial, Helvetica, sans-serif;"> </span>, "getSystemClassLoader", "()Ljava/lang/ClassLoader;");
12. jobject loader = (*env)->CallStaticObjectMethod(env, classloaderClass, getsysloaderMethod);
13.
14. jstring dexpath = (*env)->NewStringUTF(env, "dex文件路径");
15. jstring dex_odex_path = (*env)->NewStringUTF(env,"odex文件路径");
16. jclass dexLoaderClass = (*env)->FindClass(env,"dalvik/system/DexClassLoader");
17. jmethodID initDexLoaderMethod = (*env)->GetMethodID(env, dexLoaderClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V");
18. jobject dexLoader = (*env)->NewObject(env, dexLoaderClass, initDexLoaderMethod,dexpath,dex_odex_path,NULL,loader);
19.
20. jmethodID findclassMethod = (*env)->GetMethodID(env,dexLoaderClass,"findClass","(Ljava/lang/String;)Ljava/lang/Class;");
21. jstring javaClassName = (*env)->NewStringUTF(env,"加载类名");
三亿文库3y.uu456.com包含各类专业文献、专业论文、行业资料、生活休闲娱乐、中学教育、幼儿教育、小学教育、高等教育、文学作品欣赏、应用写作文书、56金山手机毒霸工作原理等内容。
本文介绍了金山手机毒霸的工作原理,重点讲述了广告规则及病毒扫描信息提供的DefendService进程、以ROOT身份运行的rootkeeper进程及其提供的Binder接口,以及通过ptrace注入第三方程序的实现细节,包括C函数HOOK和JAVA虚拟机HOOK。
3209

被折叠的 条评论
为什么被折叠?



