定制Xposed框架(干货)

由于很多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 (坑很多 要配的环境非常多 要有足够的耐心 )
上一步完成后就可以开始进行对应的修改

1 XposedInstaller.apk

负责安装Xp环境 其实就是下载与手机cpu架构SDK对应的zip 然后刷入手机和管理模块
环境 androidstudio 网络对应的资料都有我就随便写写
包名 随便改一个 AS直接改就行
名称 随便改一个

XposedApp.java修改
BASE_DIR_LEGACY/data/data/ 修改后的包名
BASE_DIRdata/user_de/0/ 修改后的包名
XPOSED_PROP_FILES/su/xposed/XP的配置文件.prop 随便改个名字

2 XposedBridge-art.jar

给开发者提供对应的API支持 底层实现 jni调用libxposed-art.so 的native方法
环境 androidstudio 网络也有资料随便写写
原始包名:de.robv.android.xposed 随便改一个
原始名称:XposedBridge.jar 随便改一个

XposedInit.java修改
INSTALLER_PACKAGE_NAME改成你上面修改的APK包名

3 Xposed

给Xpbridge提供API支持和调用了很多android-art的方法以及最重要的替换android zygote(app_process)

libxposed_common.h改成你修改后的XposedBridge包名
CLASS_XPOSED_BRIDGE更改前: de/robv/android/xposed /XposedBridge
CLASS_ZYGOTE_SERVICE更改前:de/robv/android/xposed /services/ZygoteService
CLASS_FILE_RESULT更改前:de/robv/android/xposed /services/FileResult
xposed.h修改
XPOSED_PROP_FILE/system/Xp的配置文件.prop 改成你之前APK时候改的
XPOSED_JAR/system/framework/开发者jar包名称.jar
XPOSED_LIB_ARTlibxposed_art.so 随便改个名字如 libtest_art.so
XPOSED_CLASS_DOTS_ZYGOTEde.robv.android.xposed .XposedBridge 改成你之前定义的包名
XPOSED_CLASS_DOTS_TOOLSde.robv.android.xposed. XposedBridge$ToolEntryPoint
xposed_service.cpp改成你修改后的XposedBridge包名
IMPLEMENT_META_INTERFACE更改前: de.robv.android.xposed .IXposedService
xposed_shared.h改成你修改后的APK包名
XPOSED_DIR更改前: /data/user_de/0/de.robv.android.xposed.installer /
XPOSED_DIR更改前: /data/data/de.robv.android.xposed.installer /
ART.mk libxposed_art.cpp修改成你定义的AS右键直接改名称 记得把.mk文件里的也改了
libxposed_artlibtest_art.so

在这里插入图片描述

4 Xposed-Tools

Xp框架的编译器 打包出可以刷机的zip 以下两个是打包脚本和刷机包脚本文件内容改成你对应的就好了 这点网上根本没有资料 全靠自己一个文件一个文件看巨坑
如果有源码不准备刷机安装Xp单独改buid.pl就好了
flash-script.sh不改刷机就会报错 缺少xpsoed.prop

build.pl flash-script.sh改成你修改后的XposedBridge包名
xposed.prop修改成你定义的XP配置文件
XposedBridge.jar修改成你定义的开发者jar文件名称
libxposed_art修改成你定义的so名称 libtest_art

在这里插入图片描述
在这里插入图片描述

思维导图
在这里插入图片描述

5 编译与运行

把Xposed项目复制到android源码/frameworks/base/cmds 下
在去下载与你编译的android源码对应的xpsoed版ART 进行替换
xposedtools 开始编译 静静等待就好了 我这里编译了 android5.1 android 6.1 arm arm64 x86手机可用的刷机包
在这里插入图片描述
数据线连接手机把对应的刷机包push到手机里 adb reboot recovery 选择刷机包安装即可 手机重启收即可看到
注意要使用定制版本的Xp 项目里的jar包一定得是你定制后的其他不用动
在这里插入图片描述
在这里插入图片描述

总结

在做之前认真复习了一遍zygote和Xposed框架的源码 由于网上资料过少经历了不少坑 很多都是自己摸索出来了 我觉得应该有不少人有这种需求所以写了这篇文章 希望能够帮助到你 有什么问题可以私信我

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值