注册机音乐随记

祝大家中秋节快乐(虽然晚了一天。

昨天我闲得无聊打开了某个注册机。可能真的是比较闲的时候才会有这个想法,我突然想问,为什么注册机都会有一段鬼畜的音乐,有些还有鬼畜的画面。

我百度了一下,发现知乎上还真有人问过这个问题。

知乎:为什么注册机都有音乐呀?

知乎:为什么国外一些知名的软件破解团队总是在发布的破解软件里加入同一支很奇诡的背景音乐?

Demo Scene:Principles,Techniques,and Tools

wikipedia:Demoscene

wikipedia:Crack_intro

这是一种文化……

是炫技(对于外行来说)用的。

注册机音乐是一种被称为“模块音频”的玩意,比midi历史悠久。这种音频格式可以在286/386/486处理器的计算机上创作。如今的计算机依然可以用来创作它(还能挂VST效果器和VSTi音源呢……不过播放起来就是个问题23333)

最早的模块音频文件的扩展名是mod,效果少(例如中途改变平衡或者音调之类的都不支持),最多支持4音轨,单音轨不允许复音。不过,后来改进的格式也不支持单轨复音。

注册机使用的是xm格式的模块音频,与mod格式相比,它支持128音轨,支持“乐器”(一种乐器可以由多个采样构成,不同的音高对应不同的采样),支持颤音、变调等效果。xm是FastTracker这个模块音频编辑器的专属格式,是个DOS软件,可以用DOSBox完美运行。

至于注册机使用xm格式的原因,是因为它的解码器(应该叫演奏程序)体积很小,大约2KB…再加上注册机使用的xm文件不超过10KB,可以使得整个注册机程序的体积能控制得很小。而且,xm格式很常见,真的很常见。

嗯……大概就是64KB动画那种感觉吧。

注册机音乐最初可以追溯到1980年代的Crack Intro[,即对于破解的软件开始运行时添加的一段破解信息,通常为了告诉用户,这个软件已经被破解过了。而显示的信息干巴巴的出个“已破解”肯定不如来个华丽出场帅气,于是有了花式的Crack Intro出现。

当各种华丽出场愈演愈烈,就出现了demoscene这个新的玩意儿。当玩出新花样的demoscene概念出现,这个东西必然会被应用在各种各样的地方,keygen里施展demoscene膜法是个不错的主意,于是很多keygen都有了keygen music。

keygen music通常是原创的,以用于炫技(Crack Intro的花式演进也是因为这个)。绝大部分的keygen music都是模块音乐。demoscene逐渐成为一种Warez Scene(Crack Teams)圈内的所谓文化后,keygen music也成了比较有标志性的东西之一。于是有些破解者会跟风性质的给自己的注册机,自己的辅助软件,甚至自己破解的游戏的安装向导上带上keygen music。其中一些破解者则会使用ogg,wav等格式的音频,而非模块音乐。

Demo Scene简介: 首先要明白Demo并不是所说的“Demo版本”,这里的Demo是通过计算机实时图形运算配合原创音乐展现给人们的一段艺术视觉效果。 Demo其实是一个很早就有的东西,一些游戏一开始的演示动画就有demo的感觉。事实上,正是早期的计算机游戏的条件,使得开场画面需要实时的演算,才造就了今天的Demo Scene。比如以前的C64,nes系统。 如今,为数不少的Demo Scene组织中的coder都正供职于各类游戏公司。对于他们,实时的图形演算已是家常便饭。这也给Demo Scene的创作打上了坚实的基础。 同时,Demo Scene发展也和目前的cracker行业有着密切的联系。各位是否注意到很多crack程序都是配有背景音乐甚至是动画的。这里不得不提著名的razor 1911(http://www.razor1911.com/)(有没有在你的diablo2目录下发现一个1911字样的动画呢?)他们的不但在crack界内享有盛名,在Sence demo圈内也是小有名气。 由于对汇编的敏锐嗅觉,Demo Scene程序基本上都以精巧著称。 不过Demo Scene并不能只有coder,更重要的是有优秀的CG和sound track。唯美的画风和动听的音乐才是Demo Scene吸引观众的所在。

Demo Scene团队:
正像上面说的一个Demo Scene团队主要由以下几类人组成:
coder,他们是Demo Scene的核心人物,优秀的coder可以写出强大而又精巧的demo引擎,这正是一切的基本。一般coder在1-3名
美术设计人员,1-2名,主要负责demo的构思和图片素材的建立
音效师:1-2名,这个就不用多说了
其中,无论在团队中的角色如何,编程功底应该是每个人都具备的。
对于美工人员,他在设计画面的同时,也要考虑色彩的位深、贴图的尺寸、画面的特效以便于更好的能够提升cpu和显卡的处理效率。
对于音效师,对于64kb intro的demo。他们的职责就不是简单的产生mp3文件那么简单,由于64kb无法存储一个波形文件,此时的sound track都是通过程序实时波形演算合成而来。基本上一个成熟的团队都会写一个自己的FM发音引擎,这和8位红白机的音乐一样,好的音效师,可以利用波形合成在简单的FC游戏中产生与mp3一样的音效,而完全不懂FM合成的音效师则可能只能让团队的FM引擎发出“嘀嘀”的正弦波形了

2.Demo Scene的一些原理
我没有亲自涉足这个领域,因此很多问题上只是泛泛而谈。
1.如何控制文件尺寸。
这当然对coder有很大的要求,但并不至于完全要用汇编写程序的地步。由于demo中的图形基本是实时演算的,加上采用FM音频,所以不加任何修饰,一个合格的coder就可以把程序控制在300kb以内,然后利用编译器的优化特性,这个尺寸还有望减少50-100kb不等。最后利用著名的UPX或者ASpack压缩加壳,64kb的目标是很容易达到的
2.FM引擎
当然,FM音乐合成器最终还是希望自己写一个引擎出来,但也可以利用第3方函数库,比如十分著名的fmod,你的wow中就有个fmod.dll。利用它,播放一些mod(模块音乐)还是不在话下的。当然这里尤其要推荐的是fmodmini,他仅仅提供了xm音乐的支持,并且播放函数库可以植入程序体中,成为很多crack程序的首选,找个flashget破解程序来看看?
对于xm这类mod模块音乐,因为以成为格式标准广泛采用,音效师应该不难直接将自己的midi序列导出到这些格式。
3.图形演算
图形处理是demo的核心,基本思路和编写3d游戏几乎没有区别。不过对于demo有一个问题需要考虑:
每个demo都需要重写图形处理代码?
事实上对于图形的演算,无非是运动+特效的问题,前者用矩阵变换,后者则可以用常用的特效代码。所以如果为了长久之计,优秀的团队应该写出属于自己的demo引擎。优秀的引擎可以达到这样令人惊奇的效果:今后的demo制作基本上不需要写代码,甚至可以像flash创作那样,设置好图、设置好关键帧补间、配上音效。便可以直接产生理想的exe程序了。

然后我在keygenmusic网站上找到了最常使用的xm音乐 Hybrid song.xm

然后我利用现有的minifmod源码,用vs2017编译了一份播放xm音乐文件的播放器,可执行文件在这里,工程在这里

然后想,既然这样干脆把adobe新旧的注册机的音乐提取出来吧。

旧Adobe注册机音乐提取

旧的注册机很清真,加的是upx的壳,直接脱了。

用010editor直接找文件头就找到了。

但是不知道文件的大小,即不知道dump到哪里结束。

还是上IDA。

size有了,dump成功。

附件:adobe.snr.patch-painter.xm

新Adobe注册机音乐提取

居然上了VMP。0 0

但我们又不是分析代码,不害怕

直接查找文件头Extended Module:没有找到xm文件。非常尴尬。

然后我花式查找都没有找到。我想,你总要发声吧,我对程序下LoadLibraryExA,LoadLibraryExW断点,看看它载入了什么库。

结果有了意外的收获。

一堆系统库过后出现了这个:

我赶紧到这个目录下把这个dll拿了出来。

程序运行后对这个dll上的play_music下断。断下。

原来不是xm的音乐23333,能利用刚才dump出来的dll播放。

附件:amtemu.v0.9.1-painter.spc

我们调用刚才的dll写一个spc的播放器。

工程:https://github.com/veritas501/spc_player

spc播放器:https://github.com/veritas501/attachment_in_blog/tree/master/crack_intro/spc_player

完结撒花。