查看原文
其他

定制Xposed框架

世界美景 看雪学院 2021-03-07

本文为看雪论坛优秀文章

看雪论坛作者ID:世界美景



由于很多App开始针对XP做对应的检测如微信、支付宝、钉钉等,所以使用定制化的方式隐藏框架。


常见检测方法



1、由于Xposed的hook,是通过so修改被hook的方法为native来实现的,所以检测方也可以通过检测方法是否变成了native来达到检测的目的
Throwable.class.getDeclaredMethod(“getStackTrace” 是否Nativ方法。

2、StackTraceElement getClassName 检测是否存在 de.robv.android.xposed. com.android.internal.os.ZygoteInit com.saurik.substrate. getMethodName检测 handleHookedMethod main invoked。

3、检查XposedHelper的成员fieldCache,methodCache,constructorCache。

4、检查xposed的文件。

5、检查安装包。

6、检查/system/lib是否有xposed文件
/system/lib/libxposed_art.so 
/system/lib64/libxposed_art.so。

7、检查/system/framework/XposedBridge.jar。

8、通过代码抛出一个异常,在堆栈中检查是否含有  de.robv.android.xposed.XposedBridge之类的
检查com.android.internal.os.ZygoteInit是否出现了两次。

9、检查环境变量CLSAAPATH=/system/framework/XposdedBridge.jar。

10、检查/proc/self/maps 通过读取shell命令/proc/pid(应用进程id)/maps 可以拿到当前上下文的so和jar列表,查找Xposed相关。

11、通过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的修改资料几乎没有或者说跟没有差不多,所以有了这篇文章。


在开始之前你必须去按照这篇博客 
点这里:
https://www.jianshu.com/p/6471bab49cb1
这个也行:
https://juejin.im/post/5be8dff2f265da61417118ed
先去编译Android源码之后编译下官方的Xp(坑很多。要配的环境非常多,要有足够的耐心。)

完成上一步后就可以开始进行对应的修改。

>>>>

1、XposedInstaller.apk


负责安装Xp环境,其实就是下载与手机cpu架构SDK对应的zip,然后刷入手机和管理模块。

环境:androidstudio,网络对应的资料都有我就随便写写。

包名:随便改一个 AS直接改就行。

名称:随便改一个。



>>>>

2、XposedBridge-art.jar


给开发者提供对应的API支持,底层实现jni调用libxposed-art.so的native方法。

环境androidstudio网络也有资料,随便写写。

原始包名:de.robv.android.xposed,随便改一个。

原始名称:XposedBridge.jar,随便改一个。


>>>>

3、Xposed


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






>>>>

4、Xposed-Tools


Xp框架的编译器,打包出可以刷机的zip。以下两个是打包脚本和刷机包脚本文件内容改成你对应的就好了,这点网上根本没有资料,全靠自己一个文件一个文件看巨坑。

如果有源码不准备刷机安装Xp单独改buid.pl就好了。

flash-script.sh不改刷机就会报错,缺少xpsoed.prop。







思维导图:



>>>>

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框架的源码,由于网上资料过少经历了不少坑,很多都是自己摸索出来了,我觉得应该有不少人有这种需求所以写了这篇文章。

希望能够帮助到你,有什么问题可以论坛联系我。




- End -






看雪ID:世界美景

https://bbs.pediy.com/user-735880.htm 


*本文由看雪论坛  世界美景  原创,转载请注明来自看雪社区




推荐文章++++

通过捕获段错误实现的自定义linker

Xposed高级用法 实现Tinker热修复

连连看逆向

从“短信劫持马”的制作来谈App安全

入门级加固——3种加固方式学习记录



进阶安全圈,不得不读的一本书






公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



“阅读原文”一起来充电吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存