查看原文
其他

畸形二维码点开即崩 微信今晚要加班了

0xcc 非尝咸鱼贩 2023-06-10

今晚不少群和朋友圈都在转发一个二维码,只要点开客户端就会闪退。

除 Windows 客户端外无一幸免——iOS 和 macOS 还有 Android 都崩。点开即中。这里就不截取完整的图片了。

iPhone 可以直接在系统设置里调取 ips 崩溃日志,然后 AirDrop 到电脑分析;或者打开开发者模式之后直接 Xcode 拉取。

在 macOS 上也复现了,可以直接上调试器。

确实是解码二维码的时候出错,崩在 std::basic_string 的字符串拼接方法。传入了一个空指针。

本来想快速分析一下,反编译一看发现这几个函数还挺大。直接关掉了。


在桌面端暂时可以用调试器“热补丁”一下。先 lldb 挂上 WeChat 进程,点开有问题的二维码,挂在 memmove 上。直接改一下参数就好了。

用 lldb print 动态生成一个空字符串

(lldb) print (char *)""(char *) $0 = 0x00000001179000d0 ""


然后把 x1 寄存器改成空字符串的地址,x2 改成 0

(lldb) reg write x1 0x00000001179000d0(lldb) reg write x2 0(lldb) cProcess 93910 resuming

我用的是 M1,和 Intel 的寄存器不一样,这里默认读者都知道。

暂时消停了,也可以把样本提取出来了。

试了一下微信调用摄像头扫描,不必想,当然也是闪退。试试其他 app:

  • iOS 版 QQ 闪退,看来有可能用了同一个库。

  • 系统相机在码旁边瞄出一个边,但不能识别内容

  • 其他购物、支付类 app 均不识别




这张二维码确实有问题。

直接上传 zxing 的网页版(https://zxing.org/w/decode.jspx),提示未识别到二维码:

随手找了一个 nodejs 的二维码识别库,输出结果和微信识别的一样。

1256196,1256197,1256198,1256199


但是把这一串字符串重新生成一个二维码,连定位点的尺寸都大相径庭。

没有人肉解码调试二维码的能力,文章就先水到这里。大家晚安。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存