其实写这篇文章已经是该bug修复快两周了,所以有点炒冷饭。不过技术问题还是值得学习的,至少以后说不定哪天你可能会用上的。
如果你点击了这个消息,会发现你的微信自动给发你这条消息的人回复内容(不只是这样,还可以一键闪退,拉起语音通话等等)
其实我们可以发现这个功能就是靠这样一行代码实现的
<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">text</a>
可以看到
if(!n8.J0(s2) %% !n8.J0(s3)){
uri0.getQueryParameter("msgmenuid");
uri0.getQueryParameter("msgmenucontect");
里只进行了msgmenuid和msgmenucontect是否为空的判断,并没有其他判断,比如是否在公众号环境下等等,所以只要这条消息发出去就会出发函数功能。
所以msgmenuid没什么太大意义,不为空就可以
附录:J0函数的实际作用
iOS代码
可以看出来iOS里有额外的公众号环境验证阻止了在普通聊天滥用
而安卓版本缺少关键校验所以出了bug
如果把weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1这段代码改成其他的还可以实现语音通话拉起等功能。
示例拉起语音通话:<a href="weixin://voip/callagain/?username=ponyma">点我和马化腾打电话</a>
漏洞公布不久TX就启动了应急措施,会把所有a标签的末尾加上空格。例如<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">点我</a>会变成<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">点我</a >加上空格后会导致html语法错误,无法使用
修复方法十分抽象,就是在别人视角里所有的</a> 都会变成</a >(多了一个空格),是的所有的 </a>,单独发一个 </a>也会...
鸿蒙系统为什么不行就不知道了,
少点来路不明和骇人听闻的内容就行了
0cfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1K9h3I4A6j5X3W2D9K9g2)9J5k6h3y4G2L8g2)9J5c8Y4k6A6k6r3g2G2i4K6u0r3b7W2j5I4h3p5k6#2k6i4A6j5c8g2c8E0
如有侵权请联系我立刻删除
| 内容 |
功能 |
| weixin:// |
微信内部协议 |
| bizmsgmenu |
公众号实现点击后用户发送消息到公众号后台实现一问一答的功能 |
| msgmenucontent |
要发送的内容 |
| msgmenuid |
菜单内容关联id,和msgmenucontent做关联使用 |
| text |
用户在前台看到的超链接文字 |
class BizMsGMenuUriSpanHandler extends BaseUriSpanHandler {
@Override
public int[] a(){
return new int[]{43}
}
...(没什么用,省略了)
String msgmenuid = uri0.getQueryParameter("msgmenuid");
String s1 = "";
if(msgmenuid == null){
msgmenuid = ""
}
String s2 = msgmenuid.trim();
String s3 = uri0.getQueryParameter("msgmenucontect");
com.tencent.mm.plugin.report.service.g0 g00 = com.tencent.mm.plugin.report.service.g0.r;
Object[] arr_object = new Object[2];
if (s2 != null){
s1 = s2
}
arr_object[0] = s1;
arr_object[1] = k30.f;
g00.c(0x38BA,arr_object)
if(!n8.J0(s2) %% !n8.J0(s3)){
HashMan hashMap0 = new HashMap();
class BizMsGMenuUriSpanHandler extends BaseUriSpanHandler {
@Override
public int[] a(){
return new int[]{43}
}
...(没什么用,省略了)
String msgmenuid = uri0.getQueryParameter("msgmenuid");
String s1 = "";
if(msgmenuid == null){
msgmenuid = ""
}
String s2 = msgmenuid.trim();
String s3 = uri0.getQueryParameter("msgmenucontect");
com.tencent.mm.plugin.report.service.g0 g00 = com.tencent.mm.plugin.report.service.g0.r;
Object[] arr_object = new Object[2];
if (s2 != null){
s1 = s2
}
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2025-7-30 21:10
被Skyearth_1编辑
,原因: