抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

article/2025/5/3 4:27:16

抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

标签: 2018


一句话概括本文

分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法,然后一步步
Hook掉对应代码,以此去掉恶心的重复弹出警告对话框。


引言

因为有带饭的习惯,每周上班前的一天都会想好这周要做的菜式,然后京东
到家采购一波食材。昨天下午当我习惯性地打开下厨房,然后:

每打开一个新的页面就弹一次对话框,哇,是真的烦!我TM

你说我Hook了下厨房,这样整我没话说,但是我只是装Xposed只是Hook
一下微信,这就很烦啦,行行行,那我只能也Hook下下厨房咯,就Hook掉你检测
是否安装了Xposed方法总行了吧!于是有了这篇文章~


胡乱分析

先定位一波方法咯,接上手机,打开 monitor ,新版的AS貌似连入口都
隐藏了,你需要到 sdk的tools目录 下找下,windows下的是 monitor.bat

先获取一波下厨房的包名:com.xiachufang

接着找到对应的进程:

第一个就不用说了,接着跟踪一波方法调用,点入下一个页面弹出
Xposed提示对话框,点击确定后为止:

接着搜索:xposed 逐个排除,不难定位到(包名):

这个 XposedDetectionUtil 类十有八九就是判断是否安装了Xposed
的工具类了,接着用Jadx反编译工具,反编译一波apk,接着用AS打开
反编译后的工程!
(PS:可能是采用了加固或者什么手段,不是所有代码都能正确反编译
出来的!!!)

反编译后的项目结构如下:

呃…,有点太过于耿直了吧,类名啥的也不混淆一下…
打开XposedDetectionUtil类,代码如下:


z
映入眼帘的入手点:

sXposedInstalledisXposedInstalled()方法,初步猜测前者是一个标记,
默认true,代表手机装了xposed,应该是在进行程序的时候通过一些逻辑判断后
去修改这个标志变量,然后Activity基类进入前先获取这个变量,然后决定是否
弹出Xposed警告对话框。

得出最简单的hook方法就是直接把这个变量的值修改为true。写代码试试~


Hook标志位静态变量

代码非常简单,修改权限,然后设置下标志位为true

模块安装上,重启下,接着打开下厨房,但是程序却意外闪退了,看下Log:

校验错误异常?猜测是在错误的位置修改了本地寄存器的变量,
要另外去折腾smali,脑壳疼(反编译与逆向分析java.lang.VerifyError总结)
放弃改变量这个套路了,得从另一个入手点切入。


继续胡乱分析

接下来看下下面的这段代码:

这里要注意,静态代码块静态变量 的初始化都发生在类装载
的时候,级别是相同的,会按照代码顺序进行初始化。

这段代码是检验手机是否安装了xposed的一个套路之一,逻辑是:

XposedDetectionUtil 类被调用时,加载,然后显式抛出一个异常,
然后catch这个异常,通过e.getStackTrace获得一个异常调用的堆栈信息
然后遍历这个堆栈,如果出现了包含XposedBridge的类名或者方法,就说明
用户的手机安装了xposed。

这里其实有个小疑问,为何if里没有代码,是因为反编译没有获得完整代码,
还是这样做就可以了,有知道的看官可以告知下!!!

看到这里,应该基本会想到一个套路:Hook掉getStackTrace()方法
点进去看下这个方法的具体详情:

看完之后,很容易Get到几个点:

  • 1.Hook的完整类名是:java.lang.Throwable
  • 2.Hook的方法是:getStackTrace,该方法返回的是StackTraceElement[]
  • 3.只需要过滤一波返回值,去掉包含XposedBridge的类名或者方法然后重置下即可。

思路又有了,写一波代码~


Hook getStackTrace方法

这里要吐槽一波Kotlin,getStackTrace方法返回的是数组嘛,需要用
as Array<StackTraceElement> 强转一波,然后呢,Array类里只有
几个寒碜的方法:

2333,对的,没有移除元素的方法,So,需要借用另一个可变的容器来装,
于是要创建一个可变列表,mutableListOf<StackTraceElement>()
然后遍历这个数组,把不包含XposedBridge的类和方法装到里面,
遍历完以后,还需要把这个可变集合再强转一波:toArray<StackTraceElement>()
然后重置下返回的结果。

所以有了这样的一串代码:

运行下重启手机,打开下厨房,检验下效果:

同时看下Logcat打印的日志信息:

到此就Hook完成了,抱歉,Xposed真的可以为所欲为。


小结

因为下厨房一直弹安装了Xposed的警告,所以有了这篇文章。
检测是否安装了Xposed可以不止这种套路,更多的可以翻阅:
Android Java 层的anti-Hook 技巧.md,不要有期待,
依旧是随缘更新,谢谢~


附:Hook部分代码(都可以在:https://github.com/coder-pig/CPWechatXposed 找到):

object XiaChuFangHook{fun hook(lpparam: XC_LoadPackage.LoadPackageParam) {findAndHookMethod("java.lang.Throwable", lpparam.classLoader, "getStackTrace", object : XC_MethodHook() {override fun afterHookedMethod(param: MethodHookParam) {val result = mutableListOf<StackTraceElement>()for (stackTraceElement in (param.result as Array<StackTraceElement>)) {val className = stackTraceElement.classNameval methodName = stackTraceElement.methodNameif(className != null && methodName != null) {if(!className.contains("XposedBridge")  && !methodName.contains("XposedBridge")) {result.add(stackTraceElement)}}}param.result = toArray<StackTraceElement>(result)super.afterHookedMethod(param)}})}
}

来啊,Py交易啊

想加群一起学习Py的可以加下,智障机器人小Pig,验证信息里包含:
PythonpythonpyPy加群交易屁眼 中的一个关键词即可通过;

验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~
欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。



http://chatgpt.dhexx.cn/article/DceboVB1.shtml

相关文章

2022最新 vue中mock的使用步骤 亲测可用

第一步&#xff1a;在src目录下创建文件夹mock&#xff0c;mock下创建文件index.js存放mock数据 index.js代码&#xff1a; import Mock from "mockjs" // const chartData { // "Msg": "success", // "ResCode": 200, // …

Mock 使用方式 + 在 Vue 项目中使用 Mock

Mock Mock 介绍搭建测试项目mock.js 模拟数据的基础使用方式Vue 项目中使用 mock.js 拦截数据后端接口写好后&#xff0c;mock.js 的移除处理 写下博客用于自我复习、总结。 如有错误之处&#xff0c;请各位大佬指出。 学习资料来源于&#xff1a;尚硅谷 Mock 介绍 在前后端开…

尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P051-100]

视频链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili P1-50&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频笔记 代码 [P001-050]_小白桶子的博客-CSDN博客 P51-100&#xff1a;当前页面 P101-135&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频…

VirtualXposed 免ROOT使用Xposed模块

免ROOT使用Xposed模块 一&#xff0c;下载工具 VirtualXposed 官网地址 或者 百度网盘 提取码&#xff1a;39hu 二&#xff0c;安装应用 安装完成打开VirtualXposed可以看到界面&#xff0c;点击下面圆圈就可以进入添加应用&#xff0c;模块管理&#xff0…

Vue.js 框架源码与进阶 - Vue.js 源码剖析 - 模板编译

文章目录 一、模板编译简介二、体验模板编译的结果三、Vue Template Explorer四、编译的入口函数五、模板编译过程5.1 compileToFunctions5.2 compile5.3 baseCompile5.3.1 baseCompile-AST5.3.2 baseCompile-parse5.3.3 baseCompile-optimize5.3.4 baseCompile-generate 5.4 模…

全栈低码开源框架 json-script-rule 配置说明

说明 配置主要分为映射信息配置和spring配置文件application的配置 映射信息 映射信息通常指的是所配置的po类与映射表的相关信息&#xff0c;通过相关注解来获取相关的静态信息&#xff0c;当然这里也可以通过其它的渠道来加载这些配置信息&#xff0c;如数据库、xml文件等…

全栈低码开源框架 json-script-rule 导入

说明 导入功能是将带有数据的excel文件上传后再通过程序导入到数据库&#xff0c;创建模型如下 Data public class JSRuleImport<A extends JSRuleAction<A>> implements IJSRuleActionModel<A>{/*** <p>导入excel对象&#xff0c;别名e* */JsonAlias…

Vue3 —— to 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码&#xff1a; toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数&#xff0c;第一个是 响应式对象…

vue框架安装mock

mock是&#xff1a;通过随机数据,模拟各种场景。 开发无侵入 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。 用法简单 符合直觉的接口。 1、安装mock前先安装axios请求 &#xff1a;** npm install axios --save** 安装成功axios的链接&#xff1a; 2、安装mo…

【甄选靶场】Vulnhub百个项目渗透——项目十六:FristiLeaks_1.3(文件上传,py脚本改写,sudo提权,脏牛提权,源码获取)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目十六&#xff1a;FristiLeaks_1.3&#xff08;文件上传&#xff0c;py脚本改写&#xff0c;sudo提权&#xff0c;脏牛提权&#xff0c;源码获取&#xff09; 靶场地址 &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透…

vue全家桶——vuex

本文主要介绍vuex【状态管理模式】&#xff0c;在介绍vuex前&#xff0c;需要重点说下一些概念 vue最大的特点之一。数据驱动视图&#xff0c;可以吧数据理解成状态&#xff0c;视图-view可以理解成用户看到的页面&#xff0c;页面是动态变化的&#xff0c;而这个变化必须是有…

博客园滑块验证码破解

极验最初的滑块验证码是两张图&#xff0c;首先出现的是原图&#xff0c;点一下出现凹槽&#xff0c;然后拖动滑块进去&#xff0c;注意拖拽速度就可以破解成功。 原理&#xff1a; 分别遍历扫描原图和有凹槽的图片像素&#xff0c;进行对比&#xff0c;像素不一致的位置就是凹…

尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P001-050]

视频链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili P1-50&#xff1a;当前页面。 P51-100&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频笔记 代码 [P051-100]_小白桶子的博客-CSDN博客 P101-135&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视…

【Vue】Mock.js的使用教程,入门级(附代码和案例)

Mock.js的使用&#xff08;附代码和案例&#xff09; 1、什么是mockjs 生成随机数据&#xff0c;拦截Ajax请求 了解一项技术&#xff0c;官网当然要知道 Mock.js 官网 2、程序 前端&#xff1a;访问后端接口&#xff0c;展示数据后端&#xff1a;后端负责业务逻辑&#xff0c…

YDOOK:vue3.0: vue-cli4.5: 引入 Element PLUS 的正确方法 Vue-cli4.5 引入 element+ plus

YDOOK&#xff1a;vue3.0: vue-cli4.5: 引入 Element PLUS 的正确方法 Vue-cli4.5 引入 element plus 1. 官网的指导安装使用方式尚未更新&#xff0c;显示的是&#xff1a; 2. 如果使用的是 npm 安装, 输入的代码为&#xff1a; npm install element-plus --save大陆建议使用…

使用Xposed对软件进行破解

入门 去AS里面新建一个NoActivity项目&#xff0c;最好把minimum版本调小 <!-- 加载Xposed模块--><meta-dataandroid:name"xposedmodule"android:value"true" /> <!-- 模块描述--><meta-dataandroid:name"xpose…

破解root密码精简版

破解root密码精简版&#xff1a; 1、重启虚拟机 2、在linux16末尾加上 rd.break,ctrlx执行 3、mount -o remount,rw /sysroot 把根以读写的方式挂载 挂在系统的根sysroot 4、chroot /sysroot 5、passwd root 6、输入新密码&#xff1a; 7、确认密码 8、touch /.autorelabel 标…

【word论文排版教程4】样式的应用

【word论文排版教程4】样式的应用 在使用样式处选择相应样式&#xff0c;同样可以使用之前设置的快捷键 标题比较长&#xff0c;使用软回车进行换行

【word论文排版教程2】论文章节安排及分节

【word论文排版教程2】论文章节安排及分节 论文章节可分为如下8个章节&#xff1a; 封面 中文摘要 英文摘要 目录 正文 参考文献 附录 致谢 输入封面&#xff0c;添加分解符 添加分解符效果 同样方法为其它章节添加分解符。

【word论文排版教程1】页面设置

【word论文排版教程1】页面设置 页面设置要求如下&#xff1a; 页面格式&#xff1a;纸张A4&#xff0c;上2.6cm&#xff0c;下2.6cm&#xff0c;左2.5cm&#xff0c;右2cm&#xff0c;装订线位置左侧&#xff0c;装订线0cm&#xff0c;无文档网格 页面布局->页面设置