安卓逆向

安卓逆向第六篇-InlineHook(ele7版)

2022-02-23  本文已影响0人  萌木盖

前言

众所周知xposed只能hook java层。
那就不能hook so吗?
那就得搞xposed+
可+的方案有点多,今天来试试ele7的InlineHook

参考视频及项目及文献

Android Inline Hook详解
想看原理点这个↑
(安卓逆向进阶视频)03_ART实现XpHookNaitive兼容安卓10
想看视频点这个↑
下面是参考的github项目:
ele7的原项目
ele7的dome项目
珍惜的dome 这个主要解决的有个安卓版本不同注入方式不同的问题

人话讲原理

就是用C++写了个so文件,此处命名为Aso,原APP要调用的so此处命名为Bso,

方案开始

首先是hook的目标,我选择的是我自己的设备检测github项目

\color{red}{本项目为64位 hook不到 文末有解决方案}
不出意外我会更新。想要这个版本可以找历史提交记录 找到2022年2月23日提交的那版。
deviceDetection 设备检测---检测鸡

deviceDetection首页
大概样子就长这样,然后箭头指向的值就是我要改的值,图中是已经改好的。本来就没调试应该是0 我给改成了339.

然后是我的hook项目

https://github.com/mengmugai/HookTracerPid

讲解

因为代码都在里面的自己看就行,这里大概说一下。

生成so

首先是CMakeLists.txt文件定义好,生成的so名字就会为libLVmp.so

image.png

版本区别

因为android 9.0以上没有 doLoad 方法,使用nativeLoad方法了。所有要进行判断。

        int version = android.os.Build.VERSION.SDK_INT;
        Log.e("当前系统 版本号 " + version);
        //android 9.0没有 doLoad 方法
        if (version >= 28) {
                    hook Runtime.class 的 nativeLoad方法{  
                              if (如果是我要hook的so文件则){
                                        加载我的`libLVmp.so`
                                }
                    }
        else{
                    hook Runtime.class 的 doLoad方法{  
                              if (如果是我要hook的so文件则){
                                        加载我的`libLVmp.so`
                                }
                    }            


      }

大概就是这样。真是代码可以到github里面去看。

c++开发

JNI目录结构
主要是把inlinehook目录搞来,然后我们主要是写main.cpp
首先加载走了JNI_OnLoad方法,然后调用into_TestSo
image.png
image.png
然后就是我写的替换它的方法
int My_Java_com_mmg_detection_utils_DebugUtils_getTracerPid(JNIEnv *env, jobject thiz) {
    int ret_value = Source_Java_com_mmg_detection_utils_DebugUtils_gettracerpid(env, thiz);
    LOG(ERROR) << "返回值为:";
//    LOGE(ret_value)
    int my_ret_value=339;
    if (ret_value!=0){
        my_ret_value=0;
    }

    return my_ret_value;
}

手机就能看到改成339了。就是最开始那个图。
还有就是上面那个getAppSo()方法也不是原有的 自己写的

image.png

总结及提醒:

上一篇 下一篇

猜你喜欢

热点阅读