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, 云安全监控, 数据擦除, 智能合约, 静态分析