首页
社区
课程
招聘
[原创]Android逆向之路---利用Xposed随意更改微信地区(附源码)
2021-6-5 02:45 16887

[原创]Android逆向之路---利用Xposed随意更改微信地区(附源码)

2021-6-5 02:45
16887

前言

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

需要运行环境

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

#git地址
github地址,点我点我

开始逆向,找到大致位置

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

 

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

 

首先利用命令

1
adb shell dumpsys activity

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 初始化这个变量的方法,然后在调用完成之后,再放入我们自己自定义的地区。

 

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader, "hQs", new Object[]{new XC_MethodHook() {
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI hQs beforeHookedMethod");
                }
 
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI hQs  afterHookedMethod");
                    Object wdnObj = XposedHelpers.findField(XposedHelpers.findClass("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader), "TER").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");
                    Field hasChildrenField = XposedHelpers.findField(regionClazz, "hasChildren");
                    Object arrayHarryporrt = Array.get(wdnObj, 1);
 
                    Context context = (Context)param.thisObject;
                    String uri = "content://martinhanxposedwx/query";
                    Bundle bundle = context.getContentResolver().call(
                            Uri.parse(uri), "query", null, null);
                    String region = bundle.getString("region");
                    System.out.println("调用结果:" + region);
 
                    codeField.set(arrayHarryporrt, region);
                    nameField.set(arrayHarryporrt, region);
                    hasChildrenField.set(arrayHarryporrt,false);
                    Array.set(wdnObj, 0, arrayHarryporrt);
                }
            }});

我们修改了Region对象的code和name。
这样wdnObj这个对象的第一项就变成了我们篡改之后的值了。
并且要设置hasChildren为false,这样不会有二级选择,这个是微信8.0更新以后新加入的字段

 

下面展示效果

 

大功告成

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

 

有没有感觉很神奇呢。

 

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

源码地址

要不要star一下呢

 

github地址,点我点我

写在最后

偶尔聊聊逆向,偶尔聊聊生活,做一个很懒的博主就是本人了。

 

欢迎吐槽。

关于我

个人网站:MartinHan的小站

 

知乎:MartinHan01


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-6-5 02:52 被风月缘编辑 ,原因:
收藏
点赞7
打赏
分享
最新回复 (5)
雪    币: 221
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_昔影 2021-6-7 17:03
2
0
大佬,最新版微信小程序数据包怎么抓取啊?直接打开小程序就是 环境错误,不让抓取
雪    币: 1690
活跃值: (8623)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
你瞒我瞒 2022-10-19 19:07
3
2
楼主博客几万年没更新了
雪    币: 112
活跃值: (408)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风月缘 2022-10-22 01:25
4
0
你瞒我瞒 楼主博客几万年没更新了
快更新了快更新了(新建文件夹
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xpbhkfva 2022-11-6 15:39
5
0
现在还能用吗?
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
kreas 2023-10-5 04:51
6
0
老哥交流
游客
登录 | 注册 方可回帖
返回