手机毒霸

(2)com.ijinshan.duba:Def;广告规则和扫描病毒信息由该进程通过Provide;(2)com.ijinshan.duba.roo;该进程以ROOT身份运行,该进程提供了手机毒霸其;(4)第三方(injectedprocess)被;通过ptrace()注入到第三方程序的代码,ks;三、JAVA虚拟机hook实现原理;目前Android进程代


1 2 3

 

(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金山手机毒霸工作原理等内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值