一、小白剧场
小白:东哥,你现在用的是什么系统的电脑呀?
大东:用的是Windows系列的电脑,你今天怎么突然谈起电脑来了?
小白:别提了,现在的电脑更新换代太快了,前几年买的电脑已经跟不上现在的配置了。
大东:是内存不够还是磁盘不够?
小白:感觉这两个都有点不够,可能因为我最近电脑上装了几个虚拟机,所以现在运行起来特别慢,每次都要卡很久。
大东:那你可以换台配置高点的电脑呀!
小白:这不是要省钱嘛,东哥,能不能给些建议呀?
大东:如果内存不够的话,你可以买几块型号相同的内存条,插在电脑上,这样可能会速度快些。
小白:可能?
大东:没错,因为电脑的速度不是你内存大就一定快的,还要看硬件以及CPU。
小白:额……看来我还真是个电脑小白,感觉自己啥都不懂。
大东:没事,你可以尝试换一下内存条,只有实践才是学习最高效的方法。
小白:确实,我记得我买的第一台电脑是Windows系统的XP,当时啥也不懂,全靠自己摸索才学会用电脑。
大东:以后就叫你独立白吧,不过XP的系统确实是好早之前的系统了。
小白:嗯嗯,现在Windows系统基本都是Win10了,像XP的系统已经都淘汰了。
大东:不过说起XP系统,我倒是想起一件最近在安全圈很火的一件事。
小白:啥事,XP系统不都已经淘汰了吗?怎么还会引起热度呢?
大东:小白,你的这种想法可不对,即使有些电子产品的旧版本已经被淘汰了,但是新版本也是从旧版本的基础上改进的,所以充分的了解旧版本对于我们研究补充新版本会有很大的帮助。
小白:东哥,我明白了,你快讲讲XP系统到底发生了什么大事吧。
大东:其实之前的谈话我也有提及到,可能你没有注意到。
小白:东哥,不要吊我胃口了,快揭晓吧!!
大东:其实就是Windows XP系统的源代码被泄露了。
二、话说事件
小白:什么?东哥,你没有开玩笑吧?!
大东:当然没有了,虽然刚开始我也认为这是假的,但是这确实是真的。
小白:东哥,能不能详细的介绍一下呀?源码是在哪里泄露的?泄露的内容里都有什么?
大东:别着急,我先回答你的第一个问题吧,事件起源于论坛,前几天4chan 论坛的一名用户发帖称 Windows XP 源码已被泄露,并在帖子里面附上了一张正在解压 Windows NT 内核源码的截图。
Windows NT 内核源码的截图(图片来自网络)
小白:那泄露的源码是XP系统的哪个版本呢?
大东:从解压路径来看,被泄露的系统版本是 Windows XP SP1。
小白:一会去那个论坛看看。
大东:帖子放出来没多久就被归档了,暂不允许回复。
小白:东哥,除了这个,该用户没有提供一些其他新的情报吗?
大东:有呀,已下载泄露文件的用户提供了如下截图,可以看到整个文件大小为 42.92GB,从目录结构来看,被泄露的内容还包括 Xbox 操作系统源码,以及 Windows NT 5 内核、Windows NT 4 内核和 Windows NT 3.5 内核源码。
泄露文件目录(图片来自网络)
小白:这也太恐怖了吧!!
大东:不仅如此,泄露的文件还有 Windows 2000 等其他版本操作系统的源码,其中名为"misc"的文件夹体积最大,总共 31.17GB,占到了整个文件的 70%。
小白:这个提供源码的用户是怎样收集到的这些文件?难道是从微软内部拿到的吗?
大东:创建并提供种子下载的用户表示,这些文件已在黑客中秘密传播了很多年,他花了大约2个月的时间收集了所有被泄漏的文件,并已经检查了所有的存档,以确保它们的真实性。
三、大话始末
小白:我还是觉得XP系统已经过时了,它的源代码的泄露不会对现在的Windows系统产生太大的影响。
大东:其实源码泄露的最重要的影响在于它可以拿过来更好的去分析里面的漏洞。因为Windows的开发,这些代码之间是有同源性的,如果是拿上这个源码去分析,对于专业漏洞人员就可以分析出来现在新的一些操作系统的漏洞。
小白:有没有什么例子呢?
大东:其实像Windows内部的堆结构我们一直都不清楚,堆结构都是靠专业人员的猜测以及部分泄露的代码建立的,如果我们可以看到Windows XP系统的源码,那么就可以很清楚的知道堆的结构了,对于我们发起堆溢出攻击可能会更加容易,也可能会研发更多的攻击手段。
小白:但是它们之间肯定是不同的呀。
大东:没错,不过基础的架构都差不多,现在的架构只是在原有的架构上加了更多的安全机制。
小白:东哥,我还有个问题,泄露的源码是XP系统的,会不会对现在的Win10系统产生影响?
大东:小白,你这个问题问的很好,其实此前已经有微软内核工程师 Axel Rietschin 发表了一篇博客,带大家一窥Windows 10 内核的魅力。
小白:那他都介绍了什么?
大东:Axel 介绍,Windows 10 与 Windows 8.x、7、Vista、XP、2000 和 NT 的代码库是相同的,其中每一代都在之前的基础上进行重大的重构,并增加大量新功能,改进性能和硬件支持,此外还有安全性的提升,同时保持非常高的后向兼容性。
小白:这个说法跟东哥刚才说的很相似呀,看来大多数新系统都是在旧系统的基础上改进的。那这些参考的代码还有其他途径获得吗?
大东:在 GitHub 上其实可以找到 Windows 内核研究的泄露副本,虽然这些代码已经过时且很不完整,但它们还是具有很高的研究价值。
小白:为什么这么说呢?
大东:我给你举个例子你就明白了,比如 wrk-v1.2/base/ntos/config 源码实现了一个大名鼎鼎的内核组件配置管理器 Registry,也就是注册表,它在内部称被为 Cm。
小白:听你这么一说,我还真的对这个产生了兴趣,东哥,这个系统内核是用什么语言编写的?
大东:Axel 介绍,ntoskrnl.exe 内核大部分是使用 C 编写的,在内核模式下运行的大多数内容也是用 C 编定的,包括文件系统、网络与驱动程序等。其中也包含一些 C++ 代码,而越靠近用户模式、越接近新的源码时,C 的使用变得越来越少,反之 C++ 变多。
内核的简要介绍(图片来自网络)
小白:那Windows10的内核也是这样吗?
大东:我们可以具体看一下 Windows 10“DVD”的源码,我猜测其中 98% 由 C 和 C++ 写的,而 C在其中占据大比例。此外,.NET BCL 与一些相关库和框架通常都是用 C# 编写的,“但它们也只不过是带有几座 C++ 小岛的 C 汪洋大海的一粟”,它们来自不同的部门,代码并不属于 Windows 源码树。
小白:那看来我是应该要好好学习一下C和C++了。
大东:你们本科不都学过这两种语言了吗?
小白:学是学过,但是感觉学的内容特别浅,而且当时也没有认为这个很重要。
大东:但你们的老师肯定跟你们讲过:C语言可以说是高级语言的基础,虽然C语言问世了很多年,但是在各种语言的使用排行榜中依旧排名前十。
小白:这个老师有介绍,但是当时没有好好听,而且现在不是有更方便的语言吗?比如说python。
大东:虽然说现在的一些语言更容易学习和实现功能,但是如果你尝试用C语言和其他语言写功能类似的代码,你会发现C语言写的代码会更快。
小白:我还真的没有试过这个,过会我去尝试一下。
大东:不仅如此,其实大多数语言的底层也都是用C实现的,只不过他们把一些代码封装起来,这样我们写代码的时候就不用自己写某种功能的代码了,只需要调用API就可以了。
小白:那为什么底层的代码不用汇编语言来实现呢?汇编语言不应该比C语言更快吗?
大东:确实,但是汇编语言的语法比较难懂,不如C语言简洁,而且C语言的代码中是可以嵌入汇编代码的,他们可以兼容运行。
小白:听东哥这么一说,更加坚定了我学好C语言的决心了。
大东:哈哈,其实有本科的知识基础的话,想要深入的了解C不算很吃力。
小白:等我学好了C语言,我就去搜集研究下Windows 内核研究的泄露副本,等我研究透了我就不再是小白了。
大东:那你的梦想可能要落空了。
小白:为什么?
大东:你知道吗,在windows源码泄露后,研究人员才发现Windows 源码的规模如此巨大,这可以说是一个真正史诗般的巨型项目。
小白:到底有多么大呢?
Windows代码树(图片来自网络)
大东:完整的源码树包含所有代码,如上图所示,测试代码与一起构成“Windows 源码”的所有内容加起来超过 400 万个文件、50 万个文件夹、大小超过 0.5 TB,其中包含了构成 OS 工作站、服务器和所有版本的工具、相关开发工具包的每个组件的代码。
小白:我的天!感觉我内心的热火突然被浇了一盆凉水,这么多的代码,要多久能研究完呀?
大东:网上有网友估计完全查看这些源码的文件名,并试图理解源码具体是用来干什么的,需要花上一生的时间。
小白:果然微软能发展到今天的规模是有原因的。
大东:其实有研究人员举过这样一个例子:有一次,他离开了一个 Git 分支几个星期,当他再次回来时,已经落在了将近 60000 次 commit 之后。
小白:看来研究人员的高薪之下隐藏的也是无比巨大的压力呀。
大东:没错,所以我们不应该在这次事情中仅仅只看到代码泄露的利益以及风险,我们更应该看到这种努力的品质,然后借鉴学习。
小白:鼓掌!东哥说的太好了,经过今天的学习,感觉收获良多。我要去学习C语言了,再见,东哥!
参考资料:
1. Windows XP源码泄露https://mp.weixin.qq.com/s/CXRuDY3Kqfyljgb7V54MdQ