别浪费人生了,学点什么!

/ 0评 / 0

这是来自 LiveOverflow 的人生建议,原视频约 12 分钟,自备梯子。

部分内容因本地化和个人恶趣味而有所改写,引用请直接引用原视频。

「别再浪费时间打游戏了,干点有用的事情!多学点技术、学个新语言、去刷一刷题、写写博客,把那些还没看的讲座补上、把你收藏夹里的文章读一读,或者赶紧把 redare 给搞懂!你现在是在浪费时间,你知道么?」我经常会产生这种想法。

我想各位都有过这种经历,尤其是在安全和信息技术领域从业的各位。我们每天都要追赶自己领域的脚步,而计算机领域每天都在加速发展。在我在 fsec 上的关于「为什么 CTF 是一个学习计算机安全的绝佳方法」的演讲中,我谈到了持续进步的意义:因为总是有比自己优秀的人存在,他们要领先自己一步。如果能够追赶上他们,我们就能够在领域内做得更好。这总归是一种来自压力的动力,所以有时会有压力山大和力不从心的感觉。我们需要关心一下如何排解这种压力。

强迫自己学习的感觉非常痛苦,而且在这种压力下学习还总是学不进去,然后就会产生「学不动了」的迷茫感。尤其是在几个月前,你明明还热情高涨地攻克一个又一个的难题;但现在你甚至还没有开始动手把最基本的框架搭起来,反而是在疯狂地摸鱼,在手机上刷视频打游戏。摸鱼是很快乐没错,但是不断摸鱼会让人陷入自我否定的漩涡,诘问自己为什么在摸鱼而不是在敬业。

在这里我想谈一下我个人是如何应对这个情况的。毕竟我也是人,我不可能和机器一样不断解 CTF 写教程,我也会摸鱼。

首先:我会允许我自己去打游戏,或者去干别的消遣。因为有些时候人确实是这样没有干劲的,而且没有干劲的日子可能会持续几天甚至几周。摸鱼本身无害,真正有害的是因为摸鱼而怀疑自己浪费时间。一方面你在摸鱼期间确实是什么都没学,而另一方面因为这种负面情绪的出现,你甚至不能好好放松休息;而摸鱼的目的不就是为了放松休息么?这鱼就算白摸了。

所以,尽管要不产生这种负面情绪很难,我还是会显式地告诉自己:「现在是摸鱼时间,摸鱼时间就要摸个痛快!」心理健康是非常重要的,尤其是在计算机行业中,由于行业内高强度竞争导致的焦虑和抑郁几乎可以算是职业病了。所以,一定要允许自己摸鱼,在需要休息的时候好好休息,而休息一下是不会死人的。

当然,尽管允许自己摸鱼,在摸鱼的时候产生的负面情绪还是不少,哪怕我们尝试去说服自己「摸鱼是无害的」。所以当我发现自己仍然逃不出负面情绪的漩涡的时候,还有另外一种手段来解决这个问题,即为摸鱼本身寻找意义。如果我要打游戏的话,不如顺带把这个游戏当作一个项目来看待,说不定还能学点什么。

举个例子:在过去的几周,我一直在手机上玩 Clicker Heroes. 这个游戏需要你不断点屏幕以及买装备升级闯关。我在打这个游戏的时候感觉相当不爽。这个游戏还有内购之类的典型的圈钱手游配置。然而,我注意到这个游戏有一个导出存档和恢复存档的功能,这就产生了一个非常有趣的切入点。

所以我把存档导出到电脑上。存档自然是用 Base64 编码的,但是解码之后就成了裸二进制,同时 file 不能识别这个二进制的类型。这该如何下手呢?在做这些操作的同时我又在游戏里多玩了一会,然后导出了第二份存档来比对。

首先,我们将两份存档解码,并导出成十六进制文本表示。这时我们就可以用 diff 等文本比对工具来看两份数据的异同。两份存档的前 27 个字节是不固定不变的,而剩下的所有内容都发生了变化。这或许意味着存档本身是加密的,我们需要把游戏本体拆开才能逆向出解密的方法。

不过我决定先使用 binwalk 来看一下存档数据。而 binwalk 识别出了自 24 字节后可能是 zlib 压缩的内容。存档的第 24 字节为 0x78, 这正好是 zlib 的文件头,紧接着的一个字节表示压缩比率,在这里为 0xda, 表示最大压缩。通过 dd 工具,我们可以将裸二进制中的任意区段提取出来,我们将 24 字节以及之后的内容提出到另一文件中,然后解压,就得到了一大段的 JSON 数据。包括诸如金币数量、宝石数量、装备信息、调试模式等等设置都在这里。宝石是需要花钱买的代币,我们自然要上手修改一下宝石数量,再顺手启用一下调试模式。

修改完成之后,只需要把整个过程反过来:先用 zlib 最优压缩,再用 dd 将固定的头部拼装回去,再用 Base64 编码就能得到修改后的存档。我们再尝试用存档恢复功能就可以将修改之后的存档直接导入游戏,现在宝石数量就直接成为了 99999, 以及菜单中多出了一个调试终端选项。进入调试终端后打 help, 它列出了一堆有趣的指令。

所以这次打游戏并不算完全摸鱼,我们学到了这个游戏的存档机制,并能够逆向出这个机制和修改存档;我们也知道了 zlib0x78 文件头。通过寻找意义,我们能够把摸鱼带来的罪恶感完全清理干净,摸鱼摸到爽爆。而且最重要的是,我完全毁掉了自己的游戏体验——因为有了无穷金币,这个游戏彻底失去了挑战性。无论什么困难都能通过砸钱搞定,所以游戏的乐趣就完全被抹杀了。

这里我需要扯一句题外话。因为我原先是不希望发表存档逆向方法的,因为我不希望就为了网上出个名而破坏掉这个游戏工作室的收入来源。不过我去网上搜了一下,结果发现这个游戏的存档编辑器早就在全网流行了。所以……潜在的收入来源破坏应该是已经完事了。然而我还是得为开发者澄清一下:他们也不喜欢这套圈钱系统。他们已经发表文章说明了 Clicker Heroes 2 将不再采用免费下载 + 微交易的模式,而是采用买断模式:「我们发现一些玩家在这个游戏 (Clicker Heroes) 中花费了数千元购买宝石,我们只能希望这是出于要支持我们发展的好意,而不是因为游戏上瘾而不断氪金。但我们估计后者的可能性要更大一些……我们不希望借助游戏成瘾赚钱,但这确实是所有免费下载游戏的商业模型……不过尽管如此,我们暂且不会修改 Clicker Heroes 1 的盈利模式,因为我们的工作室的主要收入来源仍然依赖于此……但 Clicker Heroes 2 将不再采用这种盈利模式,我们决定使用买断方式,且在游戏内无任何微交易系统。」

题外话算是扯完了,毕竟道德在安全领域也是非常重要的。

总之,现在我已经没有动力再去玩这个游戏了,不过我又获得了干一些有意义的事情的动力,比如制作这支视频。并且要找意义也是十分容易的事情:之前我在玩 Guild Wars 的时候,我就在研究它的交易 API, 制作自己的交易工具,而且搞得非常过火,我甚至去研究了 Guild Wars 用的 UI 框架 Coherent UI. 不过这个讲起来就太复杂了,得单独开一个视频。现在,他们推出了开放平台,你可以直接用 API Key 与服务器进行交互了。有许多游戏都提供 API, 可以搞各种事情。

当然,如果你不怎么玩游戏,你也可以看看各种站点的 API, 学习如何围绕 API 设计满足自己需求的应用程序。这也是学习一门新语言的绝佳入手点,比如写一个简单的获取用户信息的小程序。这些东西不需要做得很花哨,只是在摸鱼的时候顺带学点东西而已。这样你可以甩开摸鱼的负面情感,好好放松,以及说不定你还能从中获益。


视频作者简介:Fabian "LiveOverflow" Faessler, 德国人,著名 YouTube 视频作者、计算机安全自由从业人员,内容主打计算机系统的漏洞分析、CTF 讲义和硬件安全。

视频发布时间:2018 年 2 月 17 日。

发表评论

电子邮件地址不会被公开。 必填项已用*标注