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

前言

众所周知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,

  • 先用xposed hook住原APP加载Bso的流程,不让其加载
  • 然后读到Aso的路径,让原APP加载Aso,实现了替换
  • 然后Aso再去调用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

总结及提醒:

  • 本文还是要与github项目一同看才好理解。
  • 这个只支持32位的hook。64位不可。
    • 包括我的设备检测的项目也是64位的。也不行。所以要强制安装32位app 命令如下:
    • adb install --abi armeabi-v7a -r app-debug.apk 编译好不运行 而是用这个命令安装
  • so hook 方案 还有很多
    • Cydia Substrate
    • xHook 这是爱奇艺开发的got表hook框架 原理又不一样了
    • Dobby
    • android-inline-hook 这个跟ele7的同名 但是是字节跳动开发的 而且支持64位。
    • SandHook
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容