android xml msgid,Android挂逼修练之行–微信聊天消息修改器插件开发详解

一、插件开发背景

昨天无意中在刷抖音的时候看到有个视频可以修改转账信息,我就觉得好奇所以就自己实现了一下,关于微信消息修改其实是个假象就是修改本地自己看到的消息,而不是真正意义上的把聊天信息修改了,但是这个修改的好处在于好玩,比如你在和你喜欢的人聊天突然发错消息了,但是如果这时候撤回她也是可以看到的,那么怎么办呢?就本地修改一下消息,然后截图给她告诉她微信出bug了,消息不同步你看我这发的消息是这样的,当然还有转账的时候,可以搞怪一下,比如给媳妇转账了¥0.01块钱,但是本地修改成¥20191314块,然后截图给她告诉她真的转了这么多钱表明真心,告诉她是腾讯微信出bug了。所以这么玩的确好但是很容易变成单身狗!

二、逆向分析

关于修改本地自己的消息信息其实也不难,首先用UI分析工具直接找到控件名字:

a11e4d53375c5e199a7b013164fb416b.png

然后去public.xml中找到值:

d938956e2fb9f2281907db9fa6fc79cc.png

找到之后,按照之前说过的字符串搜索方式进行查找方式:find . |xargs grep -ri “查找内容”

fdbad3aaa0ab4aeecffd25dbd12e1837.png

找到正确的id名字之后继续find搜索:

af5efd4071f7fc5fe81dddd365aeba8b.png

找到这个类,然后用Jadx直接打开dex即可:

fd2a47a9207c2a89d436890b70f28839.png

看到这个控件的定义了,然后直接搜索这个类的调用的地方,还是find搜索:

9b1f4cf048fa80e584a29da7d5098706.png

看到这里用到了控件的类,继续用Jadx打开dex即可:

d172f0e614c06bbb2214a95ad1e26a35.png

这里进行获取值然后进行赋值操作,到这里我们可能没法往下跟踪了,这时候就需要打印堆栈信息进行跟踪了:

014f6fceefcca80bcb02db69cbdea5e4.png

可以先去smali中找到定义类型,然后直接hook即可:

d5d04c6f9c740e5882645e228499201e.png

然后通过打印堆栈信息找到方法点:

f96ced70cdadaad02b2774984f855e07.png

通过堆栈信息继续查找这个类,还是find命令:

然后用Jadx打开这个类:

551a99fbabeadd40675eed2a18c41a6f.png

这个类中获取item数据,通过聊天消息列表中可以看到有很多种消息类型,比如纯文本,图片,转账,文章链接等,可能都在这里进行区分,这里看到item的类型是bi,依然用find命令查找:

de99672425b42bf9b1cf669a25f800b8.png

不过这里直接hook了getItem无效,所以这时候去查看smali代码,看到是调用了LU方法:

d464965ce6d9d620917b8663e81a0f31.png

这时候打印了消息id和消息内容

f6d69c509193a62aceaa3ee99f93b19e.png

通过这里保存一下当前对象其实就是列表适配器,为了后面修改完内容之后需要进行一次列表刷新操作:

728125fa706cbaf291dedbf5f7fd35ca.png

找到这个类型之后用Jadx打开即可:

b6095c1635d619af498229e8cf6a72a6.png

这个类继承了好几个类:

abf0d925cf1537a50c83ff024636fef9.png

继续往上看:

11011a9c20c7c0d847a901779fffaf62.png

看到这里有很多字段,这个就是微信聊天的消息统一处理字段类,这个在之前的文章都分析过,以后要分析微信的聊天信息都可以找到这个类即可:

301cfb5b963f59e9dc8074a6c6ac9a59.png

看到打印的消息内容,发现微信的消息富文本用的是xml格式:

dc2dae6253bd11f11cf0c4958ab9aa5d.png

然后往下看getView中就是根据item类型构造不同的itemView内容:

9750ac6146a25348cba8eba67d72109b.png

看到这里有很多子类,不过不确定是哪个,这时候继续去找转账的itemView的字符串信息

593daf6787245bdd4866a992ace77ec4.png

然后去public.xml中查找id,继续去find搜索:

bf0a1dbbf731750ecc7b7477c721816d.png

找到这个id之后继续find搜索:

30d8e9b7bef68d5badf8c8b47ff8d97f.png

继续找到这个类

e420c4583ad9f83d7e367eb0743f8ebe.png

找到之后用Jadx打开dex查看:

227f0fdd48d0ff29cb79cc1190468173.png

这里看到eMf字段就是那个转账金额值。

所以到这里我们已经可以找到item信息,并且通过hook方法获取到每个item的结构体信息,通过type类型判断是哪种item类型,当然这里我们可能只需要获取item的content内容,但是现在我们还需要获取每个item的点击事件,这个本来是通过getView的方法的返回View直接添加OnClick事件,但是操作无效,所以无奈就从根源开始找,这里通过点开转账itemView,然后跳转到一个新的页面信息,用 adb shell dumpsys activity top 命令获取到页面信息:

c3b21d7e3d2e9c147d76575214f64171.png

然后继续用find命令获取类信息:

0cc5369630284438ef76073ec7e98aef.png

用Jadx打开这个dex之后,查看这个页面的入口参数,然后全局搜索这个字段值:

e0b45f1a7f819527e0f0832f0521fd8a.png

然后继续用find命令进行查找字段值:

b32b3a1a7e0787a4838caefa043d59e6.png

找到这里的一个方法就是开启页面的方法:

3ac2c6c205e72fc6288dedf60b76d643.png

这里依然不太好跟踪代码了,就要用打印堆栈信息:

2a3a88e367a90498fc327ecbd2fe71d2.png

通过打印堆栈信息获取类:

afea2fd1dc84b2ccb8984966310106f2.png

然后在这个最终点击事件类中进行统一处理:

ee23e6f4893d66ff1d23c33fd681f31f.png

这里可以通过点击的View的getTag获取结构对象:

通过这里获取结构信息,先要获取消息的type类型进行分类处理,我们只需要对文本,文章,转账这三种类型进行操作,对于文本类型content就是文本内容直接获取展示输入框中即可:

当然还有文章和转账功能的需要特殊处理,我们通过打印消息xml格式:

这个转账信息,这里需要获取金额,就是在feeddesc中节点信息,还有这里需要获取到支付的msgid信息留作备用,还有就是文章xml信息:

文章中我们需要修改title和描述信息即可:

我们这里获取到文章的标题和描述然后填充到文本框中,最后在获取修改后的内容通过正则表达式进行替换,保存到HashMap中即可,这里需要用msgId作为key,保存之后刷新一下列表,然后在列表中通过获取HashMap中的信息进行更新即可:

在这两个列表获取消息结构信息的地方统一处理即可,通过msgId去HashMap中寻找是否有更改的内容,有的话直接替换即可。

但是对于转账消息类型比较麻烦,通过测试发现直接处理content替换是无效的,所以这里需要从根源进行替换获取即可,不过这里还是需要获取金额和支付msgid保存后续使用:

在之前分析了转账控件id的过程中发现最后把金额值设置到控件文本中的方法就是这里,继续find搜索这个类:

然后在这里统一进行替换即可,最终是通过eMf字段值进行展示金额值的,那么这里通过比对支付msgid是否一致然后进行金额拦截替换展示即可:

到这里我们就成功了完成了消息修改工具:

消息文本修改功能

文章标题和描述修改功能

转账消息金额修改功能

三、总结

到这里我们就开发完了这个工具,可以看到本文主要用到的就是find命令搜索大法和打印堆栈信息进行代码跟踪逻辑,这两个方式是现在以及以后分析微信的最重要方式,因为微信多dex直接打开Jadx直接死了,如果导入到AS中,其实也有点卡顿,但是这种有目的的查找然后定位到指定dex然后用Jadx打开即可,效率高方便快捷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值