Xposed检测与自定义Xposed

发布时间:2021-12-01 00:35:34



Xposed检测与自定义Xposed
前言:Xposed检测1、遍历App安装列表检测2、自造异常检测堆栈信息。3、检查关键Java方法是否变为native方法4、反射XposedHelper类和XposedBridge类5、检测Xposed相关文件6、Root检测7、安全建议

自定义Xposed一、修改XposedBridge.jar包名二、修改Xposed相关文件名三、修改installer包名




前言:

Xposed已经诞生很多年了,用的人多自然检测Xposed的app也多,同样的从Xposed衍生出去的一些自定义的框架也多。


Xposed检测

先对一些常见的检测手段做个概述,这方面的帖子很多,请自行查找资料。


1、遍历App安装列表检测

调用PackageManager的系统API来遍历App安装列表,辨别是否有安装Xposed Installer相关的软件包,比如de.robv.android.xposed.installer
这是最简单的检测,要过这个检测修改installer包名即可,后续内容中给出自定义方案。


2、自造异常检测堆栈信息。
Android系统启动过程中,init进程会去解析init.rc文件启动一系列的服务,其中就有app_process进程,在app_process执行过程中,会设置自身进程名为Zygote,启动com.android.internal.os.ZygoteInit.Main方法Xposed修改了app_process,会先启动de.robv.android.xposed.XposedBridge.Main方法,再由它去启动com.android.internal.os.ZygoteInit.Main方法,因此堆栈信息中会多出一些内容。

这里分两种堆栈,第一种函数没有被Hook(进程依然是被注入的)情况下

可以看到多了一个de.robv.android.xposed.XposedBridge.Main,要过这个检测就像上图一样,修改XposedBridge.jar包名和类名即可,后续内容中给出自定义方案。


第二种是函数被Hook情况下

出现在堆栈中的handleHookMethod、afterHookedMethod、beforeHookedMethod等常用函数都可以检测,相关帖子已经很多了,这里不再展开。要过这个检测的话,修改函数名即可。其中修改handleHookMethod,需要同步修改so层JNI代码。


3、检查关键Java方法是否变为native方法
Xposed把Method的nativefunc修改为它自己的处理函数,再这个函数中会回调Java层的handleHookMethod,处理函数钩子。但是只有native函数,虚拟机才会走nativefunc,所以Xposed会把Java函数的修饰符修改为native。通过反射调用Modifier.isNative(method.getModifiers())方法可以校验方法是不是native方法。要过这个检测的话,Hook getModifiers修改返回值即可。
4、反射XposedHelper类和XposedBridge类
Xposed中有几个比较常用的方法,findAndHookMethod等。通过反射找到要Hook的函数后会保存到XposedHelper类中的fieldCache、methodCache、constructorCache字段中。因此,可以通过反射遍历XposedHelper类中的fieldCache、methodCache、constructorCache变量,读取HashMap缓存字段也可以通过反射de.robv.android.xposed.XposedBridge的disableHooks字段来禁用Xposed要过这个检测,其实跟第二种检测一样,只要修改XposedBridge.jar包名和类名即可。
5、检测Xposed相关文件
/system/frameworks目录下的xposed.prop和XposedBridge.jar/system/lib目录下的libxposed_art.so主要也就是检测以上三个文件了。而检测可以通过读取proc/self/maps文件,遍历自身加载的库。也可以通过遍历PathClassLoader的pathList字段来检测。
6、Root检测
获取default.prop 中文件ro.secure的值不为1在各种目录下检测到有su程序其实吧,Xposed在Hook的时候是不需要root权限的,它只是在替换文件的时候需要Root权限。也就是一开始就把Xposed集成到系统中去的话,是可以不用Root也能Hook的。
7、安全建议

在art环境下,Xposed需要修改libart.so来为XposedBrige.jar提供服务
很少有修改libart.so里面的函数的,因此可以遍历libart.so的导出表,检测是否包含xposed字眼


自定义Xposed

首先你要会Android系统编译,原版Xposed框架编译,这个资料有很多,这里不再展开。
Xposed框架编译前先编译一次Android系统,可以编译user版本,不需要Root权限


一、修改XposedBridge.jar包名

用AndroidStudio修改包名很方便,因为你改完包名后他会自动修改所有的引用。

改完这个包名还不够,还需要修改清单文件里面的包名。



把编译后的app-release-unsigned.apk改为XposedBridge.jar


AOSP源码中frameworks/base/cmds/xposed
终端在这个目录下执行 grep ‘robv’ -r ./ 搜索关键字
把搜索到的以下内容替换包名即可

xposed_shared.h文件暂时先不动,其他3个文件6个地方改掉。
编译Xposed框架, 至于如何编译,资料很多,自行找查找资料
这里以nexus 5手机5.1的系统为例,编译完事后。


1、把aosp/out/sdk22/arm/files下的system整个文件夹替换到aosp/out/target/product/hammerhead下的system目录


2、把system/bin目录下的app_process32删掉,把app_process32_xposed改成app_process32
3、把之前编译的XposedBridge.jar放到system/framework下
4、终端回到源码根目录make snod 打包成镜像文件system.img 进行刷机
5、编译api.jar,写代码要用

6、由于XposedBridge.jar的包名修改了,所有Xposed模块里的引用也要相应修改。

到此就把Xposed集成到系统了,并且免RootHook


二、修改Xposed相关文件名


这个比较简单,修改画框的这几个文件名即可
编译Xposed框架后,先修改相关文件名,然后按第一部分的方法集成到系统即可。
修改了xposed.prop文件名后,会导致installer读不到这个文件而判定Xposed未安装,所以还要修改installer相关代码,请看后续内容。


三、修改installer包名

1、在GitHub下载installer工程,这里除了在AndroidStudio中修改包名,以及清单文件中的包名以外,还需要把gradle里面的applicationId修改掉。

2、还需要修改XposedBridge.jar工程里面的路径,因为他需要根据这个路径去读取要加载的模块列表

3、还记得自定义修改第二部分说的,修改了xposed.prop文件名后,会导致installer读不到这个文件而判定Xposed未安装吗?看下图就明白了

4、还记得自定义第一部分的时候说的暂时不改的那个文件么?

在aosp源码中把xposed_shared.h文件两个地方的路径改掉


5、按之前的方法编译,然后怼到手机里


在GitHub上找了个检测Xposed的app

从这里便能看出来这个app只是一个简单的检测,我们如果需要检测Xposed还需要其他的方法。比如Xposed检测中的第7条。很少有去修改libart.so的


修改后的Xposed我这里就不放出来了,大家自己动手丰衣足食吧。


技术交流QQ群 894821295

相关文档

  • 翅中怎么做法
  • 感受妈妈的爱作文200字
  • 午睡的好处和注意事项有哪些
  • 用酷狗怎么把cd转换成格式
  • SEO优化中网站主页百度快照消失的解决方法
  • 英语中表达客观事实用什么时态
  • Python下如何使用CGI
  • 开学典礼三年级作文 开学典礼创意方案主题
  • 天翼云怎么上传视频到上面?
  • 商标颜色有什么意义
  • 《弟子规》的全文
  • 七年级期中调研考试政治试卷
  • IDEA中打包镜像并上传部署运行(四)
  • 庆祝三八妇女节的小学作文
  • 单例模式 饿汉&懒汉&a双重校验锁
  • java传智书城设计报告_传智教育原创教材又双??获奖了!
  • 怎么理解差分方程的概念
  • 有关爱国的名言苟利国家,不求富贵
  • 什么食物有助于瘦脸
  • unix/linux系统编程
  • 有一个分数数列2/1,3/2,5/3,8/5,。。。。。求出这个数列的前20项之和
  • 电影秘密访客到底谁是鬼 秘密访客中谁才是好人
  • 怎么才能快速学好中小学英语
  • 广西周边自驾游行程攻略
  • 对学校共青团工作建议学校共青团红五月倡议书
  • 中国茶文化课题研究开题报告
  • 四年级童话作文:好斗的公鸡
  • 胡萝卜能做什么好吃的菜
  • 交通安全获奖手抄报
  • 岁末年初环境安全风险排查情况总结
  • 猜你喜欢

  • xx酒店行政部年度工作总结
  • 【精品】2018年制作乡村工作总结ppt【定制ppt】
  • 设施栽培黄瓜新品种“春秋王”的选育
  • 英语名师指导的答题技巧
  • 上海市交通运输和港口管理局关于推行《上海市汽车维修合同示范文
  • 初三化学物质的溶解性教学反思
  • 2018年高二生物复*方法-文档资料
  • 幼儿园小班个人工作计划样本与幼儿园小班个人工作计划样本2018汇编
  • 最新北师大版数学二年级上册《分糖果》ppt课件1(精品干货)
  • 2006年国内冷饮行业市场分析及2007年形势预测报告
  • 为什么 tcp/udp 的端口号可以重复
  • 2018-2022年中国电影市场发展预测及投资机会分析报告(目录)
  • Python刷leetcode108. 将有序数组转换为二叉搜索树
  • python中的模块和包
  • 第九章 网络计划技术
  • 苕皮回锅肉的做法苕皮回锅肉怎么做
  • 4保洁管理质量督导检查表
  • 山区地震勘探克服反射点离散叠加方法的构想
  • 2017-2023年中国锰矿石行业市场调查及投资前景预测报告(目录)
  • 初二叙事作文:我后悔了1
  • 休闲农业--国外休闲农业发展经典案例
  • 我的启蒙老师_三年级作文_2
  • 江西省金溪县第一中学2018_2019学年高二历史12月月考试题(含解析)
  • 部编版八年级语文上册9《三峡》 *题精选
  • 【推荐】2019秋九年级物理全册第十五章电流和电路第3节串联和并联课件新版新人教版.ppt
  • 高校信息公开制度化探析
  • 自已的事情自己做
  • 人教版小学数学二年级上册第一单元长度单位测试题
  • 广东省华南师大附中2011届高三临门一脚综合测试扫描版(数学理)
  • 中秋与数学有关的灯谜
  • ASTM D 1414—94(重新批准2003)
  • 2018国庆促销商场活动总结6篇
  • 关于学生体质健康测试中存在问题的思考
  • 2019年江苏安全员C2考核要点说明(最新)
  • 创新能源战略,发展风电产业
  • 厨房美食菜谱:绿豆玉米糊的做法
  • 【最新推荐】《按比分配解决问题》教学设计-实用word文档 (5页)
  • 英雄联盟劫的技能连招是什么
  • 我国城市湿地公园建设存在的问题及对策
  • 工作总结-外科医生个人年终工作总结范文 精品
  • 十三五重点项目-防护网机项目资金申请报告
  • 辛勤劳动能创造财富的故事:不务正业的木匠
  • 电脑版