由于很多APP开始针对XP做对应的检测如微信 支付宝 钉钉等 所以使用定制化的方式隐藏框架
常见检测方法
一. 由于Xposed的hook,是通过so修改被hook的方法为native来实现的,所以检测方也可以通过检测方法是否变成了native来达到检测的目的 Throwable.class.getDeclaredMethod(“getStackTrace” 是否Nativ方法
二. StackTraceElement getClassName 检测是否存在 de.robv.android.xposed. com.android.internal.os.ZygoteInit com.saurik.substrate. getMethodName检测 handleHookedMethod main invoked
三. 检查XposedHelper的成员fieldCache,methodCache,constructorCache
四. 检查xposed的文件
五. 检查 安装包
六. 检查 /system/lib 是否有xposed文件 /system/lib/libxposed_art.so /system/lib64/libxposed_art.so
七. 检查 /system/framework/XposedBridge.jar
八. 通过 代码抛出一个异常,在堆栈中检查是否含有 de.robv.android.xposed.XposedBridge 之类的
检查com.android.internal.os.ZygoteInit 是否出现了两次
九. 检查环境变量CLSAAPATH=/system/framework/XposdedBridge.jar
十. 检查 /proc/self/maps 通过读取 shell 命令 /proc/pid(应用进程id)/maps 可以拿到当前上下文的so和jar列表,查找Xposed相关
十一. 通过loadClass 检测 de.robv.android.xposed.XposedHelpers de.robv.android.xposed.XposedBridge
几种隐藏方案
1 java层检测XP特征值 可以根据应用获取XP特质值的方法定制HOOK修改隐藏 或者通用性HOOK代码解决 但只限于Java层 so中读取Xp文件就无效了
2 so 层检测如果能逆向代码在java层中找到上传的方法 也可以HOOK形式隐藏 缺点每个APP都得找而且检测代码一变就得改 及其不灵活
3 定制化XP框架 修改所有特征值也可以达到隐藏的目的
定制Xp是最好的解决办法 网络有一些相关资料 但都没有干货或者不全 网上暴露出来的基本上只教了XposedInstall XposedBridge的修改 在往下native层 Xposdtools 的修改资料几乎没有或者说跟没有差不多 所以有了这篇文章
在开始之前你必须去按照这篇博客 点这里 这个也行 先去编译android源码之后编译下官方的Xp (坑很多 要配的环境非常多 要有足够的耐心 )
完成上一步后就可以开始进行对应的修改
负责安装Xp环境 其实就是下载与手机cpu架构SDK对应的zip 然后刷入手机和管理模块
环境 androidstudio 网络对应的资料都有我就随便写写
包名 随便改一个 AS直接改就行
名称 随便改一个
给开发者提供对应的API支持 底层实现 jni调用libxposed-art.so 的native方法
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)