吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20071|回复: 53
收起左侧

[Android 原创] Xposed-我收到微信好友发来的100万红包

[复制链接]
hjw45611 发表于 2019-6-5 20:16
本帖最后由 hjw45611 于 2019-6-5 20:25 编辑

前两天发了一篇自己的经验总结,但参与度并不高,让我不禁怀疑是不是大家更喜欢这种夸张式标题,只好趁着下班时间水一篇。
前有改支付宝资产,后有改微信余额显示,我只好改改微信红包金额了。
严重声明
本文的意图只有一个就是通过分析app学习更多的逆向技术,如果有人利用本文知识和技术进行非法操作进行牟利,带来的任何法律责任都将由操作者本人承担,和本文作者无任何关系,最终还是希望大家能够秉着学习的心态阅读此文。

同样以微信7.0.3为例:
其实之前做微信消息监控的时候做过红包监控,大概知道Hook点,要改很容易,但从读者的角度讲清楚流程就有些费时费力了,只好尽量讲清楚了。
红包详情页
红包金额的显示就在红包详情页LuckyMoneyDetailUI,不管是收到红包后第一次点击,还是再次点击,终归会进入到红包详情页。
第一次点击红包 红包详情
收到红包.png 红包详情.png


所以重点就在LuckyMoneyDetailUI这个页面。jadx打开apk后搜索类LuckyMoneyDetailUI。
LuckyMoneyDetailUI.png
打开后变量下就是十几二十个匿名内部类,直接跳过寻找onCreate方法。
onCreate方法.png
数据来源
可以看到有很多getIntent()方法的调用。
一般情况下我看到很多getIntent()就会打印一下数据,能传过来的大部分都是有用的。
[Java] 纯文本查看 复制代码
findAndHookMethod("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI", loadPackageParam.classLoader,
                            "onCreate", Bundle.class,
                            new XC_MethodHook() {
                                @Override
                                protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
                                    super.beforeHookedMethod(param);
                                    Bundle bundle=((Activity)param.thisObject).getIntent().getExtras();
                                    StringBuffer buffer=new StringBuffer("onCreate--");
                                    for (String s : bundle.keySet()) {
                                        buffer.append("-key="+s+"=value=");
                                        buffer.append(bundle.get(s)+"\n");
                                    }
                                    log(buffer.toString());

                                }
                            });

可以看到打印数据如下:
红包详情页intent接收值.png
可以看到detail_info这个bit数组是很可疑的。继续跟踪:
detail_info数据.png
可以看到获取到bit数组后会转化为一个数据类对象。如果这个对象是null的话就直接finish掉了。
由此可见这个数据类对象是很重要的。
数据类.png
可以看到这个数据类中的变量都是基础数据类型,我们可以把这个数据类对象打印一下,因为这个对象不为null的时候传入了m21242a方法,所以直接hook a方法的参数:
[Java] 纯文本查看 复制代码
final Class<?> modelClass = XposedHelpers.findClass("com.tencent.mm.plugin.luckymoney.model.j",
                            loadPackageParam.classLoader);

findAndHookMethod("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI", loadPackageParam.classLoader,
                            "a", modelClass,
                            new XC_MethodHook() {
                                @Override
                                protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
                                    super.beforeHookedMethod(param);

                                    log("LuckyMoneyDetailUI-" + Tools.beanToString(param.args[0]));

                                }
                            });
public static String beanToString(Object object) {
        if (object==null){
            return "null";
        }
        return (new Gson()).toJson(object);
    }

拦截到的数据类打印结果如下:
数据类json数据.png
这是两次红包的数据,对比如下:
json树.png
因为第一次收到红包金额是0.01,第二次是0.03,所以第一次是1第二次是3的数据就比较可疑。
可以看到有三个字段是可疑的,至于nuf中的list集合为什么不计入其中,因为这个数据既是单人红包也是多人红包,list集合就是展示所有抢了这个红包的人的信息的。
所以只分析前三个字段直接在页面搜索.cGT .ntR .ntS
只有cGT有使用到
receiveAmount.png

setText.png
可以看到cGT在某个位置赋值给了field_receiveAmount,代表了收到的金额数,而且在this.npx.setText(C9368e.m15470F(((double) c45587j.cGT) / 100.0d));更可以确定是金额格式化后进行setText展示。
Xposed修改
直接修改cGT这一变量。
[Java] 纯文本查看 复制代码
findAndHookMethod("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI", loadPackageParam.classLoader,
                            "a", modelClass,
                            new XC_MethodHook() {
                                @Override
                                protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
                                    super.beforeHookedMethod(param);

                                    log("LuckyMoneyDetailUI-" + Tools.beanToString(param.args[0]));
                                    XposedHelpers.setLongField(param.args[0],"cGT",100000000L);
                                }
                            });

直接修改为100W。
修改红包结果.gif
至此完成,看到结果就不得不吐槽一下微信了,为啥不做一下金额的长度兼容?嘿嘿。。
大家看完乐呵一下就行了。

免费评分

参与人数 14威望 +1 吾爱币 +22 热心值 +14 收起 理由
bluewhale + 1 + 1 谢谢@Thanks!
kavenluo + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qtfreet00 + 1 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
跳跃的灵魂 + 1 + 1 说200封顶的 一看就没女朋友~
穿透骨頭撫摸妳 + 1 + 1 用心讨论,共获提升!
waltzofjack + 1 我很赞同!
韩喻V + 1 + 1 我很赞同!
三分米信息技术 + 1 200封顶兼容个鬼长度啊
梦醒方知心痛 + 1 如果能真实到账就更完美了
qaz003 + 1 + 1 看着好舒服....谢谢分享
Anonymous、 + 2 + 1 我很赞同!
潇洒潘 + 1 + 1 原来100后面还有1000000啊
笙若 + 1 + 1 谢谢@Thanks!
kk1212 + 1 + 1 如果能真实到账就更完美了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wu8511128 发表于 2019-6-5 20:58
这要发给卖茶女,她该多么的高兴
 楼主| hjw45611 发表于 2019-6-6 10:36
zldtb19931116 发表于 2019-6-6 09:31
楼主你这在屏幕上显示当前activity是怎么实现的?

是一个叫 当前Activity 的app,找不到地方下载的话可以可以在这下载
https://github.com/hjw45611/WechatPlugin/
Arclz 发表于 2019-6-5 20:24
没见过两百万的我才知道原来微信能发那么大的红包
爷不但帅而且坏 发表于 2019-6-5 20:40
求华为解锁,或者解锁码
头像被屏蔽
亂爱 发表于 2019-6-5 20:40
提示: 作者被禁止或删除 内容自动屏蔽
lrv 发表于 2019-6-5 20:41
红包200封顶把!
南极星_睬C 发表于 2019-6-5 20:42
技术过硬!
xie83544109 发表于 2019-6-5 20:49

有点好怕怕
丶cry 发表于 2019-6-5 21:01
会hook就是好,什么都可以好玩起来。
mhaitao 发表于 2019-6-5 21:07
这样是不是秒变百万富翁
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表