[Beta 探究] Windows 1.x 和 2.x 的彩蛋

Update: Sorry, was meant to publish this ages ago but didn’t get the time to film a proper video for it. You’ve probably read about it from somewhere else by now – but hey, at least this is the only article about the Easter egg written by the person who discovered it. Also that image up there is ugly lol.

我发现了 Windows 1.x 和 2.x 的彩蛋。是的,你没听错,Windows 1.x 和 2.x 的彩蛋。微软在隐藏这个彩蛋的方面做得非常出色,我们花了37年才找到它。那这个彩蛋到底是什么呢?它其就是一个显示 Windows 1.0 和 2.0 开发人员名单的滚动列表。

Windows 1.01 的彩蛋

他们是怎么把这个彩蛋藏得这么好的呢?加密和混淆。人员列表只是一个 null 结尾的字符串列表,但他们没有将其存储在数据段中,也没有将其存储为字符串表或二进制资源,而是对其进行加密并将其附加到了一个位图的末尾。当时没有任何工具可以查看可执行文件中的位图资源,即使有,人们也只会将位图视为图像,从而忽略最后的二进制数据。

继续阅读

[Retro 考古] Onyx系列Warez盘获取压缩包密码方法

我知道写这玩意没人看,也没多大用,不过管他呢。姑且随便写写(ーー゛)。过程就不写了,直接结论。

Onyx系列:Internet Archive Search: subject:”Warez CD” onyx

更新:Zammis Clark提供了根目录*.dat的解密程序,解密后是包含软件包路径、名称、描述、密码等信息的XML,不再需要运行程序的方法。提供文件为C#代码,用csc onyx.cs编译即可。

工具使用方法:onyx.exe Language.dat Onyx安装程序运行密码

以Onyx DVD #02为例:onyx Language.dat onyxdvd2yourdestination

解密后文件将写到Language.dat-dec.bin,记事本打开即可查看内容。

以下内容可以不看。

推荐先运行一次start.exe/setup.exe输入CD密码,进入主界面后退出。安装程序会复制自身到用户Temp文件夹后运行该拷贝,用Process Explorer可以看到实际运行程序路径及参数。此后可以按命令行直接运行。

继续阅读

[Retro 考古] 通用 MS-DOS 1.25

在 MS-DOS 3.20 之前,Microsoft 从未直接分发 MS-DOS。相反,他们向 OEM 发送 OEM 适配套件(OAK),OEM 向公众发布其定制版本的 MS-DOS。IBM 也可以被视为 OEM,他们定制的 MS-DOS 被称为 PC-DOS。大多数 OEM 的产品都有自己的版权信息,有些产品与 PC 不兼容。因此,在 MS-DOS 3.20 之前,如果您使用 IBM PC,则通常使用 IBM 的 PC-DOS,否则使用 OEM 的定制 MS-DOS。

MS-DOS 和 PC-DOS 有什么区别?在 DOS 源代码中,您可以看到 IBMVERMSVER 开关 – 您可以打开 MSVER 和关闭 IBMVER 来构建 MS-DOS,反之亦然。PC-DOS 和 MS-DOS 的主要区别在于:不同的版权信息、不同的转义序列表、不同事物的不同分隔符以及 PC-DOS 的默认驱动器是 A。

继续阅读

[Retro 考古] 解秘消失的 Windows Message 0x4

以前开发过 Windows 应用程序的人应该知道一种叫做 Windows Message 的东西。Windows 通过向应用程序窗口传递消息与应用程序窗口通信。消息是一个指定特定事件的数字代码。例如,如果用户按下鼠标左键,窗口将收到一条包含以下消息代码的消息:

#define WM_LBUTTONDOWN    0x0201

为了向窗口传递消息,操作系统调用为该窗口注册的窗口过程(WndProc)。Windows Message 在头文件 WINUSER.H(在 Windows 的最新版本中)或 WINDOWS.H 中定义,下面是其中的一个摘录:

#define WM_NULL                         0x0000
#define WM_CREATE                       0x0001
#define WM_DESTROY                      0x0002
#define WM_MOVE                         0x0003
#define WM_SIZE                         0x0005
#define WM_ACTIVATE                     0x0006
#define WM_SETFOCUS                     0x0007
#define WM_KILLFOCUS                    0x0008
继续阅读