العودة إلى التحديثات
New releaseJul 29, 2026

slither v0.11.6

محلل ثابت لـ Solidity و Vyper

مشاركة

Slither، أداة التحليل الثابت للعقود الذكية

شعار إطار عمل Slither للتحليل الثابت

Build Status PyPI Slither - Read the Docs Slither - Wiki

انضم إلى سلاك Empire Hacking

Slack Status

- مناقشات ودعم

Slither هو إطار عمل للتحليل الثابت للعقود الذكية بلغة Solidity و Vyper، مكتوب بلغة Python3. يقوم بتشغيل مجموعة من كاشفات الثغرات الأمنية، ويطبع معلومات مرئية حول تفاصيل العقد، ويوفر واجهة برمجة تطبيقات لكتابة تحليلات مخصصة بسهولة. يمكّن Slither المطورين من العثور على الثغرات الأمنية، وتحسين فهمهم للكود، والنمذجة السريعة للتحليلات المخصصة.

الميزات

  • يكشف عن كود 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
  • لتوليد تقرير ماركداون، استخدم slither [target] --checklist.
  • لتوليد ماركداون مع تمييز الكود المصدري من GitHub، استخدم slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (استبدل ORG و REPO و COMMIT)

الكاشفات

الرقمالكاشفمايكتشفهالتأثيرالثقة
1abiencoderv2-arrayمصفوفة abiencoderv2 في التخزينعاليعالي
2arbitrary-send-erc20transferFrom يستخدم from تعسفيعاليعالي
3array-by-referenceتعديل مصفوفة التخزين بالقيمةعاليعالي
4encode-packed-collisionتصادم ABI encodePackedعاليعالي
5incorrect-shiftترتيب المعاملات في تعليمة الإزاحة غير صحيح.عاليعالي
6multiple-constructorsأنماط منشئات متعددةعاليعالي
7name-reusedإعادة استخدام اسم العقدعاليعالي
8protected-varsكشف متغيرات غير محميةعاليعالي
9public-mappings-nestedتعيينات عامة بمتغيرات متداخلةعاليعالي
10rtloاستخدام حرف تحكم من اليمين إلى اليسارعاليعالي
11shadowing-stateتظليل متغيرات الحالةعاليعالي
12suicidalدوال تسمح لأي شخص بتدمير العقدعاليعالي
13uninitialized-stateمتغيرات حالة غير مهيأةعاليعالي
14uninitialized-storageمتغيرات تخزين غير مهيأةعاليعالي
15unprotected-upgradeعقد قابل للترقية غير محميعاليعالي
16arbitrary-send-erc20-permittransferFrom يستخدم from تعسفي مع permitعاليمتوسط
17arbitrary-send-ethدوال ترسل إيثر إلى وجهات تعسفيةعاليمتوسط
18controlled-array-lengthتعيين طول مصفوفة ملوثعاليمتوسط
19controlled-delegatecallوجهة delegatecall مسيطر عليهاعاليمتوسط
20delegatecall-loopوظائف قابلة للدفع تستخدم delegatecall داخل حلقةعاليمتوسط
21incorrect-expأسية غير صحيحةعاليمتوسط
22incorrect-returnإذا تم استخدام return بشكل غير صحيح في وضع التجميع.عاليمتوسط
23msg-value-loopmsg.value داخل حلقةعاليمتوسط
24reentrancy-ethثغرات إعادة الدخول (سرقة الإيثرات)عاليمتوسط
25reentrancy-balanceثغرات إعادة الدخول تؤدي إلى فحوصات رصيد قديمةعاليمتوسط
26return-leaveإذا تم استخدام return بدلاً من leave.عاليمتوسط
27storage-arrayخطأ في مترجم مصفوفة الأعداد الصحيحة الموقعة في التخزينعاليمتوسط
28unchecked-transferنقل رمز غير محققعاليمتوسط
29weak-prngPRNG ضعيفعاليمتوسط
30domain-separator-collisionيكشف عن رموز ERC20 التي تحتوي على دالة يتعارض توقيعها مع DOMAIN_SEPARATOR() من EIP-2612متوسطعالي
31enum-conversionكشف تحويل enum خطيرمتوسطعالي
32erc20-interfaceواجهات ERC20 غير صحيحةمتوسطعالي
33erc721-interfaceواجهات ERC721 غير صحيحةمتوسطعالي
34incorrect-equalityمساوات صارمة خطيرةمتوسطعالي
35locked-etherعقود تقفل الإيثرمتوسطعالي
36mapping-deletionحذف على تعيين يحتوي على بنيةمتوسطعالي
37pyth-deprecated-functionsكشف دوال Pyth المهملةمتوسطعالي
38pyth-unchecked-confidenceاكتشاف عندما لا يتم التحقق من مستوى الثقة لسعر Pythمتوسطعالي
39pyth-unchecked-publishtimeاكتشاف عندما لا يتم التحقق من publishTime لسعر Pythمتوسطعالي
40shadowing-abstractتظليل متغيرات الحالة من العقود المجردةمتوسطعالي
41tautological-compareمقارنة متغير بنفسه ترجع دائماً صحيح أو خطأ، حسب المقارنةمتوسطعالي
42tautologyحشو أو تناقضمتوسطعالي
43write-after-writeكتابة غير مستخدمةمتوسطعالي
44boolean-cstإساءة استخدام ثابت منطقيمتوسطمتوسط
45chronicle-unchecked-priceاكتشاف عندما لا يتم التحقق من سعر Chronicle.متوسطمتوسط
46constant-function-asmدوال ثابتة تستخدم كود التجميعمتوسطمتوسط
47constant-function-stateدوال ثابتة تغير الحالةمتوسطمتوسط
48divide-before-multiplyترتيب عمليات حسابية غير دقيقمتوسطمتوسط
49gelato-unprotected-randomnessاستدعاء _requestRandomness داخل دالة غير محميةمتوسطمتوسط
50out-of-order-retryableمعاملات قابلة لإعادة المحاولة خارج الترتيبمتوسطمتوسط
51reentrancy-no-ethثغرات إعادة الدخول (بدون سرقة إيثر)متوسطمتوسط
52reused-constructorمنشئ أساسي معاد استخدامهمتوسطمتوسط
53tx-originاستخدام خطير لـ tx.originمتوسطمتوسط
54unchecked-lowlevelاستدعاءات منخفضة المستوى غير محققةمتوسطمتوسط
55unchecked-sendإرسال غير محققمتوسطمتوسط
56uninitialized-localمتغيرات محلية غير مهيأةمتوسطمتوسط
57unused-returnقيم إرجاع غير مستخدمةمتوسطمتوسط
58chainlink-feed-registryاكتشاف عند استخدام سجل تغذية Chainlinkمنخفضعالي
59incorrect-modifierمعدِّلات يمكنها إرجاع القيمة الافتراضيةمنخفضعالي
60optimism-deprecationاكتشاف عند استخدام predeploy أو دالة مهملة من Optimism.منخفضعالي
61shadowing-builtinتظليل الرموز المضمنةمنخفضعالي
62shadowing-localتظليل المتغيرات المحليةمنخفضعالي
63uninitialized-fptr-cstاستدعاءات مؤشر دالة غير مهيأة في المنشئاتمنخفضعالي
64variable-scopeمتغيرات محلية مستخدمة قبل إعلانهامنخفضعالي
65void-cstمنشئ مستدعى لم يتم تنفيذهمنخفضعالي
66calls-loopاستدعاءات متعددة في حلقةمنخفضمتوسط
67events-accessالتحكم في الوصول إلى الأحداث المفقودةمنخفضمتوسط
68events-mathsالأحداث الحسابية المفقودةمنخفضمتوسط
69incorrect-unaryتعابير أحادية خطيرةمنخفضمتوسط
70missing-zero-checkالتحقق من صحة العنوان الصفري المفقودمنخفضمتوسط
71reentrancy-benignثغرات إعادة الدخول الحميدةمنخفضمتوسط
72reentrancy-eventsثغرات إعادة الدخول تؤدي إلى أحداث خارج الترتيبمنخفضمتوسط
73return-bombقد يستهلك المتلقي منخفض المستوى كل غاز المتصل بشكل غير متوقع.منخفضمتوسط
74timestampاستخدام خطير لـ block.timestampمنخفضمتوسط
75assemblyاستخدام التجميعإعلاميعالي
76assert-state-changeتغيير حالة assertإعلاميعالي
77boolean-equalمقارنة مع ثابت منطقيإعلاميعالي
78cyclomatic-complexityيكشف عن دوال ذات تعقيد دوري عالي (> 11)إعلاميعالي
79deprecated-standardsمعايير Solidity المهملةإعلاميعالي
80erc20-indexedمعاملات حدث ERC20 غير مفهرسةإعلاميعالي
81function-init-stateدالة تهيئ متغيرات الحالةإعلاميعالي
82incorrect-using-forيكشف عن استخدام عبارة using-for عندما لا تتطابق أي دالة من مكتبة معينة مع نوع معينإعلاميعالي
83low-level-callsاستدعاءات منخفضة المستوىإعلاميعالي
84missing-inheritanceوراثة مفقودةإعلاميعالي
85naming-conventionالامتثال لاتفاقيات تسمية Solidityإعلاميعالي
86pragmaإذا تم استخدام توجيهات pragma مختلفةإعلاميعالي
87redundant-statementsعبارات زائدة عن الحاجةإعلاميعالي
88solc-versionإصدار Solidity غير صحيحإعلاميعالي
89unimplemented-functionsدوال غير منفذةإعلاميعالي
90unindexed-event-addressأحداث بمعاملات عنوان بدون معاملات مفهرسةإعلاميعالي
91unused-stateمتغيرات حالة غير مستخدمةإعلاميعالي
92costly-loopعمليات مكلفة في حلقةإعلاميمتوسط
93dead-codeدوال غير مستخدمةإعلاميمتوسط
94reentrancy-unlimited-gasثغرات إعادة الدخول من خلال send و transferإعلاميمتوسط
95too-many-digitsالامتثال لأفضل الممارسات في الترميز الرقميإعلاميمتوسط
96cache-array-lengthيكشف عن حلقات for التي تستخدم عضو length لمصفوفة تخزين في شرط الحلقة ولا تقوم بتعديله.تحسينيعالي
97constable-statesمتغيرات حالة يمكن إعلانها كثوابتتحسينيعالي
98external-functionدالة عامة يمكن إعلانها كخارجيةتحسينيعالي
99immutable-statesمتغيرات حالة يمكن إعلانها كغير قابلة للتغييرتحسينيعالي
100var-read-using-thisالعقد يقرأ متغيره الخاص باستخدام thisتحسينيعالي

لمزيد من المعلومات، انظر

الطابعات

طابعات المراجعة السريعة

طابعات المراجعة المتعمقة* call-graph: تصدير رسم بياني للاستدعاءات للعقود إلى ملف dot

لتشغيل أداة طباعة، استخدم --print وقائمة مفصولة بفواصل من أدوات الطباعة.

انظر وثائق أدوات الطباعة للقوائم الكاملة.

الأدوات

انظر وثائق الأدوات للأدوات الإضافية.

اتصل بنا للحصول على مساعدة في بناء أدوات مخصصة.

وثائق واجهة برمجة التطبيقات (API)

وثائق داخلية حول سلذر متاحة هنا.

الحصول على المساعدة

لا تتردد في التوقف في قناة Slack (#ethereum) للحصول على مساعدة في استخدام أو توسيع سلذر.

الأسئلة الشائعة

كيف أستثني النسخ الوهمية أو الاختبارات؟

كيف أصلح مشكلة "ملف غير معروف" أو مشاكل الترجمة؟

  • نظرًا لأن سلذر يحتاج إلى AST الخاص بـ solc، يجب أن تكون جميع التبعيات متاحة. إذا كان العقد له تبعيات، فإن slither contract.sol سيفشل. بدلاً من ذلك، استخدم slither . في الدليل الأصلي لـ contracts/ (يجب أن ترى contracts/ عند تشغيل ls). إذا كان لديك مجلد node_modules/، فيجب أن يكون في نفس الدليل مثل contracts/. للتحقق من أن هذه المشكلة متعلقة بسلذر، قم بتشغيل أمر الترجمة للإطار الذي تستخدمه مثلًا npx hardhat compile. يجب أن يعمل بنجاح؛ وإلا، فإن محرك الترجمة الخاص بسلذر، crytic-compile، لا يمكنه توليد AST.

الترخيص

سلذر مرخص وموزع بموجب ترخيص AGPLv3. اتصل بنا إذا كنت تبحث عن استثناء للشروط.

المنشورات

منشورات Trail of Bits

منشورات خارجية

العنوانالاستخدامالمؤلفونالمؤتمرالشيفرة
ReJection: A AST-Based Reentrancy Vulnerability Detection Methodتحليل قائم على AST مبني فوق سلذرRui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia ChenCTCIS 19-
MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contractالاستفادة من اعتمادية البيانات عبر سلذرWilliam Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay GaneshISSRE 2019MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contractsالاستفادة من اعتمادية البيانات عبر سلذرQingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi MaSANER 20-
Verification of Ethereum Smart Contracts: A Model Checking Approachتنفيذ رمزي مبني فوق CFG الخاص بسلذرTam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho QuanIJMLC 20-
Smart Contract Repairالاعتماد على كاشفات الثغرات في سلذرXiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik RoychoudhuryTOSEM 20SCRepair
Demystifying Loops in Smart Contractsالاستفادة من اعتمادية البيانات عبر سلذرBen Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil DilligASE 20-
Trace-Based Dynamic Gas Estimation of Loops in Smart Contractsاستخدام CFG لسلذر لاكتشاف الحلقاتChunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang HuIEEE 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 VignaS&P 22Sailfish
SolType: Refinement Types for Arithmetic Overflow in Solidityاستخدام سلذر كواجهة أمامية لبناء نظام أنواع تحسينيBryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu FengPOPL 22-
Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detectionاستخدام سلذر لاستخراج ميزات الرموز (قابلية السك، القابلية للإيقاف، ..)Mazorra, Bruno, Victor Adan, and Vanesa DazaMathematics 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 JiangIEEE 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 Long2022 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 ReussnerIEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022SolidityAccessControlEnforcement
Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision Fusionاستخدام سلذر لاستخراج CFGWeichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan HuSensors 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 XiaACM Transactions on Software Engineering and Methodology, 2023-
Smart Contract Parallel Execution with Fine-Grained State Accessesاستخدام سلذر لبناء رسوم بيانية للوصول إلى الحالةXiaodong Qi, Jiao Jiao, Yi LiInternational 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 GuoACM Web Conference April 2023-
Identifying Vulnerabilities in Smart Contracts using Interval Analysisإنشاء 4 كاشفات فوق سلذرŞtefan-Claudiu Susan, Andrei ArusoaieFROM 2023-
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (لا يوجد PDF مفتوح الوصول)الاعتماد على CFG وAST في سلذرMaha Ayub , Tania Saleem , Muhammad Janjua , Talha AhmadTOSEM 2023SmartMuv

إذا كنت تستخدم سلذر في عمل أكاديمي، فكر في التقديم على جائزة بحث Crytic البالغة 10,000 دولار.

الفئات