nobody00O/smart-contract-scanner-cpp

GitHub: nobody00O/smart-contract-scanner-cpp

一个基于文本模式匹配的 C++ 静态分析工具,用于扫描 Solidity 合约中的重入攻击、tx.origin 滥用和 assembly 块等常见安全问题。

Stars: 0 | Forks: 0

## 智能合约扫描器 (C++) 一个小型 C++ 工具,用于扫描 Solidity 合约中的几个常见安全漏洞 —— 重入攻击和不安全的 `tx.origin` 检查。 我开发这个工具是为了提升 C++ 技能,并了解智能合约漏洞在实际代码中究竟是什么样的,而不仅仅是理论上的。这只是一个学习项目 —— 但它能正常工作。 ### 检查内容 - 重入攻击(Reentrancy)—— 标记 `.call{value: ...}`,这是 DAO 攻击背后的模式。在更新余额之前发送资金是件糟糕的事。 - tx.origin —— 标记使用 `tx.origin` 而不是 `msg.sender` 进行身份验证检查的合约。可能会通过网络钓鱼被利用。 - assembly 块 —— 只是标记这些以供人工审查,不一定是 bug。 每次匹配都会增加风险分数,最后你会得到一个 LOW / MEDIUM / HIGH(低/中/高)的评级。 它基本上是对文本逐行进行模式匹配 —— 而不是真正的 Solidity 解析器。所以它不会捕获所有问题,也可能会错误标记安全的代码。更多内容见下文。 ## 运行方式 ``` git clone https://github.com/nobody00O/smart-contract-scanner-cpp.git cd smart-contract-scanner-cpp make ./scanner contracts/vulnerable_sample.sol ``` 直接编译即可: g++ -std=c++17 -Wall src/main.cpp -o scanner ## 环境要求 - C++17 编译器(g++、clang++ 或 MSVC) ## 局限性 *它只是检查文本模式,所以有时会标记实际上没问题的代码。比如,如果 `.call{value: ...}` 出现在余额更新之后(这是安全的做法),它仍然会被标记为 HIGH 风险 —— 该工具不了解执行顺序,它只看到模式并作出反应。 它会跳过 `//` 和 `/* */` 注释,这样它们就不会被算作实际代码,但也仅此而已。它并没有真正阅读/理解 Solidity,只是扫描文本。 *目前只查找这 3 种模式。它与真正的审计工具相去甚远,更像是一种初步检查。 ## 为什么开发这个工具 我想找点能把学习 C++ 和实际安全用例结合起来的事情来做,而不是再做另一个通用的练习。选择真实的漏洞而不是编造的漏洞,让我觉得这是一个值得开发的项目。
标签:C++, Solidity, 云安全监控, 数据擦除, 智能合约, 静态分析