整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

路由器都拔了又拔,手机重启 N 次......最终发现,手机以及部分设备还是连不上网。

这到底是怎么回事?

几周前,来自国外 secret.club 的逆向工程师、创始人 @Carl Schou 在 Twitter 揭露一个 iOS 系统中的严重的漏洞。该安全研究人员指出,移动设备连不上 Wi-Fi 并非是路由器或者手机的问题,这时候需要检查一下你的网络名称,如果你设置的 Wi-Fi 名称中带有百分比(%)字符时,如“%p%s%s%s%s%n”,那么它可能是禁用 iPhone 以及 iOS 设备上 Wi-Fi 的元凶。

近日,Carl Schou 再次发文表示,当使用 SSID“%secretclub%power”可以禁用 iOS 设备的 Wi-Fi 功能,即使重置网络设置也无法恢复 Wi-Fi 的使用。

究竟是什么原因导致?

针对这一问题,不少研究人员认为,这个 Bug 因为属于输入解析的问题,其中百分比符号可能被 iOS 误解为字符串格式化的操作符,即 % 符号后面的字符可能被视为变量或命令而不是纯文本。

对此,有开发者@CodeColorist 对整个过程进行了快速解析(https://blog.chichou.me/2021/06/20/quick-analysis-wifid/)。在测试过程中,他也设置了一个与 Carl Schou 相同的 SSID 热点并让设备加入该网络,结果发现 wifid 很快就崩了。崩溃报告如下(wifid-2021-06-20-xxxxxx.ips):

Thread 2 name:  Dispatch queue: com.apple.wifid.managerQueue
Thread 2 Crashed:
0   libsystem_platform.dylib          0x00000001ebcb9724 _platform_strlen + 4
1   CoreFoundation                    0x00000001a381d84c __CFStringAppendFormatCore + 8812
2   CoreFoundation                    0x00000001a381efa8 _CFStringCreateWithFormatAndArgumentsReturningMetadata + 160
3   WiFiPolicy                        0x00000001d0895f8c -[WFLogger WFLog:message:] + 192
4   ???                               0x000000010692c00c 0 + 4405248012
5   wifid                             0x0000000100f58a74 0x100e40000 + 1149556
6   wifid                             0x0000000100f58c74 0x100e40000 + 1150068

基于以上结果显示,证实了网络连接失败以及 iPhone 上 Wi-Fi 无法正常使用属于格式字符串 Bug!

通过反编译 dyld_shared_cache 中的 -[WFLogger WFLog:message:] 函数。有两个对 CFStringCreateWithFormatAndArguments 的引用:

v7 = j__CFStringCreateWithCString_107(0LL, a4, 0x8000100u); // the format stringif ( v7 || (v7 = j__CFStringCreateWithCString_107(0LL, a4, 0)) != 0LL ){if ( self->_destination == 2 ){v8 = j__CFStringCreateWithFormatAndArguments_26(0LL, 0LL, v7, v21);v18[3] = (__int64)v8;}

另一个:

      if ( self->_destination != 2&& (!self->_wflRunningOnWatchClassDevice || self->_wflEnableDualLoggingOnWatchClassDevice) ){*(_QWORD *)&v16.tm_sec = 0LL;*(_QWORD *)&v16.tm_hour = &v16;*(_QWORD *)&v16.tm_mon = 0x2020000000LL;*(_QWORD *)&v16.tm_wday = 0LL;v10 = j__CFStringCreateWithFormatAndArguments_26(0LL, 0LL, v7, v21); // <-- here

@CodeColorist 表示,利用 frida,并将它加到函数中,如:frida-trace -U wifid -m '-[WFLogger WFLog:message:]' ,稍微修改自动生成的脚本:

onEnter(log, args, state) {const msg = '' + args[3].readUtf8String();log(`-[WFLogger WFLog:${args[2]} message:${msg}]`);if (msg.indexOf('%p%s%s%s%s%n') > -1) {for (let i = 3; i < 10; i++) {log(args[i], JSON.stringify(Process.findRangeByAddress(args[i])));}log('called from:\n' +Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');}},

这是崩溃前的日志。

17863 ms -[WFLogger WFLog:0x3 message:Dequeuing command type: “%@” pending commands: %ld]

17863 ms -[WFLogger WFLog:0x3 message:{ASSOC+} Attempting Apple80211AssociateAsync to %p%s%s%s%s%n]

根据回溯,以下是根本原因:

v27 = sub_1000A25D4(v21);
v28 = objc_msgSend(&OBJC_CLASS___NSString,"stringWithFormat:",CFSTR("Attempting Apple80211AssociateAsync to %@"),v27);
v29 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithFormat:", CFSTR("{ %@+} %@"), CFSTR("ASSOC"), v28);
v30 = objc_autoreleasePoolPush();
v31 = (void *)qword_100251888;
if ( qword_100251888 )
{v32 = objc_msgSend(v29, "UTF8String");objc_msgSend(v31, "WFLog:message:", 3LL, v32);
}
objc_autoreleasePoolPop(v30);

苹果:暂未回复

与此同时,外媒 9to5 Mac 也曾给出一个可能性的解释:

"%[字符]"语法通在编程语言中较为常见,它的作用是对字符串进行格式化。在 C 中,"%n"标识符表示将写入格式字符串中的字符数保存到传递到字符串格式函数的变量。Wi-Fi 子系统可能会将未经处理的 Wi-Fi 网络名称 (SSID) 传递给执行字符串格式的某个内部库,这反过来又会导致缓冲器溢出。这将导致内存损坏,iOS 监视器将扼杀该过程,从而有效地禁用用户的 Wi-Fi。

经过测试,这种情况仅在 iOS 设备中出现,其中 iOS 14.4.2 到 14.6 都有这样的问题,而 Android 设备则可以毫无问题地直接连接。研究人员还就此事联系了苹果的设备安全团队,但尚未收到任何回复。

通过不断的尝试,Carl Schou 最终给出了一个解决方案,即手动编辑 iPhone 备份并在已知的网络中删除恶意的 Wi-Fi 名,才可以恢复 iPhone 等 iOS 设备网络的使用。

其实近几年来,苹果因为程序处理字符串带来的 Bug 层出不穷,譬如,上一次,只因用户姓 True,她的 iCloud 账户被苹果封禁了半年之久。这一次关于 % 字符的问题不知何时才能根除,目前对于用户可以做的就是不要去连接不熟悉以及名称上带有这种 % 等特殊字符的 Wi-Fi,避免一些可怕事情的发生。

参考:https://appleinsider.com/articles/21/07/04/new-malformed-wi-fi-name-bug-can-require-iphone-factory-reset-to-fix

☞字节跳动辟谣“出售AI技术”和“成立打车项目”;GitHub 因代码版权问题遭抵制;贝佐斯正式卸任亚马逊 CEO|极客头条☞Windows 11 上手机!小米 8、一加 6T、微软 Lumia 950 XL 都可以运行
☞SwiftUI 很难赶上 UIKit?

碰上这种 Wi-Fi,iPhone 秒崩!相关推荐

  1. 罗永浩卖半价iPhone秒没,网友晒开挂软件,怪不得你抢不到

    5月31日晚间,罗永浩开启了618购物节首场跨夜直播. 在这场直播活动中,罗永浩带来了半价新iPhone SE.半价iPad Air 3.半价Switch以及半价AirPods Pro等,其中新iPh ...

  2. wifi频率和zigbee干扰_浅谈ZigBee和Wi—Fi的共存和干扰

    龙源期刊网 http://www.qikan.com.cn 浅谈 ZigBee 和 Wi - Fi 的共存和干扰 作者:姜伟 朱凯 刘童 来源:<科技视界> 2013 年第 16 期 [摘 ...

  3. 比较802.11ac(Wi‑Fi 5)和802.11ax(Wi‑Fi 6)

    MIMO 802.11ac仅在下行模式下,支持多用户MIMO. 802.11ax不仅下行链路:也在上行链路支持MIMO功能,因此多个用户可以同时上传视频. 调制方法 802.11ax具有更高的调制方案 ...

  4. html5手机壳,这款帅炸的手机壳,能够让你的iPhone秒变安卓

    [PConline资讯]手机套毫无疑问是大家使用最多的手机配件,一直以来各种手机配件厂商推出了各种各样带有功能性的款式,最常见的是充电宝外套,还有一些带双SIM卡与存储空间的等等.目前在外国著名众筹网 ...

  5. android环境监测,基于Wi―Fi和Android家居环境监测与实现

    摘 要 为了人们生活环境健康安全,实现家居环境检测,利用现在手持智能设备,设计出一种基于Android的家居检测系统.本文采用了具有Android操作系统的智能手机或平板电脑作为家居设备终端,以STM ...

  6. 马斯克亲口承认:自动驾驶的开发难度超乎想象;小米再发1.2亿股权激励;Firefox Lite 已死|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  7. 首拆:iFixit完整版 iPhone X拆解报告

    今天苹果发布了最新版的iPhone X,国外拆解网站iFixit第一时间就将其拆解了,我们也第一时间为大家带来iFixit的拆解报告. iPhone X 的基本配置如下: A11 仿生 芯片,内嵌 M ...

  8. 最拉风的iPhone玩具AR.Drone飞行器拆解

    本文转自:电玩巴士 关于AR.Drone飞行器的报道我们已经看过不少了,这款可爱的由iPhone或iPad控制的无人驾驶小玩具可玩性极高.而关于iFixit我们也已经有不少认识了,他们拆了iPhone ...

  9. 如何分享 iPhone 网络到 Mac?

    带着Mac到外面,如果没有公用 Wi-Fi 网路的话,也不必担心,因为只要拿出一传输线,就能通过 USB 分享 iPhone 网络到电脑,比开热点网络的延迟更少! 通过 USB 分享 iPhone 网 ...

最新文章

  1. 二十二:制作app的时候超出部分不能滑动
  2. 标签之美三——超链接的嵌入
  3. 卷积核个数和输入输出通道数的关系
  4. 支持与不支持in-place操作的OpenCV函数汇总
  5. VB常用内部函数大全一览表(建议收藏)
  6. 二叉树删除节点+思路分析
  7. ViewPager做出广告轮播特效
  8. 自动论文生成器 python_python生成器
  9. linux查找指定修改时间的文件夹,linux 查找某个日期以后修改过哪些文件 shell脚本...
  10. java读文件指定行开始到文件的最后
  11. PS网页设计教程V——如何在Photoshop中创建一个商业网站布局
  12. 西南科技大学OJ题 顺序栈基本操作的实现1044
  13. IT工程师学习方法和发展路线
  14. 英语翻译作业(十二)
  15. 手机定向root,指定APP获取root权限
  16. [生而为人-思考] Knowledge Cooking -5th 分享会记录
  17. Tika解析rar文件
  18. 量子计算与量子软件(一)
  19. 用于威胁情报分析的虚拟机
  20. Zbrush究竟是个什么软件?带你看看ZB的世界

热门文章

  1. ROS学习笔记七:使用rqt_console和roslaunch
  2. LeetCode 674. 最长连续递增序列 (滑动窗口 计数法)
  3. xml TO json(非递归实现)
  4. 三元表达式三个条件判断
  5. 【B/S】ASP.NET---验证码-生成和切换
  6. 静态方法、静态内部类和抽象方法的注意问题
  7. Java:JDK、JRE和JVM的关系(图示详解,一眼就能看明白!)
  8. Python:print用法大全
  9. java类装载器原理
  10. Leetcode 440.字典序第k小的数字