
slither v0.11.6
Solidity और Vyper के लिए स्थैतिक विश्लेषक
Slither, स्मार्ट कॉन्ट्रैक्ट स्टैटिक एनालाइज़र
एम्पायर हैकिंग स्लैक में शामिल हों
- चर्चाएँ और सहायता
Slither एक Solidity और Vyper स्टैटिक विश्लेषण फ्रेमवर्क है जो Python3 में लिखा गया है। यह भेद्यता डिटेक्टरों का एक सेट चलाता है, कॉन्ट्रैक्ट विवरणों के बारे में दृश्य जानकारी प्रिंट करता है, और आसानी से कस्टम विश्लेषण लिखने के लिए एक API प्रदान करता है। Slither डेवलपर्स को कमजोरियों का पता लगाने, अपनी कोड समझ को बढ़ाने और तेज़ी से कस्टम विश्लेषणों का प्रोटोटाइप बनाने में सक्षम बनाता है।
- विशेषताएँ
- उपयोग
- कैसे स्थापित करें
- डिटेक्टर
- प्रिंटर
- उपकरण
- API दस्तावेज़ीकरण
- सहायता प्राप्त करना
- FAQ
- लाइसेंस
- प्रकाशन
विशेषताएँ
- कम झूठी सकारात्मकता के साथ कमजोर Solidity कोड का पता लगाता है (ट्रॉफियों की सूची देखें [./trophies.md])
- स्रोत कोड में त्रुटि की स्थिति की पहचान करता है
- निरंतर एकीकरण और Hardhat/Foundry बिल्ड में आसानी से एकीकृत होता है
- अंतर्निहित 'प्रिंटर' महत्वपूर्ण कॉन्ट्रैक्ट जानकारी की त्वरित रिपोर्ट करते हैं
- Python में कस्टम विश्लेषण लिखने के लिए डिटेक्टर API
- Solidity >= 0.4 के साथ लिखे गए कॉन्ट्रैक्ट का विश्लेषण करने की क्षमता
- मध्यवर्ती प्रतिनिधित्व (SlithIR) सरल, उच्च-सटीक विश्लेषण सक्षम बनाता है
- सभी सार्वजनिक Solidity कोड का 99.9% सही ढंग से पार्स करता है
- प्रति कॉन्ट्रैक्ट 1 सेकंड से कम का औसत निष्पादन समय
- CI में Github के कोड स्कैनिंग के साथ एकीकृत होता है
- Vyper स्मार्ट कॉन्ट्रैक्ट के लिए समर्थन
उपयोग
किसी Hardhat/Foundry/Dapp/Brownie एप्लिकेशन पर Slither चलाएँ:```console slither .
यह पसंदीदा विकल्प है यदि आपके प्रोजेक्ट में निर्भरताएँ हैं क्योंकि Slither स्रोत कोड संकलित करने के लिए अंतर्निहित संकलन ढांचे पर निर्भर करता है।
हालांकि, आप Slither को एक एकल फ़ाइल पर चला सकते हैं जो निर्भरताएँ आयात नहीं करती:```console
slither tests/uninitialized.sol
कैसे स्थापित करें
नोट Slither को Python 3.10+ की आवश्यकता है। यदि आप नहीं हैं समर्थित संकलन फ्रेमवर्क में से किसी एक का उपयोग करने जा रहे हैं, तो आपको solc, Solidity कंपाइलर की आवश्यकता है; हम solc संस्करणों के बीच सुविधाजनक रूप से स्विच करने के लिए solc-select का उपयोग करने की सलाह देते हैं।
uv का उपयोग करना (अनुशंसित)
uv एक तेज़ Python पैकेज मैनेजर है जो pip से 10-100x तेज़ है।```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>
The -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 एक्शन एकीकरण के लिए, slither-action का उपयोग करें।
- प्री-कमिट एकीकरण के लिए, उपयोग करें (
$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: प्रत्येक कॉन्ट्रैक्ट के वंशानुक्रम ग्राफ़ को डॉट फ़ाइल में निर्यात करेंcontract-summary: कॉन्ट्रैक्ट का सारांश प्रिंट करेंloc: स्रोत फ़ाइलों (SRC), निर्भरताओं (DEP), और परीक्षण फ़ाइलों (TEST) में पाई गई कोड की कुल पंक्तियों (LOC), स्रोत कोड की पंक्तियों (SLOC), और टिप्पणी कोड की पंक्तियों (CLOC) की गणना करें।entry-points: कॉन्ट्रैक्ट के सभी अवस्था-परिवर्तन प्रवेश बिंदु फंक्शन और उनके चर प्रिंट करें
गहन समीक्षा प्रिंटर* call-graph: अनुबंधों का कॉल-ग्राफ़ एक डॉट फ़ाइल में निर्यात करें
cfg: प्रत्येक फ़ंक्शन का CFG निर्यात करेंfunction-summary: फ़ंक्शनों का सारांश प्रिंट करेंvars-and-auth: लिखे गए स्टेट वेरिएबल और फ़ंक्शनों का प्राधिकरण प्रिंट करेंnot-pausable: उन फ़ंक्शनों को प्रिंट करें जोwhenNotPausedमॉडिफ़ायर का उपयोग नहीं करते.
प्रिंटर चलाने के लिए, --print और अल्पविराम से अलग किए गए प्रिंटरों की सूची का उपयोग करें।
पूरी सूची के लिए प्रिंटर दस्तावेज़ीकरण देखें।
Tools
slither-check-upgradeability:delegatecall-आधारित अपग्रेडेबिलिटी की समीक्षा करेंslither-prop: स्वचालित यूनिट परीक्षण और प्रॉपर्टी जनरेशनslither-flat: कोडबेस को फ़्लैट करेंslither-check-erc: ERC की अनुरूपता जाँचेंslither-read-storage: अनुबंधों से स्टोरेज मान पढ़ेंslither-interface: एक अनुबंध के लिए इंटरफ़ेस जनरेट करें
अतिरिक्त उपकरणों के लिए उपकरण दस्तावेज़ीकरण देखें।
कस्टम उपकरण बनाने में सहायता प्राप्त करने के लिए हमसे संपर्क करें.
API Documentation
Slither के आंतरिक भागों पर दस्तावेज़ीकरण यहाँ उपलब्ध है।
Getting Help
Slither का उपयोग या विस्तार करने में सहायता के लिए हमारे Slack चैनल (#ethereum) पर आने के लिए स्वतंत्र महसूस करें।
- प्रिंटर दस्तावेज़ीकरण प्रत्येक अनुबंध के लिए Slither द्वारा विज़ुअलाइज़ करने योग्य जानकारी का वर्णन करता है।
- डिटेक्टर दस्तावेज़ीकरण एक नई भेद्यता विश्लेषण कैसे लिखें, इसका वर्णन करता है।
- API दस्तावेज़ीकरण कस्टम विश्लेषणों के लिए उपलब्ध विधियों और वस्तुओं का वर्णन करता है।
- SlithIR दस्तावेज़ीकरण SlithIR मध्यवर्ती प्रतिनिधित्व का वर्णन करता है।
FAQ
मैं मॉक या परीक्षणों को कैसे बाहर करूं?
- पथ फ़िल्टरिंग पर हमारा दस्तावेज़ीकरण देखें।
मैं "अज्ञात फ़ाइल" या संकलन संबंधी समस्याओं को कैसे ठीक करूं?
- क्योंकि slither को solc AST की आवश्यकता है, इसलिए सभी निर्भरताएँ उपलब्ध होनी चाहिए।
यदि किसी अनुबंध में निर्भरताएँ हैं, तो
slither contract.solविफल हो जाएगा। इसके बजाय,contracts/के पैरेंट डायरेक्टरी मेंslither .का उपयोग करें (जब आपlsचलाते हैं तो आपकोcontracts/दिखाई देना चाहिए)। यदि आपके पासnode_modules/फ़ोल्डर है, तो यहcontracts/के समान डायरेक्टरी में होना चाहिए। यह सत्यापित करने के लिए कि यह समस्या slither से संबंधित है, आप जिस फ्रेमवर्क का उपयोग कर रहे हैं उसके लिए संकलन कमांड चलाएं, जैसेnpx hardhat compile। यह सफलतापूर्वक काम करना चाहिए; अन्यथा, slither का संकलन इंजन, crytic-compile, AST उत्पन्न नहीं कर सकता।
License
Slither AGPLv3 लाइसेंस के तहत लाइसेंस प्राप्त और वितरित है। यदि आप शर्तों के अपवाद की तलाश में हैं तो हमसे संपर्क करें.
Publications
Trail of Bits publication
- Slither: स्मार्ट कॉन्ट्रैक्ट्स के लिए एक स्थैतिक विश्लेषण फ्रेमवर्क, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
External publications
| शीर्षक | उपयोग | लेखक | प्रकाशन | कोड |
|---|---|---|---|---|
| ReJection: AST-आधारित पुनःप्रवेश भेद्यता पहचान विधि | Slither के ऊपर निर्मित AST-आधारित विश्लेषण | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | - |
| MPro: स्मार्ट कॉन्ट्रैक्ट के स्केलेबल परीक्षण के लिए स्थैतिक और प्रतीकात्मक विश्लेषण का संयोजन | Slither के माध्यम से डेटा निर्भरता का लाभ उठाएं | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: फ़ज़िंग से स्मार्ट कॉन्ट्रैक्ट्स के विरुद्ध कुशल एक्सप्लॉइट जनरेशन तक | Slither के माध्यम से डेटा निर्भरता का लाभ उठाएं | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Ethereum स्मार्ट कॉन्ट्रैक्ट्स का सत्यापन: एक मॉडल जाँच दृष्टिकोण | Slither के CFG के ऊपर निर्मित प्रतीकात्मक निष्पादन | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| स्मार्ट कॉन्ट्रैक्ट मरम्मत | Slither के भेद्यता डिटेक्टरों पर निर्भर करें | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| स्मार्ट कॉन्ट्रैक्ट्स में लूप्स को डिमिस्टिफाई करना | Slither के माध्यम से डेटा निर्भरता का लाभ उठाएं | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| स्मार्ट कॉन्ट्रैक्ट्स में लूप्स का ट्रेस-आधारित डायनेमिक गैस अनुमान | लूप्स का पता लगाने के लिए Slither के CFG का उपयोग करें | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | - |
| SAILFISH: सेकंड्स में स्मार्ट कॉन्ट्रैक्ट स्थिति-असंगति बग्स की जाँच | एक स्टोरेज निर्भरता ग्राफ़ बनाने के लिए SlithIR पर निर्भर करें | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | Sailfish |
| SolType: Solidity में अंकगणितीय अतिप्रवाह के लिए रिफाइनमेंट प्रकार | रिफाइनमेंट प्रकार प्रणाली बनाने के लिए Slither का फ्रंटएंड के रूप में उपयोग करें | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | - |
| Do Not Rug on Me: स्वचालित स्कैम पहचान के लिए मशीन लर्निंग तकनीकों का लाभ उठाना | टोकन की विशेषताएँ निकालने के लिए Slither का उपयोग करें (मिंटेबल, पॉज़ेबल, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | - |
| MANDO: स्मार्ट कॉन्ट्रैक्ट भेद्यताओं की सूक्ष्म-स्तरीय पहचान के लिए बहु-स्तरीय विषम ग्राफ एम्बेडिंग | CFG और कॉल ग्राफ़ निकालने के लिए Slither का उपयोग करें | 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 |
| स्मार्ट कॉन्ट्रैक्ट्स में मूल्य वृद्धि TOD भेद्यताओं का स्वचालित ऑडिटिंग | CFG और डेटा निर्भरताएँ निकालने के लिए Slither का उपयोग करें | Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | Smart-Contract-Repair |
| स्मार्ट कॉन्ट्रैक्ट्स के लिए एक्सेस कंट्रोल नीतियों का मॉडलिंग और प्रवर्तन | Slither की डेटा निर्भरताओं का विस्तार करें | Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf Reussner | IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022 | SolidityAccessControlEnforcement |
| डीप लर्निंग और मल्टीमॉडल निर्णय फ्यूजन पर आधारित स्मार्ट कॉन्ट्रैक्ट भेद्यता पहचान | CFG निकालने के लिए Slither का उपयोग करें | Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan Hu | Sensors 2023, 23, 7246 | - |
| स्मार्ट कॉन्ट्रैक्ट कोड पुन: उपयोग में अज्ञात को प्रकट करने के लिए सिमेंटिक-समृद्ध कोड ज्ञान ग्राफ | कोड विशेषताएँ निकालने के लिए Slither का उपयोग करें (CFG, फ़ंक्शन, पैरामीटर प्रकार, ..) | Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin Xia | ACM Transactions on Software Engineering and Methodology, 2023 | - |
| सूक्ष्म-स्तरीय स्थिति एक्सेस के साथ स्मार्ट कॉन्ट्रैक्ट समानांतर निष्पादन | स्टेट एक्सेस ग्राफ़ बनाने के लिए Slither का उपयोग करें | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| खराब सेब: विकेंद्रीकृत पारिस्थितिकी तंत्रों में केंद्रीकृत सुरक्षा जोखिमों को समझना | Slither के ऊपर एक आंतरिक विश्लेषण लागू करें | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| अंतराल विश्लेषण का उपयोग करके स्मार्ट कॉन्ट्रैक्ट्स में भेद्यताओं की पहचान करना | Slither के ऊपर 4 डिटेक्टर बनाएं | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Ethereum ब्लॉकचेन स्मार्ट कॉन्ट्रैक्ट्स का स्टोरेज स्थिति विश्लेषण और निष्कर्षण (खुले एक्सेस में कोई PDF नहीं) | Slither के CFG और AST पर निर्भर करें | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
यदि आप किसी शैक्षणिक कार्य पर Slither का उपयोग कर रहे हैं, तो Crytic $10k अनुसंधान पुरस्कार के लिए आवेदन करने पर विचार करें।