TuskedEvening0's Blog

面对手机病毒,9008有必要吗

Preface:为何要写

之前VikACG和PicACG那边对接人厄夜闹了点小事故。其中提到了这么一条。

https://t.me/bkeye/3074

在VikACG和PicACG的公告里都写着病毒只有9008才能清除。我个人当时觉得不太可能,于是写了篇文章正好提到了那个。

我试图问对方是否有PoC,被他ban+delete了。有人也转发了我发在VikACG的文章,也被删+ban了。

随后群内一人发了如下消息。

很显然他的逃避和其群内人的辩解正好说明了我的推理还是太过苍白,故单开文章说明。

原文省流?

即使是拼多多如此著名的案例,也不可能只利用一个漏洞就能攻破手机,也是需要为各品牌的机型做单独适配;而且,拼多多案例也没伸到系统外,fastboot刷机甚至recovery清data(恢复出厂设置)即可解决。

如果病毒要固化到只有9008可以清除,应当是什么样的?

*这是对发布于VikACG的那篇前传的补充。

一般手机启动流程应当是怎样的

目前手机都有什么架构的

手机自诞生以来共应用(或即将应用)了如下处理器指令集架构:

  • ARM:最常见也是最早的。iPhone使用了三星的S5L8900,魅族M8则使用了三星的S3C6410。
  • x86:阿童木,启动!最著名的设备可能是小米平板2。
  • RISC-V:新兴的开源指令集架构。目前我不清楚有什么设备在用。

它们都是怎么启动的?

提前声明一下,我嵌入式学的很烂,有问题建议评论区告诉我下,谢谢。

x86

x86的启动流程我找了个小米平板2的刷机流程,从流程上看跟x86电脑没什么区别。这里直接放链接。

x86 处理器第一阶段 Bootloader 启动过程详解

x86架构: 硬件启动过程分析(附引导启动代码)

当然还有个更简略的:

ARM

这不就巧了么,我们学校正好有门课叫嵌入式系统,里面用了S5PV210和S3C2410举例。虽然讲义里“虽然现在诸如智能手机这样的嵌入式设备采用的硬件远比 S3C2410 先进,但想让固化在 Flash 芯片中的 bootloader 在内存中运行起来去加载操作系统,也许要一套类似的机制。”,但是,我实际找到的资料显示,不是也许,是每个解析都用的远古资料讲述。我虽然找到个ARM v8的,但是也是大同小异,最大区别是分成了可信世界(相当于x86的硬件启动)和正常世界(操作系统启动),在yEd里画流程图看起来是多俩组框子(实际上包含了TEE的启动)。

这里先放我找到的关于ARM v8的资料。

ARMv8架构u-boot启动流程详细分析(一)

再放图吧。

下面是S5PV210的。(很草的是,我们老师引用了csdn里的文章,这里贴一下: 嵌入式启动之四:S5PV210 IROM & BL0启动 原则上来说讲义是不能贴出来的)

下面是ARM v8的。

RISC-V

这个有点太新了,而且RISC-V有点太过碎片化,我实在搞不清楚我找到的流程图是否可以当作是所有RISC-V的设备的行为。

Linux那边正好有个文档,正好说明我的疑惑是多虑的。

RISC-V内核启动要求和限制

这里干脆引用赛昉科技的图。

一图看懂RISC-V星光板的启动流程
总结

从上面那几张启动流程图中不难看出,要做到启动到操作系统,需要以下几步:

  • 上电(废话)
  • 处理器初始化
  • 外围设备初始化与状态检查
  • 内存初始化并将OS内核等灌入内存
  • 启动OS loader并将信息呈递给它
  • 启动操作系统

9008相比fastboot会动什么

9008是什么

9008是高通的深刷端口。一般可用工具为QFIL、QPT等。

联发科机型通常使用SPFlash等。

以下“深刷”(深度刷机)统称为9008。

fastboot是什么

文档,请。

Fastboot

省流:

The fastboot protocol is a mechanism for communicating with bootloaders over USB or ethernet. 

Fastboot协议是一种用于与Bootloader通过USB或以太网交流的机制。

9008和fastboot有权限上的什么区别

如上,fastboot最终是操作的Bootloader,自然会受到Bootloader的限制;9008深刷则是直接刷写手机底层,完全绕过了Bootloader。

我想你应该能猜出来9008相比fastboot能动什么额外的地方了,对,基带/字库,也就是承载手机最基础信息的部分。普通fastboot一般会因Bootloader的限制不能动也不会动这些部分,而9008却可以。一般的,基带信息等被存放在persist分区中。

总结推理

所以很简单,要保证9008能清,首先不能烧写在firmware里,更不能烧CPU(而且你在软件层面也烧不了),那就只有一个可能,写在persist里。

然而写入persist是一个极其高危的行为,具体高危到什么程度呢,搞炸它轻则掉基带上不了网,重则直接无法开机只能工厂包深刷。

然而实际执行如何?

如果写firmware呢?

很简单,写不了

以英特尔ME为例,大多数新闻高频词汇都是禁用,而非热更新。而ME本质上就是一个Minix在北桥/南桥跑。

而ARM那边呢?更简单,甚至不是一个操作系统。以比较古早原始的S5PV210为例,“IROM 是位于 S5PV210 处理器片内的一个大小为 64KB 的 ROM,里面存放着 BL0 阶段的程序。这段程序是 S5PV210 处理器出厂后就固化好的,用户是无法对其进行删除修改等操作的。这个固化程序一方面提供了处理器上电后的些初始化等功能,也为用户提供了一些有用的诸如内存拷贝函数等接口。”

9008都拿它束手无策,更别提一个普通程序了。

那rm -rf /*日炸EFI是怎么个回事呢?很简单,这种行为破坏了EFI的变量设置,常见于某些实现不规范的UEFI固件。链接如下: In A UEFI World, “rm -rf /” Can Brick Your System

如果写persist里呢?system/vendor/boot呢?

很好,你已经解决了第一步:固化。现在你需要考虑自动运行的问题了。

自动运行的话有两种路线,随固件启动和随操作系统启动。修改固件这个想都不要想,如上所述,被堵死了;剩下的只有个随操作系统启动了。

然后你就会发现,用户随便fastboot刷个系统你的程序启动链就炸了。

Android启动流程

是的,你甚至还是逃不开启动流程。不过这次是从OS loader加载系统开始说了。

这里还是再放个链接: Android启动过程-万字长文(Android14)

目前手机刷Linux甚至Windows的不多,这里不叙述。

病毒硬要塞的话上面几个都可以考虑一下。

真的可以吗?

然而,安卓9后已经不可以了。此处感谢People11指出具体哪个版本堵的。怎么堵的?很简单,挂载system等为ro(read only,只读)就好。加上,现在有个文件系统叫EROFS!它防的就是那些劫持挂载system等为读写的老六!

那Magisk是怎么搞的能在system里改?很简单,还是挂载!挂载指定目录到对应地方就好了!至于被挂载的地方在哪呢,data分区能读写,那就决定是你了,data!

等下,那不就……恢复出厂设置就可以了吗?!

如果就单纯的想搞破坏呢?

售后,启动!售后真的能帮你刷回去,还会帮你做好一切检测保证没问题!做不好甚至可以换新!

而且,现在能做到搞破坏的已经很罕见了,因为现代病毒的目的已经脱离了炫技,而是转到“偷偷的进村,打枪的不要”。既然要做到民用领域赚钱,要么默默加密不要让用户发现,然后弹个窗告诉用户你被勒索了,要么就伪装自己尽量不要让用户发现,实现隐私的可持续盗取。这俩主流道路主打的就是一个字:装!你要是把人系统搞炸了,人直接去趟售后就得了,你不光吃力不讨好,要是搞的太过牛逼了还会进去吃牢饭!不知道的还以为你缺钱买蔡英文色图了就去做病毒打砸抢,浑然不知人家买了保修,还拿你当傻der!

总结

遇到病毒用不着9008,轻者卸载,中者恢复出厂设置,重者fastboot,现在这年头真的用不着9008。


发布于

分类:

标签:

评论

发表评论

许可协议