Android小黑科技——来自火星的你

简介: 今天偶然看到网友的微信地区是一个魔法学院,微信的地区怎么可能是魔法学院呢?肯定是这位网友自己搞了一些黑科技,然后改的。他能改,我们也能改,二话不说就开干。

今天偶然看到网友的微信地区是一个魔法学院,微信的地区怎么可能是魔法学院呢?肯定是这位网友自己搞了一些黑科技,然后改的。他能改,我们也能改,二话不说就开干。 先来看看我的成果

 

需要运行环境

  • xposed环境root过的android手机微信最新版,我用的是6.7.3

开始逆向,找到大致位置

首先要知道微信的选择地区的页面在什么位置,然后我们再看对应代码。

先保持在微信的选择地区页面。然后dump activity

首先利用命令

 
adb shell dumpsys activity 

从日志里面我们可以看到如下所示 重点在此

 
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[816,1041][996,1221] (has extras) } Hist #3: ActivityRecord{2152aef u0 com.tencent.mm/.ui.tools.MultiStageCitySelectUI t266} Intent { cmp=com.tencent.mm/.ui.tools.MultiStageCitySelectUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #2: ActivityRecord{e722872 u0 com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalMoreUI t266} Intent { cmp=com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalMoreUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #1: ActivityRecord{4e7fec5 u0 com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalInfoUI t266} Intent { cmp=com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalInfoUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #0: ActivityRecord{5cb9f3a u0 com.tencent.mm/.ui.LauncherUI t266} Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[816,1041][996,1221] (has extras) } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} 

看到了吧,重点就是在com.tencent.mm.ui.tools.MultiStageCitySelectUI这个页面里面了。

我们需要分析微信的逻辑,随后hook他的方法。

分析微信代码

其实有一点我也很有疑问,微信的运行时内部的变量名字和方法名字,和我们静态分析的是不太对应的,对此暂时没有深入研究,如果有朋友知道的话可以提示我,欢迎一起探讨。

由于我上面所说的这个问题,所以采用利用Xposed hook 这个MultiStageCitySelectUI的onCreate方法,然后我们动态的在内存里分析。

hook onCreate代码如下

 
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader, "onCreate", new Object[]{Bundle.class, new XC_MethodHook() { protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI onCreate beforeHookedMethod"); } protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI afterHookedMethod"); Class mscsu = XposedHelpers.findClass("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader); Method[] methods = param.thisObject.getClass().getMethods(); List<Method> myMethods = new ArrayList(); for (Method item : methods) { if (item.getDeclaringClass().equals(mscsu)) { myMethods.add(item); } } } 

如代码所示,我们还将属于MultiStageCitySelectUI类本身的方法筛选了出来,防盗了myMethods里面,方便于我们分析。

打断打上,运行时分析。

然后看运行时的成员变量,根据软件开发的经验,肯定有一个数据源,存着所有的地区列表。

突然发现有一个wdN的变量,他的类型是RegionCodeDecoder$Region。

这个的意思就是这个变量的类型是RegionCodeDecoder的子类Region类型。 然后打开结果如下

 

这个图片正好对应我们手机里的第三项,

这也就说明其实这个列表有很大可能性就是我们需要篡改的列表了。

然后紧跟着,思路就是hook 初始化这个变量的方法,然后在调用完成之后,再放入我们自己自定义的地区。

代码如下:

 
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader, "cJa", new Object[]{new XC_MethodHook() { protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI cJa beforeHookedMethod"); } protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI cJa afterHookedMethod"); Object wdnObj = XposedHelpers.findField(XposedHelpers.findClass("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader), "wdN").get(param.thisObject); Class regionClazz = XposedHelpers.findClass("com.tencent.mm.storage.RegionCodeDecoder$Region", classLoader); Field codeField = XposedHelpers.findField(regionClazz, "code"); Field nameField = XposedHelpers.findField(regionClazz, "name"); Object arrayHarryporrt = Array.get(wdnObj, 0); codeField.set(arrayHarryporrt, "哈利波特魔法学校"); nameField.set(arrayHarryporrt, "哈利波特魔法学校"); Array.set(wdnObj, 0, arrayHarryporrt); } }}); 

我们修改了Region对象的code和name。 这样wdN这个对象的第一项就变成了我们篡改之后的值了。

下面展示效果

 

大功告成

然后选择我们篡改的第一项,哈利波特魔法学校,然后你的地区就会改变啦。

有没有感觉好玩儿呢。

ps:改完之后ios设备无法看到你的地区,可能由于ios客户端判断的问题。

赶紧动手试试吧,,记得随手转发让火星移民同胞更多吧~

现在加Android开发群;701740775,可免费领取一份最新Android高级架构技术体系大纲和视频资料,以及这些年年积累整理的所有面试资源笔记。加群请备注csdn领取xx资料

相关文章
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1305 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
965 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1065 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
836 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
7月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
348 0
|
8月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1042 6
|
10月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
628 11
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
4337 77
|
10月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
415 0
|
11月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
465 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章