首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

解决 Jane Street 逆向工程挑战

2026-09-04 1 阅读 约6分钟阅读 anitil
分享:
字号:
或者:为什么我总是以艰难的方式做事?简街定期提出挑战,而这个彻底的书呆子狙击了我,让我陷入了长达一个月的兔子洞,而我现在才刚刚摆脱。这篇文章概述了我如何结合顽固和睡眠不足来解决这个问题。这将是相当技术性的,但在未来的帖子中,如果人们感兴趣的话,我将详细介绍每个步骤的细节。对于一些背景知识,我建议您查看 Jane Street 博客上的原始帖子 - 你能对 ASIC 进行逆向工程吗?如果你想阅读我在这个挑战中使用的(糟糕的)代码,你可以在我的 github 页面找到它,这里接受挑战我的工程学位在我大脑的某个地方腐烂了,所以挑战中的很多词都很熟悉。挑战在于采用 ASIC 并弄清楚它的用途。对于那些不熟悉的人来说,“ASIC”是一种专用集成电路,这是我们通常所说的“计算机芯片”的一个花哨的词。像 Jane Street 这样的公司大概是为了获得比从普通制造商购买的设备更高的性能而设计的。无论如何,挑战是获取描述芯片的“GDS”文件,并向后理解它的作用,然后我猜想里面可能有密码之类的。我以前不知道,现在仍然不知道“GDS”代表什么。挑战有两个部分:一是热身,你会获得更多信息(比如芯片的实际设计);二是真正的谜题,当你面临未来三周不睡觉的可能性时,你会得到坚定的握手和“祝你好运”。文件里有什么?出于某种原因,我喜欢以困难的方式做事,所以我没有做任何研究,而是开始在文件中查找。我可以看到其中有一些熟悉的单词,例如“clk”(时钟)、“rst”(重置)、“VGND”(接地电压)和“VPWR”(电源电压)。还有一堆……前缀为 sky130_fd_sc_hd__ 的东西后面跟着听起来像逻辑元素的东西,比如“或”和“非”之类的东西。我想这就是我需要从文件中提取的内容?我发现 python 中有一个非常好的库“gdstk”,它似乎能够读取它们。它告诉我热身拼图中有 27 个元素。一个好的开始! % python3 -c 'print(len(__import__("gdstk").read_gds("warmup/04_final.gds").cells))' 27 主谜题还有一个‘vcd’文件,是一个文本文件,我猜是模拟输入或输出什么的。我以前不知道,现在仍然不知道“vcd”代表什么。我可以在其中看到一些看起来像 ASCII 字符的可疑条目。我尝试了一下,编写了一个小型 C 程序,并得到了输出“再试一次”。啊,所以电路中不知何故有消息! $ gcc What-is-this-thing.c && ./a.out 再次尝试 再次尝试 好吧,我们正在做一些事情 分心并浪费我的时间。还有我的生活。这里我们需要做一个巨大的题外话,当然还要构建我们自己的电路模拟器。出于原因。您可以跳过此部分。我当然希望我这么做了。几天后好吧,我使用 sqlite3 作为驱动程序构建了一个电路模拟。真的很整洁。但用Python设计电路是相当困难的!如果有一种语言来描述硬件就好了。几天后,好吧,我为我的新语言构建了一个解析器,现在我可以设计电路了。但我需要测试它们!如果有某种方法来编写输入和验证输出就好了。几天后,好吧,我为我的电路模拟器制作了一个线束。但真的很难想象它在做什么!如果有的话……好吧,你知道这是怎么回事几天后好吧,所以我放弃了编写波形查看器并决定只使用“冲浪者”。但是这些 gds 文件很难使用,我怎样才能让它变得更容易呢?几天后,好吧,我在 raylib 中编写了一个基本的 GDS 查看器,但我无法让块按照我想要的方式放置。所以无论如何,我意识到我已经偏离了太多主题,是时候放弃所有定制软件了。好的,我们已经完成了该部分。你不高兴你跳过了它吗?焦点,克里斯,焦点。 Jane Street 博客实际上指出了一个非常方便的 GDS 查看器,所以我花了一些时间仔细研究它,希望能有所收获。我能够粗略地注释出我认为是哪些输入,并且稍后我可以通过查看文件中电线的大致位置来确认这一点。因为这是热身,所以我可以将我对赛道的了解与我所看到的进行比较。这些文件代表什么?这些文件似乎对不同类型的材料或其他东西的“层”有一定的感觉,我想它有点像一台大型 3D 打印机,必须被告知将打印头移动到哪里,以及需要在什么深度放置新材料。也许这些文件与机器的指令很接近?但它们似乎没有在垂直空间中具有任意位置,而是具有标准的支架层
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱