摘要:这样控制了int3就可以让程序一个指令一个指令的执行,从而达到分析/破解/debug的目的。可你一篡改int3,程序就没法倒序执行了,结果就更是狗屁不通了,从而达成防止破解的目的。

写几个年代久远的吧,当时还小,有些细节恐怕记得不那么准。

软盘激光加密

用烧红的铁针在磁盘上戳一下。烧红是为了让小孔平整,不至于划伤磁头。然后格式化这个磁盘,记录下被标记成坏扇区的位置。找到小孔位置,然后把小孔的位置换算成注册码,随软盘一起卖给用户。第一次运行需要输入注册码。之后每次运行程序会到磁盘指定的位置找小孔来判定你有没有钥匙盘。

钥匙盘上的小孔用常规的方法无法复制,因为它并不是数据。手动戳一个你也很难跟钥匙盘一样位置。随便戳一个你又没有注册码的生成算法。属于是一种有效,廉价又难缠的加密办法。

至于为啥叫激光加密呢?因为正常来讲这个小孔是用激光烧蚀的,个人开发者没有这个设备,就拿针戳一下。

Int3争夺战

在那个遥远的年代,实模式(Real mode)还是主流,OS(特指DOS)其实也没比应用程序有更高的运行等级。你甚至可以在启动之后把OS砍了,让OS把占用的内存吐出来,来满足自身的内存需求。

记得Novell Netware就有这么一个指令,可以在启动之后砍掉DOS,自己独占系统。

当然砍是可以随便砍的,砍完之后你的程序也没法退出了,因为没有OS接管之后的事了。

这种情况一直持续到使用NT内核的XP为止。

年纪大点的人可能还记得当年有个名震天下的病毒叫CIH,闹的这么厉害也是因为95/98里提升权限权限容易的多。XP开始的NT内核是完整的保护模式(Protect mode),几乎不给你这个机会了。

在这样一个群雄逐鹿的环境下,病毒/杀毒,加密/破解谁更厉害就是看谁更狠了。

int3就变成了一个加密/破解的兵家必争之地。

int3是什么呢?简单来说就是可以设置断点,CPU执行指令执行到这个位置就会停下来,调用一次int3。然后继续执行剩下的指令。

这样控制了int3就可以让程序一个指令一个指令的执行,从而达到分析/破解/debug的目的。

也就是说谁控制了int3就是刀俎,控制不了就是鱼肉了。所以各种调试破解程序都是千方百计的争夺int3的控制权,而加密程序则是千方百计的干扰别的程序用int3.

具体的各种争夺手法差不多可以写本书了,这里就举一个有趣的加密手法:

利用int3让内存里的程序倒序执行。或者说倒序才是正确的打开方式。

本来第n条指令执行完毕之后应该执行第n+1条指令,加密程序利用int3在执行完第n条指令之后,把命令指针改成n-1,从而实现倒序执行。

静态分析,内存里的代码简直狗屁不通。

动态跟踪你就得去截int3。可你一篡改int3,程序就没法倒序执行了,结果就更是狗屁不通了,从而达成防止破解的目的。

PSP的GTA破解

PSP版的GTA有个BUG:

具体来说就是启动游戏的时候会自动到卡上读存档,这个过程可能会内存溢出。

后来厂商发现了这个BUG,于是新版的GTA里修复了这个问题,可是已经卖出去的GTA盘片你也没法回收回来不是?

于是当这个BUG被公开之后,旧版的GTA盘片价格暴涨,到了一卡难求的地步。

PSP的电池破解

往电池的控制芯片里写入特殊的数据,在开机的时候完成破解。果然是漏洞无所不在啊。

Wii的破解

Wii刚开始出来是很难破解的一款主机。

虽然盘片是DVD,但又和普通的DVD不一样。

后来有人发现一款LG的DVD-ROM可以用来读取Wii的光盘,于是复制Wii光盘成为可能。

当然Wii主机是不会认这种刻录的光盘的,解决办法就是把一个PIC的单片机焊在Wii光驱的控制芯片上,利用控制芯片的DEBUG阵脚来劫持这个芯片,让它把刻录光盘识别成正常光盘。

而任天堂的反制措施是。。。。。。。

把这两个引脚切掉,哼!我叫你焊!

在游戏的发展历史中,出现过的有意思的加密反盗版机制和破解机制

而反反制措施则是。。。。。。

用高超的焊接技巧修复剪断的针脚!像这样!

在游戏的发展历史中,出现过的有意思的加密反盗版机制和破解机制

能焊成这样已经是鬼斧神工了,对自己的手有信心的人可以挑战一下。

顺便说一下,当年我焊了4~5台吧,当然我可没有图上焊的这么好,所以每次操作的时候都在心里把任天堂上上下下问候一遍。

补充一下,能焊上本来就是挺难的事了,更难的在于由于焊点实在太小,强度很低。

比如图上这样,上面的线稍微动一下,下面可能就断了。

我的办法就是焊好之后在焊的地方用胶枪补一下,不过缺点是万一没焊好再修就很困难了。

相关文章