{"content":{"title":"如何正确进行审计？","body":">- 原文链接：[mirror.xyz/0x3Cc99bfc69...](https://mirror.xyz/0x3Cc99bfc69575CFA83658CAb5256D98143a2aAaa/FO6bCbBCGdLxzQXGuT4BUkSUjECnLPetJluT4e5U7Ko)\r\n>- 译者：[AI翻译官](https://learnblockchain.cn/people/19584)，校对：[翻译小组](https://learnblockchain.cn/people/412)\r\n>- 本文链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/10477)\r\n    \r\n一旦我开始进行审计，单纯阅读代码对我来说有点不知所措。我曾相信有某种神奇的药丸、系统或框架，可以让我在一个月内成为 LSR。不幸的是，并没有神奇的药丸。\r\n\r\n然而，在过去的 12 个月里，我不断尝试调整我的审计方法，以找出最适合我的方式，我强烈鼓励你也这样做。看看你有哪些空白，哪些可以改进，一旦你找到最适合你的方法，你就会获得成功。\r\n\r\n今天我想分享一些帮助我高效处理审计的技巧。\r\n\r\n## 审计技巧\r\n\r\n### 将系统分解成小块\r\n\r\n最初我认为审计 10k SLOC （ource Lines of Code 源代码行数 ）和 1k SLOC 之间存在差异。然而，随着我进行的审计越来越多，我得出的结论是，你需要将系统分解成小块。\r\n\r\n> 你需要学习如何有效地将系统分解成小块。\r\n\r\n### 开始阅读代码，而不是先读文档\r\n\r\n\r\n1.  **立即进入代码库**并开始阅读。文档稍后再看。根据我的经验，尽快开始阅读代码要好得多。\r\n\r\n### 识别合约的关键入口点\r\n\r\n\r\n2.  **定义合约的入口点**。是否有存款/取款/索赔/质押函数？简单浏览一下，了解合约的表面工作原理以及关键参与者是谁。\r\n   \r\n### 阅读代码时做出标记\r\n\r\n    \r\n3.  **开始阅读代码**，做 `@notes`/`@audit` 标记。如果你不理解某个功能的作用，可以查看文档，使用 AI 完全理解它。\r\n\r\n### 多次阅读代码、重新审视\r\n    \r\n4.  在第一轮审计后，你对审计的内容有了一些了解。这里是实际的游戏开始。**第二次、第三次阅读合约**，别忘了做 `@notes`/`@audit` 标记。\r\n    \r\n5.  假设几天过去了，你已经相当确定，可能你甚至发现了一些问题。但这并不是结束，你需要**重新审视所有笔记并评估哪些是相关的**。\r\n   \r\n### 划分流程\r\n\r\n    \r\n6.  这里我们进入寻找漏洞的战场。即使你很确定自己审计了所有内容，肯定还有一些漏洞未被发现。现在，**将协议分解成流程，并尽可能深入每个流程**（根据时间而定）。\r\n    \r\n    例如，我喜欢使用 Notion（我知道很多人讨厌它，更喜欢纯 vsCode），但我发现我需要重新调整我的思维方式，以证明发现是否正确。\r\n    \r\n    我将协议分解成有意义的小块，并做两行记录。`ToDo Findings` - 是我从 vscode 笔记中筛选出的发现，计划纳入我的 PoC。`PoC Findings` 是实际的简要概念验证（不是最终版本，但能有力证明漏洞的存在）。\r\n    \r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1735805540230)\r\n\r\n通过遵循这个简单的系统，我能够将系统分解成有意义的小块，并相应地分配我的时间。例如，存款流程 1 天，索赔流程 2 天，这完全取决于你的信心。记住 Zach Obront 说过的话：\r\n\r\n> 你必须绝对确信没有漏洞留下。\r\n\r\n\r\n## 审计三阶段\r\n\r\n这种信心只来自于大量的工作和经验。但总结一下，你的审计方法必须分为三个阶段：\r\n\r\n1.  深入理解系统\r\n    \r\n2.  审计。寻找漏洞。\r\n    \r\n3.  最后一轮。用想法耗尽自己。\r\n    \r\n\r\n最后一点我想提到的是，每次接近审计时，你不能简单地投入代码，你仍然需要有某种有意义的策略。曾经，我看到过一篇来自 [@jonataspvt](https://x.com/jonataspvt) 的文章，虽然我找不到确切的内容，但他展示了他对每次审计的小策略。我尝试根据我的需求重写它，现在我每次审计时都尽量遵循它。\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1735805540736)\r\n\r\n> 我是 [AI 翻译官](https://learnblockchain.cn/people/19584)，为大家转译优秀英文文章，如有翻译不通的地方，在[这里](https://github.com/lbc-team/Pioneer/blob/master/translations/10477.md)修改，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/24995","address":null},"history":"bafkreierto2frnzdoum2rkrduuq35yfr5gok646uvxldxvf4bt2ccq4fba","timestamp":1735807385,"version":1}