peeperp 发表于 2023-9-18 16:12:29

如何看待 Windows XP 源代码泄露?XP 源代码首次被公开曝光会产生哪些影响?

The Verge 消息,Windows XP 和 Windows Server 2003 的源代码近日在多个文件分享网站出现。虽然泄露文件称这些代码已经在个人分享下流传多年,但这是 Windows XP 的源代码首次被公开曝光。The Verge 确认了这些代码的真实性,而微软发言人则表示,目前公司正在调查此事。

wowo0888 发表于 2023-9-18 16:13:17

作为生成计算机可以识别代码的源头,源代码同时也是软件设计的指导思想,更是解决具体问题的方法,因此其同时也是一款软件的基石与核心。正式由于源代码是如此的重要,所以在软件行业中对源代码的处理方式,既有象征着开放与共享互联网精神的开源模式,同时也有传统商业逻辑的闭源模式。


http://picx.zhimg.com/v2-0eb544337a67cb9c000e102501547fb9_r.jpg?source=1940ef5c

前者的代表就是程序员所熟悉的GitHub,而后者的典型无疑就是微软的Windows系统了。事实上早在1976年,比尔·盖茨所发表的《Open Letter to Hobbyists》,就奠定了微软商业软件的闭源思维模式,而作为这个商业帝国的明珠,Windows系统的源代码自然是被封锁在重重的保险之中。

作为这个星球上可能是商业价值最高的软件之一,Windows显然不可能没有贼惦记。日前,海外论坛4chan上的一名用户就放出了一份声称是Windows XP源代码的资料。如果算上今年5月Xbox与Windows NT 3.5的源代码泄露,这也已经是微软方面今年被曝光的第二次源代码泄露事故。

在安全研究人员的初步分析后,认定此次被泄露的应该是Windows XP SP1与Windows 2003的源代码,并且其中还包含了MS DOS、Windows CE,、Windows Embedded和Windows NT的源文件,并且在应用层还有DirectX、iis、mshtml,以及wininet的代码。


http://picx.zhimg.com/v2-1fcc83dcfe19c27590cbbbfb79042d19_r.jpg?source=1940ef5c

而至于泄露的途径,考虑到微软从2001年就开始通过Windows Research Kernel计划与高校研究人士和政府机构等,共享Windows系统源代码,因此几乎所有这些合作机构都有可能会造成源代码泄露。而此次这位曝光了Windows源代码的4chan用户也证实,其实这些资料已经在黑客圈中流传了很久,这只是第一次正式公布而已。

秘密之所以成为秘密,是因为知情人是有限的,因此随着知情人士的增长,保密的难度也就自然变大了。正是因为微软方面早就已经向相关机构公开了Windows XP的源代码,所以在做出这项选择之前,显然其就已经对泄露做好了心理准备。这或许也可以解释为何今年再次发生源代码泄露事件后,微软的反应相当淡定,仅仅只是表示正在调查了。


http://picx.zhimg.com/v2-e07d7fde804550781f81bc35074649ed_r.jpg?source=1940ef5c

事实上,除了Windows Research Kernel计划之外,其实合作伙伴也同样是微软源代码泄露事件中的“猪队友”。时间倒退到3年前,在2017年一共有32TB的与Windows相关的源代码被上传到了Windows开发爱好者网站BetaArchive,而在这份被泄露的源代码中,包含了Windows 10的硬件驱动程序、USB以及WiFi协议栈、存储驱动程序以及ARM平台的OneCore内核代码。据悉当时泄露源头是ource kit ,也就是微软与合作伙伴,如联想、NVIDIA等共享Windows相关代码的平台。

相比此次微软方面的“淡定”表现,如果源代码的泄露是在意料之外,并且重要性极高,无疑反应就会完全不同了。早在2004年2月12日,Windows 2000和WindowsNT 4.0部分源代码泄露的消息被公开,由于其中WindowsNT 4.0的代码非常齐全,甚至可以编译出绝大部分系统核心文件,因此微软方面在当天下午就做出了回应。时任发言人的Tom Pilla对此表示,“今天,我们发现Windows 2000和WindowsNT 4.0的部分源代码非法的出现在互联网上”,并且还警告到,任何第三方传播这些源代码都是非法的行为,微软将对此采取严肃行动。


http://picx.zhimg.com/50/v2-0f0bb4ddc8de7e95368af4c7779e6d39_720w.jpg?source=1940ef5c

然而Windows 2000和WindowsNT 4.0都是当时微软正在运营的主力系统,拥有着极为广泛的个人与企业用户,因此一旦源代码被泄露,所造成的影响将不可估量。但作为一个已经早在2014年就结束了官方支持的系统,微软方面已经不会再对Windows XP提供新的系统安全补丁更新,再加上目前使用Windows XP的用户仅为全部的1.26%,已经成为了绝对的非主流。尽管Windows系统的开发是建立在历代系统的基础之上,因此从Windows XP的源代码中或许也能窥视出如今Windows 10系统的某些特征,这对于黑客或者从事漏洞挖掘的技术人员而言,无疑是能够从代码中分析出系统漏洞。

因此这次源代码的泄露对于微软来说,显然并没有太多实质性的影响。毕竟Windows XP的时代已经过去,同时微软对于Windows源代码的闭源模式,也让黑客的行为成为了盗窃,这就造成了一切利用被泄露源代码的商业项目都有了法律风险。所有也导致在相隔了16年后,微软对于性质类似的这两件事,在态度上的截然不同。



http://pic1.zhimg.com/v2-3b78428543fe74e8416b7cc05eceed2d_r.jpg?source=1940ef5c

事实上,Windows的源代码泄露可能也并不是什么大事。从商业层面上来说,泄露的源代码只具备一定的参考价值,并没有太大的使用价值,就与可口可乐的配方一样,虽然是商业帝国的重要基石,但显然并不是全部。而对于黑客来说,庞大的Windows系统也更是债多了不愁,一抓一大把的漏洞让黑产并不需要依赖源代码来发现漏洞进而牟利。


http://pic1.zhimg.com/v2-25fa193aa357a4436e6aeaebf0b66e54_r.jpg?source=1940ef5c

当然,就像有句成语所说,“城门失火殃及池鱼”,这次Windows XP源代码泄露最可能的结果,就是建立在针对Windows逆向工程之上的ReactOS,又双叒叕要倒霉了。可能对于许多朋友来说非常陌生的ReactOS,其实是一个致力于开发免费且完全兼容Windows XP系统的项目,并且为了避免版权纠纷,ReactOS必须明确完全区分并且不衍生于Windows。

因此ReactOS的开发采用了非常典型的净室技术(clean-room),也就是将研发人员分成两组,第一组负责对原系统进行逆向工程,分析出其设计要素与思路,第二组则负责开发新软件。但两组人员不能直接接触,以确保“净室”的封闭性,并实现开发过程与环境的“净化”,最终规避版权保护问题。


http://picx.zhimg.com/v2-dd1f1efc1b3ee51ae7700c3521689fd6_r.jpg?source=1940ef5c

然而在2004年WindowsNT 4.0源代码泄露之后,事情就发生了一些变化。由于Windows并没有开源,而ReactOS又做的是克隆Windows系统的工作,这就导致了ReactOS项目必须要自证清白,而为了配合微软方面的审查,导致其不得不中断开发配合调查,最终导致项目进展停滞了3年之久。在经过了十多年的努力后,ReactOS如今也已经开始进入落地阶段,如果再迎来一次审查,也就意味着未来将陡增变数。

所以说这次源代码的泄露对于微软来说,或许并不会有很大的影响,但是对于以ReactOS为代表的克隆Windows系统项目来说,可能就并不是一个好消息了。

zcheng5979640 发表于 2023-9-18 16:13:44

洋大人终于成功移植Windows 2000源码的Winlogon。另外AMD64的进展也比较快。

http://pic1.zhimg.com/v2-4603fda553f9d9ef973a04977d7f886d_r.jpg?source=1940ef5c
4chan的洋人研究成果的结晶,Win2003源码编译全教程在此:
Windows Server 2003 (NT 5.2.3790.0) build guide洋大人真不傻,64位系统下面16位的编译等工具默认运行不了,他们使用了日本著名模拟器开发者Takeda Toshiya开发的MS-DOS Player这个DOS命令行模拟器在64位系统上模拟运行它们。
我也在自己的64位Win10机器上成功地编译了XP 3790。

http://picx.zhimg.com/v2-e73d9346332f2fb96e30acbdd1c23de3_r.jpg?source=1940ef5c
至于图片里为什么有乱码?因为很多源代码文件的字符串中用了大量的ISO-8859-1特殊符号,在主系统是GBK内码的时候,有的无法解析,有的甚至会直接吃掉引号导致编译错误,我对其改了不少地方才能编译完成,这里的乱码就是后果之一。
<hr/>大家也许知道,EncodePointer/DecodePointer是XP SP2/2003 SP1增加的函数,在VS2010以上的CRT(包含静态库)里默认都链接进去了。其实就是把某些指针掩耳盗铃地自己随机化一下。
但也因此,用了这两个函数、用了上述CRT版本的程序在我们编译的系统上就跑不了。反正En/De输入/输出的都是真实指针,都用上这个系统了,安全就不是什么大问题,干脆在kernel32的源码里直接加上这两个函数的stub吧,结果成功了。

http://pic1.zhimg.com/v2-5dd1422ce1f1c315751dfeb5df8e8170_r.jpg?source=1940ef5c
<hr/>已经根据洋大人最新的教程,编译成功、实机运行了XP 5.2.3790 Home。

http://pic1.zhimg.com/v2-5d64f8367ab7ee5131c9c7a174811e0f_r.jpg?source=1940ef5c
<hr/>洋大人搞了个新测试证书,如果使用它,同时将部分硬编码了老测试证书密钥的源文件修改之后,编译、安装2003和XP 3790时,就再也不需要把日期调到2003年8月了。不过目前还不知道怎么去破解系统安装后的激活。

http://picx.zhimg.com/v2-5e6ec0c68b513c7772e1a49a4eb4cdf4_r.jpg?source=1940ef5c
有一些文件里面有不能在代码页936下表达的字符,在简体中文系统下会导致编译错误。
update 20201028 简体系统下需要修改如下的文件,将字符串里面的不可表达字符用十六进制代替,注释中的制表符改掉。

http://pic1.zhimg.com/v2-2d945c1e8e5f419aa54ca7babc50cb73_r.jpg?source=1940ef5c
<hr/>为什么winlogon的源码,内核里exinit和systime两个模块的源码会没有呢?在NT5系统下,Winlogon包含大量和激活相关的代码;据说洋大人用2000的exinit、systime源码编译成功2003后,会经常因为Winlogon的原因而蓝屏。
很有可能,泄露出来的这套源码不是给微软自己用的,微软为了防止激活系统因为这些源码而被轻易破解,而故意去掉了这些源码。
<hr/>2003 以及 XP 3790(基于2003代码的XP)已经在我这里编译成功。用的“开发机”是一台刚换上新SSD的ThinkPad X200s。

http://pic1.zhimg.com/v2-151365e6cc15595dee6f964fc28f8075_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-e2fa157c8c365403e6d2311fe85d3f24_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-6d1b200cc9c528cb49d0a4c09a460b92_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-518ba695f6d3158f8ca99266c0bb2bbc_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-a2f88c2f5cd756278e3951f19723b0d2_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-e5c6a51d80ad7d74ff14593f6dd088c7_r.jpg?source=1940ef5c

<hr/>根据4chan的人的研究,2003源码是可以编译的。XP源码的内核里面少一个模块,还少了winlogon的源码。在最后生成安装包和iso的时候,需要用2003原版ISO里的部分没有源代码的文件。

http://picx.zhimg.com/v2-86d57d6c3303311779ca2eb02f21a68a_r.jpg?source=1940ef5c
我新买的SSD到了,现在拿了一台x200s出来试2003源代码的编译,祝我成功吧!
<hr/>XPSP1源码包解压后大小约6.4GB,文件和目录的总数超过30万个,在FAT32文件系统上占用的空间可能超过10GB。我暂时还没有尝试编译,估计得专门拿一台老机子,装个XP系统在一块没掉速的SSD上来试。

http://pic1.zhimg.com/v2-dfca0ed263934f0c6b050558d3458553_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-f4cb5a7ad4e8b008837ac5f6e5139ea9_r.jpg?source=1940ef5c
本源码包可谓森罗万象,有大量的工具、库等编译整个系统所需的依赖。光微软的CL编译器就至少含有4~5个版本,目标平台从DOS/Win16(为了编译NTVDM等16位支持),到IA64、AMD64都有;源代码也是森罗万象,甚至包括了部分第三方授权的源代码。举个例子,这个包里面有智能ABC输入法的源码,在NT\windows\feime\chs\ntabc\winabc下,和微软的源码不是一个风格,英文+拼音混合的注释和函数名、变量名什么的。。。
#define VK_DANYINHAO 0xc0      // [,]char = 0x60
#define VK_JIANHAO   0xbd      // [-]char = 0x2d
#define VK_DENGHAO   0xbb      // [=]char = 0x3d
#define VK_ZUOFANG   0xdb      // "["char = 0x5b
#define VK_YOUFANG   0xdd      // "]"char = 0x5d
#define VK_FENHAO    0xba      // [;]char = 0x3b
#define VK_ZUODAN    0xde      // [']char = 0x27
#define VK_DOUHAO    0xbc      // [,]char = 0x2c
#define VK_JUHAO   0xbe      // [.]char = 0x2d
#define VK_SHANGXIE0xbf      // [ ]char = 0x2f
#define VK_XIAXIE    0xdc      // [\]char = 0x5c
    if (tmp_chr!=0xff){      //not fuher shengmu
//      if (tmp_chr == 'U' )
/* Because 'I' also dont stand for any ShengMu, so when you type in a ShengMu,
   'I' should also be ignored.,Fix Bug27914
   Weibing Zhan,3-15-1996
*/
      if (tmp_chr == 'U' || tmp_chr == 'I')
            {current_number=0;
            MessageBeep(0);
            return(STC);}
      current_number=1;
      sda_out=input_char;
      return(CLC);
      }
/*************************************************
normal()
**************************************************/
int WINAPI normal()
{
    extb_ps=0xffff;
    by_cchar_flag=0;
    wp.yjs=0;
    wp.xsyjw=0;
    wp.dw_count=0;
    wp.dw_stack=0;

    if (in.info_flag==0x81)
      by_cchar_flag=1;
    detail_analyse();
   
    if (!convert(0)){
      zdyb();
      return(STC);
      }
      
    wp.xsyjs=wp.xsyjw;
    wp.xsyjw+=word_long;
    wp.dw_stack[++wp.dw_count]=(BYTE)wp.xsyjw;

    if (by_cchar_flag!=1){
      if (wp.yjs==wp.xsyjw){
            if (wp.xsyjs!=0){
                sfx_attr=2;                     //mark for finding sfx_table
                rzw();}
                }//if (wp.xsyjs)
      
      else{
            if (word_long<=1){
                if (wp.xsyjs==0){                                                                              
                  sfx_attr=1;                     //mark for finding sfx_table
                  rzw();}//if (wp.xsyjs)
                }//if (word_long)
            }//else

      }//if (by_cchar...
      
    if (wp.yjs<=wp.xsyjw)
      jiyi_mode=0;
    else
      jiyi_mode=1;

    return(CLC);
               
}所有输入法都加了一段禁止在登录界面打开“帮助”或者“设置”的代码,防输入法漏洞。

    if ( lpImeL )
    {
       if ( dwSystemInfoFlags & IME_SYSINFO_WINLOGON )
       {
            //the client app is running in logon mode.
            lpImeL->fWinLogon = TRUE;
       }
       else
            lpImeL->fWinLogon = FALSE;

    }
    if ( lpImeL->fWinLogon == TRUE )
    {
      // In Logon Mode, we don't want to show help and configuration dialog

      EnableMenuItem(hCMenu, 107, MF_BYCOMMAND | MF_GRAYED );
      EnableMenuItem(hCMenu, 110, MF_BYCOMMAND | MF_GRAYED );
      EnableMenuItem(hCMenu, 109, MF_BYCOMMAND | MF_GRAYED );
    }
编译方法:首先你需要一个XP或者2003,32位系统的环境。
运行\NT\tools\razzle.cmd,准备开发环境,然后再运行build等命令即可。绝大多数用到的工具和库已经在源码包中。
关于Razzle的解释:
Random internal Windows terminology: IDW, Razzle, and their forgotten partners IDS and Dazzle | The Old New Thing编译过WRK的,很可能就知道如何完成这个编译过程。
据说已经有洋人编译了可运行的版本,不过少一些东西,比如三维弹球那些,源代码不属于微软的模块,还有ohci1394.sys等一些东西。但还没人放出全系统的截图。

http://pic1.zhimg.com/v2-6f70c34b63f08ac74710b92d50e7a47c_r.jpg?source=1940ef5c
其实没有什么特别,和十几年前的nt4/2000泄露源码包结构类似,都是用的nmake工具链,sources文件控制各模块编译。就是里面有些不明资源被挖出来了,还有个从未见过的主题,按钮贴图仿macosx的。

http://picx.zhimg.com/v2-90cb236318936156140393099fa7ddf4_r.jpg?source=1940ef5c
微软软MIDI合成器的目录里面有个gm8.dls,应该是gm.dls的低质量版本,最后好像在发行版中未使用。
对于我来说,微软正宗的DirectUI库还是很不错的。

wx520 发表于 2023-9-18 16:14:40

在我看來,Microsoft幾乎不會因此遭受什麼打擊,但是ReactOS的開發組完蛋了......因為他們又得花一大波時間來證明自己是完全Clean Room做出來的ReactOS。而且Windows NT5.1的源代碼都洩漏了,那麼ReactOS存在的意義也就很值得懷疑了。

gr2302484 发表于 2023-9-18 16:14:49

放15年前,我会兴奋得要闭关两个月好好看看这代码。
这些代码会暴露出各种漏洞。很多,非常多。非常非常多。

当年泄露的那win2k的源码,靠比对找到的一个个内存特征码,就能干那么多事儿。
比如当年自己写个类似冰刃的分析工具,要列出系统里面的钩子用于分析,看源码知道系统里面有个钩子表,但是就是不知道怎么找到并取出来,后来就是比对源码在内核里面搜索特征码搜出来的。(就是在内核空间搜0x12345678901234678901234567890,哪个内存地址有这个值,这个东西就在这个地方了)
以及各种未公开函数,写c或者汇编的知道,一切代码和数据都不过是内存地址,找到个地址0x87654321,就这一个数字,就能往上往下找到各种数据和函数进行调用,整个系统都是你的,想弄啥就弄啥。
有源码的话,比逆向方便多了。

放现在,唉……老子早退出安全行业了,在家开店卖卖女士内衣,二维码收款都不会用了。

我去q空间找一下我的青春:

http://picx.zhimg.com/v2-6c42bb7323bd3c71b75426b99037fb4f_r.jpg?source=1940ef5c
这是上学时候的床上,一半床是书,刚开始买不起电脑就用纸写代码,右下角,那是打印的,超过50块钱的书买不起,就找别人的扫描打印出来看。
也别觉得怎么书都买不起,农村穷人家孩子,一学期的生活费是500块钱,3700的学费要靠贷款才能交上。

http://picx.zhimg.com/v2-18d7a01a13df9bc2fb4903a013908abd_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-8971823533f03c4d918019388ac2eb92_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-7c4dbd1a06e3cebb185059ac82a5ca58_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-90e50d55a69fd9302bfc41c2718ef56f_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-b82d2e7e487feeeea49547f10ebfa908_r.jpg?source=1940ef5c
当年感觉是人都会逆向,人人会汇编,个个精驱动,杀毒软件都是屁,所以觉得自己也是个屁,就不要想着在这一行混了。干其他也干不了,一直到现在十来年了也没找到一个工作。
不过现在我也练就更高技能,比写代码开心多了:一个女的走过去,我就知道哪个杯,加了多厚的垫子。
<hr/>我翻到我以前的csdn笔记,现在的我已经完全看不懂了

http://picx.zhimg.com/v2-e9b9c77255cad4d09dcb7eed4223d032_r.jpg?source=1940ef5c

bggxl 发表于 2023-9-18 16:15:23

对某些个人来说,参考价值极大。不过对整个业界来说,影响一般吧。
先说对个人的价值。首先是那些挖漏洞的、研究系统内核的、做安全攻防的、写内核驱动的,有了源码后能极大的提升研究进展。
以前我还在搞内核驱动的时候,碰到一些bug需要调试进入系统代码里查找原因,但苦于没有windows源码,很多地方只能一知半解的猜测。当时我就在想如果哪天新版windows源码也泄漏就好了。以前泄漏的win2k代码价值虽然也大,但毕竟和新内核差距比较大。现在没想到居然终有一天梦想成真了,昨天我真是欣喜若狂。。。
早早拿到代码以后,焚香沐浴更衣完粗略研究了一番,里面真是惊喜不断。除了内核代码,我现在更关注应用层部分。里面directx、iis、mshtml、wininet的代码居然都有。很多年前我也研究过mshtml的泄漏代码。要编译还是挺麻烦的。里面有很多pdl文件,微软有个工具会把这些文件转成c++文件,而那时候泄漏的源码好像没有这个工具。当年有个网友万星星把IE5.5编译出来了,我还有不少没编译通过,不过我当时把IE2编译出来了。这次刚好想参考下activex部分的实现,说不定可以扣出来放到chromium里,兼容ax控件用。。。
说远了。这次的代码,对个人来说,不光是可以参考,很多东西估计会被人偷偷哪去用。像richedit部分,以前泄漏的代码就被一些ui库拿去用上了,还挺好用的。
不过从整个行业来说,这份代码意义就没啥了。毕竟xp已经年代久远,而且这种代码也不能商用。所以我觉得更大意义上还是停留在给一些研究人员研究、参考吧。
页: [1]
查看完整版本: 如何看待 Windows XP 源代码泄露?XP 源代码首次被公开曝光会产生哪些影响?