
slither v0.11.6
محلل ثابت لـ Solidity و Vyper
Slither، أداة التحليل الثابت للعقود الذكية
انضم إلى سلاك Empire Hacking
- مناقشات ودعم
Slither هو إطار عمل للتحليل الثابت للعقود الذكية بلغة Solidity و Vyper، مكتوب بلغة Python3. يقوم بتشغيل مجموعة من كاشفات الثغرات الأمنية، ويطبع معلومات مرئية حول تفاصيل العقد، ويوفر واجهة برمجة تطبيقات لكتابة تحليلات مخصصة بسهولة. يمكّن Slither المطورين من العثور على الثغرات الأمنية، وتحسين فهمهم للكود، والنمذجة السريعة للتحليلات المخصصة.
- الميزات
- الاستخدام
- كيفية التثبيت
- الكاشفات
- الطابعات
- الأدوات
- توثيق API
- الحصول على المساعدة
- الأسئلة الشائعة
- الترخيص
- المنشورات
الميزات
- يكشف عن كود Solidity الضعيف مع نتائج إيجابية خاطئة منخفضة (انظر قائمة الجوائز)
- يحدد مكان حدوث حالة الخطأ في الكود المصدري
- يتكامل بسهولة مع التكامل المستمر وبنيات Hardhat/Foundry
- 'طابعات' مدمجة تبلغ بسرعة عن معلومات العقد الحيوية
- واجهة برمجة تطبيقات للكاشفات لكتابة تحليلات مخصصة بلغة Python
- القدرة على تحليل العقود المكتوبة بلغة Solidity >= 0.4
- التمثيل الوسيط (SlithIR) يتيح تحليلات بسيطة وعالية الدقة
- يحل 99.9% من جميع كود Solidity العام بشكل صحيح
- متوسط وقت التنفيذ أقل من ثانية واحدة لكل عقد
- يتكامل مع فحص كود GitHub في CI
- دعم العقود الذكية بلغة Vyper
الاستخدام
قم بتشغيل Slither على تطبيق Hardhat/Foundry/Dapp/Brownie:```console slither .
هذا هو الخيار المفضل إذا كان مشروعك يحتوي على تبعيات، حيث يعتمد Slither على إطار التجميع الأساسي لتجميع الكود المصدري. ومع ذلك، يمكنك تشغيل Slither على ملف واحد لا يستورد تبعيات:```console
slither tests/uninitialized.sol
كيفية التثبيت
ملاحظة يتطلب Slither بايثون 3.10+. إذا كنت لن تستخدم أحد أطر التجميع المدعومة، فأنت بحاجة إلى solc، مترجم Solidity؛ نوصي باستخدام solc-select للتبديل بسهولة بين إصدارات solc.
باستخدام uv (موصى به)
uv هو مدير حزم بايثون سريع أسرع من pip بمقدار 10-100 مرة.```console
Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
Install slither as a tool
uv tool install slither-analyzer
Or run slither without installation
uvx --from slither-analyzer slither
للترقية:```console
uv tool upgrade slither-analyzer
استخدام Pip```console
python3 -m pip install slither-analyzer
للتحديث:```console
python3 -m pip install --upgrade slither-analyzer
استخدام Brew```console
brew install slither-analyzer
### استخدام Git (التطوير)```bash
git clone https://github.com/crytic/slither.git && cd slither
# Install as editable for development
uv tool install -e .
# Or use uv run for testing without installation
uv run slither <target>
العلامة -e تقوم بالتثبيت في الوضع القابل للتحرير، مما يعني أن التغييرات على الكود المصدري تنعكس فورًا دون الحاجة إلى إعادة التثبيت.
استخدام Docker
استخدم صورة docker الخاصة بـ eth-security-toolbox. وهي تتضمن جميع أدوات الأمان الخاصة بنا وكل إصدار رئيسي من Solidity في صورة واحدة. سيتم تثبيت /home/share في /share داخل الحاوية.```bash
docker pull trailofbits/eth-security-toolbox
لمشاركة دليل داخل الحاوية:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
التكامل
- لتكامل GitHub Action، استخدم slither-action.
- لتكامل pre-commit، استخدم (استبدل
$GIT_TAGبالعلامة الحقيقية) ```YAML- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- id: slither
- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- لتوليد تقرير ماركداون، استخدم
slither [target] --checklist. - لتوليد ماركداون مع تمييز الكود المصدري من GitHub، استخدم
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(استبدلORGوREPOوCOMMIT)
الكاشفات
لمزيد من المعلومات، انظر
- توثيق الكاشفات للحصول على تفاصيل حول كل كاشف
- اختيار الكاشفات لتشغيل كاشفات محددة فقط. افتراضياً، يتم تشغيل جميع الكاشفات.
- وضع الفرز لتصفية النتائج الفردية
الطابعات
طابعات المراجعة السريعة
human-summary: طباعة ملخص قابل للقراءة البشرية للعقودinheritance-graph: تصدير رسم بياني للوراثة لكل عقد إلى ملف dotcontract-summary: طباعة ملخص للعقودloc: عد إجمالي عدد أسطر الكود (LOC)، أسطر الكود المصدر (SLOC)، وأسطر التعليقات (CLOC) الموجودة في ملفات المصدر (SRC)، التبعيات (DEP)، وملفات الاختبار (TEST).entry-points: طباعة جميع دوال نقطة الدخول التي تغير الحالة ومتغيراتها للعقود
طابعات المراجعة المتعمقة* call-graph: تصدير رسم بياني للاستدعاءات للعقود إلى ملف dot
cfg: تصدير مخطط تدفق التحكم لكل دالةfunction-summary: طباعة ملخص للدوالvars-and-auth: طباعة متغيرات الحالة المكتوبة وصلاحية الدوالnot-pausable: طباعة الدوال التي لا تستخدم معدّلwhenNotPaused.
لتشغيل أداة طباعة، استخدم --print وقائمة مفصولة بفواصل من أدوات الطباعة.
انظر وثائق أدوات الطباعة للقوائم الكاملة.
الأدوات
slither-check-upgradeability: مراجعة قابلية الترقية القائمة علىdelegatecallslither-prop: توليد اختبارات وخصائص تلقائيةslither-flat: تسطيح قاعدة الشيفرةslither-check-erc: التحقق من مطابقة ERCslither-read-storage: قراءة قيم التخزين من العقودslither-interface: إنشاء واجهة لعقد
انظر وثائق الأدوات للأدوات الإضافية.
اتصل بنا للحصول على مساعدة في بناء أدوات مخصصة.
وثائق واجهة برمجة التطبيقات (API)
وثائق داخلية حول سلذر متاحة هنا.
الحصول على المساعدة
لا تتردد في التوقف في قناة Slack (#ethereum) للحصول على مساعدة في استخدام أو توسيع سلذر.
-
وثائق أدوات الطباعة تصف المعلومات التي يستطيع سلذر تصورها لكل عقد.
-
وثائق المكتشفات تصف كيفية كتابة تحليل ثغرات جديد.
-
وثائق واجهة برمجة التطبيقات تصف الدوال والكائنات المتاحة للتحليلات المخصصة.
-
وثائق SlithIR تصف التمثيل الوسيط SlithIR.
الأسئلة الشائعة
كيف أستثني النسخ الوهمية أو الاختبارات؟
- انظر وثائقنا حول تصفية المسار.
كيف أصلح مشكلة "ملف غير معروف" أو مشاكل الترجمة؟
- نظرًا لأن سلذر يحتاج إلى AST الخاص بـ solc، يجب أن تكون جميع التبعيات متاحة.
إذا كان العقد له تبعيات، فإن
slither contract.solسيفشل. بدلاً من ذلك، استخدمslither .في الدليل الأصلي لـcontracts/(يجب أن ترىcontracts/عند تشغيلls). إذا كان لديك مجلدnode_modules/، فيجب أن يكون في نفس الدليل مثلcontracts/. للتحقق من أن هذه المشكلة متعلقة بسلذر، قم بتشغيل أمر الترجمة للإطار الذي تستخدمه مثلًاnpx hardhat compile. يجب أن يعمل بنجاح؛ وإلا، فإن محرك الترجمة الخاص بسلذر، crytic-compile، لا يمكنه توليد AST.
الترخيص
سلذر مرخص وموزع بموجب ترخيص AGPLv3. اتصل بنا إذا كنت تبحث عن استثناء للشروط.
المنشورات
منشورات Trail of Bits
- Slither: A Static Analysis Framework For Smart Contracts، Josselin Feist، Gustavo Grieco، Alex Groce - WETSEB '19
منشورات خارجية
| العنوان | الاستخدام | المؤلفون | المؤتمر | الشيفرة |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | تحليل قائم على AST مبني فوق سلذر | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | - |
| MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract | الاستفادة من اعتمادية البيانات عبر سلذر | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | الاستفادة من اعتمادية البيانات عبر سلذر | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | تنفيذ رمزي مبني فوق CFG الخاص بسلذر | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | الاعتماد على كاشفات الثغرات في سلذر | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | الاستفادة من اعتمادية البيانات عبر سلذر | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | استخدام CFG لسلذر لاكتشاف الحلقات | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | - |
| SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds | الاعتماد على SlithIR لبناء رسم بياني لاعتمادية التخزين | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | Sailfish |
| SolType: Refinement Types for Arithmetic Overflow in Solidity | استخدام سلذر كواجهة أمامية لبناء نظام أنواع تحسيني | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | - |
| Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection | استخدام سلذر لاستخراج ميزات الرموز (قابلية السك، القابلية للإيقاف، ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | - |
| MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities | استخدام سلذر لاستخراج CFG ورسم بياني للاستدعاءات | Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao Jiang | IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022) | ge-sc |
| Automated Auditing of Price Gouging TOD Vulnerabilities in Smart Contracts | استخدام سلذر لاستخراج CFG واعتمادات البيانات | Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | Smart-Contract-Repair |
| Modeling and Enforcing Access Control Policies for Smart Contracts | توسيع اعتمادات البيانات في سلذر | Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf Reussner | IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022 | SolidityAccessControlEnforcement |
| Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision Fusion | استخدام سلذر لاستخراج CFG | Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan Hu | Sensors 2023, 23, 7246 | - |
| Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code Reuse | استخدام سلذر لاستخراج ميزات الشيفرة (CFG، الدوال، أنواع المعاملات، ..) | Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin Xia | ACM Transactions on Software Engineering and Methodology, 2023 | - |
| Smart Contract Parallel Execution with Fine-Grained State Accesses | استخدام سلذر لبناء رسوم بيانية للوصول إلى الحالة | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | تنفيذ تحليل داخلي فوق سلذر | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | إنشاء 4 كاشفات فوق سلذر | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (لا يوجد PDF مفتوح الوصول) | الاعتماد على CFG وAST في سلذر | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
إذا كنت تستخدم سلذر في عمل أكاديمي، فكر في التقديم على جائزة بحث Crytic البالغة 10,000 دولار.