Xposed 之旅 -- 查看微信群成员入群方式

本文仅做技术交流学习使用,用于其它违法行为的与本作者无关!

最近在研究xposed写插件,发现这个真的有毒,会上瘾,写上根本停不下来。那么就来说说最近写的一个,非群主查看群成员入群方式,正常情况下,群成员如果第一次入群,都会有一条提醒消息,加群后,群主点击群头像还可以查看是谁邀请进来的,但是如果不是群主点击查看就什么都看不到。

思路分析:加群后有提醒消息,那么数据库肯定存储了这条信息,那么也可能保存了是谁邀请的,至于谁可以看,很可能只是做了一个是否是群主的开关。

微信版本 6.5.16

群主查看群成员进群方式:

如果不是群主,就看不到进群方式这一行:

老规矩,先看dump一下UI


    FragmentManager misc state:
      mHost=android.support.v4.app.FragmentActivity$a@2b7d084d
      mContainer=android.support.v4.app.FragmentActivity$a@2b7d084d
      mCurState=5 mStateSaved=false mDestroyed=false
    View Hierarchy:
      com.android.internal.policy.impl.PhoneWindow$DecorView{3ea37717 V.E..... ... 0,0-1152,1920}
        android.widget.LinearLayout{3de6db3 V.E..... ... 0,0-1152,1920}
          android.view.ViewStub{36936f70 G.E..... ... 0,0-0,0 #1020375}
          android.widget.FrameLayout{95ac2e9 V.E..... ... 0,66-1152,1920}
            android.support.v7.widget.ActionBarOverlayLayout{6a5907a V.E..... ... 0,0-1152,1854 #7f100108 app:id/gf}
 

可以确定在 ContactInfoUI 这个页面进行了展示,要找到这个类,因为微信进行了分包,6.5.16版本的微信有三个分包,可以先用jd-gui把这三个分包一起打开,然后全局搜索,确定位置后,在用 luyten打开单个包,因为jd-gui 解析的效果看着实在令人头疼,

luyten看着就舒服很多

可以确定在第三个分包,用 luyten打开查看文件

批啦啪啦,批啦啪啦,查看了一通,发现没有找到合适的入口,这个类里面就是一些参数的操作,也都不是我们想要的,无奈之下,只能全局搜索一下,"进群方式" , 这个字符串,看看哪里用到了,

找到字段名称 aee,继续搜索看看哪里用了aee,找到了这个文件

在点击alx.xml,进去看看

这个布局就有点像了,通过ADM 看一下

应该就是我们要找到

取值,赋值的时候应该会通过 

contact_info_invite_source

这个名称,我们就再到 jd-gui里面搜一下这个,看看哪里用到了

k类,用luyten打开

我们发现了这个可疑的地方,Is_RoomOwner 不难理解,肯定是群主的意思,这个

booleanExtra = this.fGo.getIntent().getBooleanExtra("Is_RoomOwner", false);

获取方式在gGo中

这个gGo是 new k对象的时候传过来的,展示的时候是在 ContactInfoUI 这个 activity中,那么先看看是或否是在这个 文件中有new

最后找到了这个鬼地方, 这种写hook就要边写边测,找到关键点,就要hook一下,我的想法是既然在

 booleanExtra = this.fGo.getIntent().getBooleanExtra("Is_RoomOwner", false); 这行代码中获取了是否是群主的boonean,那么我直接把这个改了会怎么样,这个改的地方当然没得说是在onCreate() 方法里面

这样就有了如下的hook代码:

         findAndHookMethod("com.tencent.mm.plugin.profile.ui.ContactInfoUI", lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    Activity activity = (Activity) param.thisObject;
                    activity.getIntent().putExtra("Is_RoomOwner",true);

                }

                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                }
            });

重启手机,发现了下面神奇的一幕,没错,我们成功了

经过测试,发现在6.5.16上如果邀请人退群了,是无法再继续点击查看邀请人的,这个也是6.5.16微信的bug,在7.0.4微信修改了这个bug,但是我们还需要hook一个函数才可以,7.0.4的判断方式有些不一样

                        findAndHookMethod("com.tencent.mm.storage.u", classLoader, "JR", new XC_MethodHook() {
                            @Override
                            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                                super.beforeHookedMethod(param);
                            }

                            @Override
                            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                super.afterHookedMethod(param);
                                param.setResult(true);
                            }
                        });

这个方法就是7.0.4用来判断是否是群主的。

总结:先通过dumpsys UI的方式先定位到UI,然后在UI中看看有没有直接能用的方法或者类,没有在跟进UI界面的字符串进行查找,如果还是没找到,还可以通过打log的方式进行分析,解析jar包的时候有一个好的解析工具很重要,解析的不好看着都会脑袋大一圈。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值