zoukankan      html  css  js  c++  java
  • android hook native函数

    大概2年前写的代码,今天突然要用到,找了半天,这里记录下

    用到的库: https://pan.baidu.com/s/1htuUQX2

    #include <jni.h>
    #include <string>
    #include <dlfcn.h>
    
    typedef  int  (*  pfnMSHookFunction)(void* result, void* a2, void** a3);
    
    int Aaaaaa(jint a, jint b)
    {
    
        int bRet = 0;
        bRet = a/3;
        return  bRet;
    }
    
    extern  "C"
    JNIEXPORT
    
    int  Java_aaa_aaa_MainActivity_test(jint a,jint b)
    {
        FILE *fp = fopen("1.txt", "rb");
        if (0 != fp)
        {
            printf("111");
        }
    
      return   Aaaaaa(a, b);
    }
    
    
    typedef FILE*    (*pfnmyfopen)(const char *, const char *);
    pfnmyfopen porg = 0;
    
    //fake 函数
    FILE    *myfopen(const char * name, const char * flag)
    {
        FILE* fret = 0;
        fret =  porg(name,flag);
        return  fret;
    }
    
    //这里用的是substrate
    void initHook()
    {
       void* phandle =dlopen("libhook.so",RTLD_NOW );
        pfnMSHookFunction pmsHook=(pfnMSHookFunction)dlsym(phandle,"MSHookFunction");
        pmsHook((void*)fopen,(void*)myfopen,(void**)&porg);
    
    
    }
    
    jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
    {
        JNIEnv* env = 0;
        jint result = -1;
    
        if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
        {
            return -1;
        }
    
        initHook();
    
        result = JNI_VERSION_1_4;
    
        return result;
    }
  • 相关阅读:
    顺时针打印矩阵
    topK问题
    9. Palindrome Number(回文数)
    Spinner用法详解
    翻转字符串
    清雨的自助餐(斐波那契数列的应用)
    2. Add Two Numbers(链表尾插法)
    assign和weak的区别
    14-最长公共前缀
    12 13-int与罗马数字转换
  • 原文地址:https://www.cnblogs.com/fply/p/8426300.html
Copyright © 2011-2022 走看看