美文网首页
AndroidHook学习和应用

AndroidHook学习和应用

作者: RoFF | 来源:发表于2016-07-14 17:39 被阅读661次

    近期要做网络请求数据统计(主要是为了监控频繁请求和流量异常)。
    由于项目中使用了多种网库发送请求,有HttpClient,HttpUrlConnection,Volley等,如果只是在所有请求发送和返回的地方加上统计,未免显得太low,工作量也大。
    于是想到用Hook的方法,将所有发送和返回请求的地方替换成我们自己的方法,就能对其为所欲为。

    在Android里提到Hook就不能不提两个大神级的项目,Xposed和Cydia Substrate,它们功能太强大,运行的条件也苛刻,都需要设备root。只好敬而远之。

    Legend https://github.com/asLody/legend

    《解析 dex 文件结构 - 索引区和数据区(三) - ClassDefs》(http://kiya.space/2015/11/21/parse-dex-file-part-classdefs/)
    《Dex文件格式详解》(http://www.blogfshare.com/dex-format.html)

    Hook的原理
    《Dalvik虚拟机原理及Xposed hook原理》(http://www.jianshu.com/p/b29a21a162ad)

    #######
    实用功能
    #######
    1,在native层执行java层的方法
    方法1:
    dalvik中使用Thread来执行方法
    AOSP/dalvik/vm/interp/Stack.c
    void dvmCallMethod(Thread* self, const Method* method, Object* object, ....) {
    ......
    }

    Thread如何获取?

    Thread* self = dvmThreadSelf();

    方法2:
    通用,使用JNIEnv来执行
    JNIEnv::CallObjectMethod(jclass object, jmethodID method);
    其中method的获取:
    jmethodID method = JNIEnv::GetMethodID(jclass, "method_name", xxxx);

    相关文章

      网友评论

          本文标题:AndroidHook学习和应用

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