Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
slither — Solidity 및 Vyper용 정적 분석기 | Kitploit
도구/GitHubGitHub/crytic/slither
Static AnalysisVulnerability AnalysisCode Analysis
GitHubcrytic/slither

slither

Solidity 및 Vyper용 정적 분석기

저장소 보기웹사이트
6.3k1.1k586일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
# [Slither, 스마트 계약 정적 분석기](https://crytic.github.io/slither/slither.html)

<img src="https://assets.kitploit.com/production/public/readmes/2943/62b8c109c585043091c50668ec219aa530aa6d589d7cda02181bf209249f5205.png" alt="Slither 정적 분석 프레임워크 로고" width="500" />

[![Build Status](https://img.shields.io/github/actions/workflow/status/crytic/slither/ci.yml?branch=master)](https://github.com/crytic/slither/actions?query=workflow%3ACI)
![PyPI](https://img.shields.io/pypi/v/slither-analyzer?logo=python&logoColor=white&label=slither-analyzer)
[![Slither - Read the Docs](https://img.shields.io/badge/Slither-Read_the_Docs-2ea44f)](https://crytic.github.io/slither/slither.html)
[![Slither - Wiki](https://img.shields.io/badge/Slither-Wiki-2ea44f)](https://github.com/crytic/slither/wiki/SlithIR)

> Empire Hacking Slack에 참여하세요
>
> [![Slack Status](https://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc/)
> > _- 토론 및 지원_

**Slither**는 Python3로 작성된 Solidity 및 Vyper 정적 분석 프레임워크입니다. 취약점 탐지기 모음을 실행하고, 계약 세부 정보에 대한 시각적 정보를 출력하며, 사용자 정의 분석을 쉽게 작성할 수 있는 API를 제공합니다. Slither는 개발자가 취약점을 찾고, 코드 이해도를 높이며, 사용자 정의 분석을 신속하게 프로토타입화할 수 있도록 합니다.

* [특징](#features)
* [사용법](#usage)
* [설치 방법](#how-to-install)
  * [uv 사용 (권장)](#using-uv-recommended)
  * [Pip 사용](#using-pip)
  * [Git 사용](#using-git-development)
  * [Docker 사용](#using-docker)
  * [통합](#integration)
* [탐지기](#detectors)
* [프린터](#printers)
  * [빠른 검토 프린터](#quick-review-printers)
  * [심층 검토 프린터](#in-depth-review-printers)
* [도구](#tools)
* [API 문서](#api-documentation)
* [도움말](#getting-help)
* [FAQ](#faq)
* [라이선스](#license)
* [발행물](#publications)
  * [Trail of Bits 발행물](#trail-of-bits-publication)
  * [외부 발행물](#external-publications)

## 특징

* 낮은 오탐지율로 취약한 Solidity 코드를 탐지합니다 (트로피 목록 보기 [trophies](https://github.com/crytic/slither/blob/master/trophies.md))
* 소스 코드에서 오류 조건이 발생하는 위치를 식별합니다
* 지속적 통합 및 Hardhat/Foundry 빌드에 쉽게 통합됩니다
* 내장된 '프린터'가 중요 계약 정보를 신속하게 보고합니다
* Python으로 사용자 정의 분석을 작성하기 위한 탐지기 API
* Solidity >= 0.4로 작성된 계약 분석 기능
* 중간 표현 ([SlithIR](https://github.com/crytic/slither/wiki/SlithIR))을 통해 간단하고 높은 정밀도의 분석 가능
* 모든 공개 Solidity 코드의 99.9%를 정확하게 파싱
* 계약당 평균 실행 시간 1초 미만
* [CI](https://github.com/marketplace/actions/slither-action)에서 Github의 코드 스캔과 통합
* Vyper 스마트 계약 지원

## 사용법

Hardhat/Foundry/Dapp/Brownie 애플리케이션에서 Slither 실행:```console
slither .
```
이 방법은 프로젝트에 의존성이 있을 때 권장됩니다. Slither는 기본 컴파일 프레임워크에 의존하여 소스 코드를 컴파일하기 때문입니다.

하지만 의존성을 임포트하지 않는 단일 파일에서 Slither를 실행할 수도 있습니다:```console
slither tests/uninitialized.sol
```
## 설치 방법

> **참고**
> Slither는 Python 3.10+가 필요합니다.
지원되는 [컴파일 프레임워크](https://github.com/crytic/crytic-compile) 중 하나를 **사용하지 않을** 경우, [solc](https://github.com/ethereum/solidity/), 즉 Solidity 컴파일러가 필요합니다. solc 버전 간 편리하게 전환하려면 [solc-select](https://github.com/crytic/solc-select) 사용을 권장합니다.

### uv 사용 (권장)

[uv](https://github.com/astral-sh/uv)는 pip보다 10~100배 빠른 Python 패키지 관리자입니다.```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 <target>
```
업그레이드하려면:```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 사용

[`eth-security-toolbox`](https://github.com/crytic/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](https://github.com/marketplace/actions/slither-action)을 사용하세요.
* pre-commit 통합을 위해서는 (`$GIT_TAG`를 실제 태그로 바꾸세요) 사용하세요.  ```YAML
  - repo: https://github.com/crytic/slither
    rev: $GIT_TAG
    hooks:
      - id: slither
  ```
* To generate a Markdown report, use `slither [target] --checklist`.
* To generate a Markdown with GitHub source code highlighting, use `slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/` (replace `ORG`, `REPO`, `COMMIT`)

## 탐지기

번호 | 탐지기 | 탐지 내용 | 영향 | 신뢰도
--- | --- | --- | --- | ---
1 | `abiencoderv2-array` | [스토리지 abiencoderv2 배열](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-abiencoderv2-array) | 높음 | 높음
2 | `arbitrary-send-erc20` | [임의의 `from`을 사용하는 transferFrom](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom) | 높음 | 높음
3 | `array-by-reference` | [값으로 스토리지 배열 수정](https://github.com/crytic/slither/wiki/Detector-Documentation#modifying-storage-array-by-value) | 높음 | 높음
4 | `encode-packed-collision` | [ABI encodePacked 충돌](https://github.com/crytic/slither/wiki/Detector-Documentation#abi-encodePacked-collision) | 높음 | 높음
5 | `incorrect-shift` | [시프트 명령어의 매개변수 순서가 잘못됨](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly) | 높음 | 높음
6 | `multiple-constructors` | [다중 생성자 방식](https://github.com/crytic/slither/wiki/Detector-Documentation#multiple-constructor-schemes) | 높음 | 높음
7 | `name-reused` | [계약 이름 재사용](https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused) | 높음 | 높음
8 | `protected-vars` | [보호되지 않은 변수 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#protected-variables) | 높음 | 높음
9 | `public-mappings-nested` | [중첩 변수가 있는 public 매핑](https://github.com/crytic/slither/wiki/Detector-Documentation#public-mappings-with-nested-variables) | 높음 | 높음
10 | `rtlo` | [오른쪽에서 왼쪽 재정의 제어 문자 사용](https://github.com/crytic/slither/wiki/Detector-Documentation#right-to-left-override-character) | 높음 | 높음
11 | `shadowing-state` | [상태 변수 섀도잉](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing) | 높음 | 높음
12 | `suicidal` | [누구나 계약을 파괴할 수 있는 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#suicidal) | 높음 | 높음
13 | `uninitialized-state` | [초기화되지 않은 상태 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-state-variables) | 높음 | 높음
14 | `uninitialized-storage` | [초기화되지 않은 스토리지 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-storage-variables) | 높음 | 높음
15 | `unprotected-upgrade` | [보호되지 않은 업그레이드 가능 계약](https://github.com/crytic/slither/wiki/Detector-Documentation#unprotected-upgradeable-contract) | 높음 | 높음
16 | `arbitrary-send-erc20-permit` | [permint과 함께 임의의 from을 사용하는 transferFrom](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom-used-with-permit) | 높음 | 중간
17 | `arbitrary-send-eth` | [임의의 대상으로 Ether를 보내는 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations) | 높음 | 중간
18 | `controlled-array-length` | [오염된 배열 길이 할당](https://github.com/crytic/slither/wiki/Detector-Documentation#array-length-assignment) | 높음 | 중간
19 | `controlled-delegatecall` | [제어되는 delegatecall 대상](https://github.com/crytic/slither/wiki/Detector-Documentation#controlled-delegatecall) | 높음 | 중간
20 | `delegatecall-loop` | [루프 내에서 `delegatecall`을 사용하는 지불 가능 함수](https://github.com/crytic/slither/wiki/Detector-Documentation/#payable-functions-using-delegatecall-inside-a-loop) | 높음 | 중간
21 | `incorrect-exp` | [잘못된 지수 연산](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation) | 높음 | 중간
22 | `incorrect-return` | [어셈블리 모드에서 `return`이 잘못 사용된 경우](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-return-in-assembly) | 높음 | 중간
23 | `msg-value-loop` | [루프 내의 msg.value](https://github.com/crytic/slither/wiki/Detector-Documentation/#msgvalue-inside-a-loop) | 높음 | 중간
24 | `reentrancy-eth` | [재진입 취약점 (Ether 도난)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities) | 높음 | 중간
25 | `reentrancy-balance` | [오래된 잔액 확인으로 이어지는 재진입 취약점](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | 높음 | 중간
26 | `return-leave` | [`leave` 대신 `return`이 사용된 경우](https://github.com/crytic/slither/wiki/Detector-Documentation#return-instead-of-leave-in-assembly) | 높음 | 중간
27 | `storage-array` | [부호 있는 정수 배열 컴파일러 버그](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-signed-integer-array) | 높음 | 중간
28 | `unchecked-transfer` | [확인되지 않은 토큰 전송](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer) | 높음 | 중간
29 | `weak-prng` | [약한 PRNG](https://github.com/crytic/slither/wiki/Detector-Documentation#weak-PRNG) | 높음 | 중간
30 | `domain-separator-collision` | [EIP-2612의 DOMAIN_SEPARATOR()와 서명이 충돌하는 함수가 있는 ERC20 토큰 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#domain-separator-collision) | 중간 | 높음
31 | `enum-conversion` | [위험한 enum 변환 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-enum-conversion) | 중간 | 높음
32 | `erc20-interface` | [잘못된 ERC20 인터페이스](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface) | 중간 | 높음
33 | `erc721-interface` | [잘못된 ERC721 인터페이스](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc721-interface) | 중간 | 높음
34 | `incorrect-equality` | [위험한 엄격한 동등성](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) | 중간 | 높음
35 | `locked-ether` | [Ether를 잠그는 계약](https://github.com/crytic/slither/wiki/Detector-Documentation#contracts-that-lock-ether) | 중간 | 높음
36 | `mapping-deletion` | [구조체를 포함하는 매핑 삭제](https://github.com/crytic/slither/wiki/Detector-Documentation#deletion-on-mapping-containing-a-structure) | 중간 | 높음
37 | `pyth-deprecated-functions` | [Pyth 사용 중단 함수 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-deprecated-functions) | 중간 | 높음
38 | `pyth-unchecked-confidence` | [Pyth 가격의 신뢰 수준이 확인되지 않은 경우 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-confidence-level) | 중간 | 높음
39 | `pyth-unchecked-publishtime` | [Pyth 가격의 publishTime이 확인되지 않은 경우 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-publishtime) | 중간 | 높음
40 | `shadowing-abstract` | [추상 계약의 상태 변수 섀도잉](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing-from-abstract-contracts) | 중간 | 높음
41 | `tautological-compare` | [변수를 자기 자신과 비교하면 비교 유형에 따라 항상 참 또는 거짓을 반환함](https://github.com/crytic/slither/wiki/Detector-Documentation#tautological-compare) | 중간 | 높음
42 | `tautology` | [동어 반복 또는 모순](https://github.com/crytic/slither/wiki/Detector-Documentation#tautology-or-contradiction) | 중간 | 높음
43 | `write-after-write` | [사용되지 않는 쓰기](https://github.com/crytic/slither/wiki/Detector-Documentation#write-after-write) | 중간 | 높음
44 | `boolean-cst` | [부울 상수 오용](https://github.com/crytic/slither/wiki/Detector-Documentation#misuse-of-a-boolean-constant) | 중간 | 중간
45 | `chronicle-unchecked-price` | [Chronicle 가격이 확인되지 않은 경우 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#chronicle-unchecked-price) | 중간 | 중간
46 | `constant-function-asm` | [어셈블리 코드를 사용하는 상수 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-using-assembly-code) | 중간 | 중간
47 | `constant-function-state` | [상태를 변경하는 상수 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-changing-the-state) | 중간 | 중간
48 | `divide-before-multiply` | [부정확한 산술 연산 순서](https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply) | 중간 | 중간
49 | `gelato-unprotected-randomness` | [보호되지 않은 함수 내에서 `_requestRandomness` 호출](https://github.com/crytic/slither/wiki/Detector-Documentation#gelato-unprotected-randomness) | 중간 | 중간
50 | `out-of-order-retryable` | [순서가 잘못된 재시도 가능 트랜잭션](https://github.com/crytic/slither/wiki/Detector-Documentation#out-of-order-retryable-transactions) | 중간 | 중간
51 | `reentrancy-no-eth` | [재진입 취약점 (Ether 도난 없음)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1) | 중간 | 중간
52 | `reused-constructor` | [재사용된 기본 생성자](https://github.com/crytic/slither/wiki/Detector-Documentation#reused-base-constructors) | 중간 | 중간
53 | `tx-origin` | [`tx.origin`의 위험한 사용](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-usage-of-txorigin) | 중간 | 중간
54 | `unchecked-lowlevel` | [확인되지 않은 저수준 호출](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls) | 중간 | 중간
55 | `unchecked-send` | [확인되지 않은 send](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-send) | 중간 | 중간
56 | `uninitialized-local` | [초기화되지 않은 지역 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables) | 중간 | 중간
57 | `unused-return` | [사용되지 않는 반환 값](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return) | 중간 | 중간
58 | `chainlink-feed-registry` | [Chainlink 피드 레지스트리 사용 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#chainlink-feed-registry-usage) | 낮음 | 높음
59 | `incorrect-modifier` | [기본 값을 반환할 수 있는 수정자](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier) | 낮음 | 높음
60 | `optimism-deprecation` | [사용 중단된 Optimism 사전 배포 또는 함수가 사용된 경우 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#optimism-deprecated-predeploy-or-function) | 낮음 | 높음
61 | `shadowing-builtin` | [내장 기호 섀도잉](https://github.com/crytic/slither/wiki/Detector-Documentation#builtin-symbol-shadowing) | 낮음 | 높음
62 | `shadowing-local` | [지역 변수 섀도잉](https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing) | 낮음 | 높음
63 | `uninitialized-fptr-cst` | [생성자에서 초기화되지 않은 함수 포인터 호출](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-function-pointers-in-constructors) | 낮음 | 높음
64 | `variable-scope` | [선언 전에 사용된 지역 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#pre-declaration-usage-of-local-variables) | 낮음 | 높음
65 | `void-cst` | [호출되었지만 구현되지 않은 생성자](https://github.com/crytic/slither/wiki/Detector-Documentation#void-constructor) | 낮음 | 높음
66 | `calls-loop` | [루프 내의 다중 호출](https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop) | 낮음 | 중간
67 | `events-access` | [이벤트 접근 제어 누락](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-access-control) | 낮음 | 중간
68 | `events-maths` | [이벤트 산술 누락](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic) | 낮음 | 중간
69 | `incorrect-unary` | [위험한 단항 표현식](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-unary-expressions) | 낮음 | 중간
70 | `missing-zero-check` | [0 주소 검증 누락](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation) | 낮음 | 중간
71 | `reentrancy-benign` | [양성 재진입 취약점](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) | 낮음 | 중간
72 | `reentrancy-events` | [순서가 잘못된 이벤트로 이어지는 재진입 취약점](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) | 낮음 | 중간
73 | `return-bomb` | [저수준 호출 대상이 예상치 못하게 모든 호출자의 가스를 소비할 수 있음](https://github.com/crytic/slither/wiki/Detector-Documentation#return-bomb) | 낮음 | 중간
74 | `timestamp` | [`block.timestamp`의 위험한 사용](https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp) | 낮음 | 중간
75 | `assembly` | [어셈블리 사용](https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage) | 정보 | 높음
76 | `assert-state-change` | [assert 상태 변경](https://github.com/crytic/slither/wiki/Detector-Documentation#assert-state-change) | 정보 | 높음
77 | `boolean-equal` | [부울 상수와 비교](https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality) | 정보 | 높음
78 | `cyclomatic-complexity` | [높은 순환 복잡도(> 11)를 가진 함수 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity) | 정보 | 높음
79 | `deprecated-standards` | [사용 중단된 Solidity 표준](https://github.com/crytic/slither/wiki/Detector-Documentation#deprecated-standards) | 정보 | 높음
80 | `erc20-indexed` | [인덱싱되지 않은 ERC20 이벤트 매개변수](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters) | 정보 | 높음
81 | `function-init-state` | [상태 변수를 초기화하는 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#function-initializing-state) | 정보 | 높음
82 | `incorrect-using-for` | [주어진 라이브러리의 함수 중 주어진 유형과 일치하는 함수가 없을 때 using-for 문 사용 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-usage-of-using-for-statement) | 정보 | 높음
83 | `low-level-calls` | [저수준 호출](https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls) | 정보 | 높음
84 | `missing-inheritance` | [상속 누락](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-inheritance) | 정보 | 높음
85 | `naming-convention` | [Solidity 명명 규칙 준수](https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions) | 정보 | 높음
86 | `pragma` | [다른 pragma 지시문이 사용된 경우](https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used) | 정보 | 높음
87 | `redundant-statements` | [중복 문](https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements) | 정보 | 높음
88 | `solc-version` | [잘못된 Solidity 버전](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity) | 정보 | 높음
89 | `unimplemented-functions` | [구현되지 않은 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions) | 정보 | 높음
90 | `unindexed-event-address` | [인덱싱된 매개변수 없이 주소 매개변수를 사용하는 이벤트](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters) | 정보 | 높음
91 | `unused-state` | [사용되지 않는 상태 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | 정보 | 높음
92 | `costly-loop` | [루프 내의 비용이 많이 드는 연산](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | 정보 | 중간
93 | `dead-code` | [사용되지 않는 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | 정보 | 중간
94 | `reentrancy-unlimited-gas` | [send 및 transfer를 통한 재진입 취약점](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | 정보 | 중간
95 | `too-many-digits` | [숫자 표기법 모범 사례 준수](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | 정보 | 중간
96 | `cache-array-length` | [루프 조건에서 일부 스토리지 배열의 `length` 멤버를 사용하고 이를 수정하지 않는 `for` 루프 감지](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | 최적화 | 높음
97 | `constable-states` | [상수로 선언될 수 있는 상태 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | 최적화 | 높음
98 | `external-function` | [external로 선언될 수 있는 public 함수](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | 최적화 | 높음
99 | `immutable-states` | [immutable로 선언될 수 있는 상태 변수](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | 최적화 | 높음
100 | `var-read-using-this` | [`this`를 사용하여 자체 변수를 읽는 계약](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | 최적화 | 높음

자세한 내용은 다음을 참조하세요.

* 각 탐지기에 대한 자세한 내용은 [탐지기 문서](https://github.com/crytic/slither/wiki/Detector-Documentation)를 참조하세요.
* 선택한 탐지만 실행하려면 [탐지 선택](https://github.com/crytic/slither/wiki/Usage#detector-selection)을 참조하세요. 기본적으로 모든 탐지기가 실행됩니다.
* 개별 결과를 필터링하려면 [분류 모드](https://github.com/crytic/slither/wiki/Usage#triage-mode)를 참조하세요.

## 출력기

### 빠른 검토 출력기

* `human-summary`: [계약의 사람이 읽을 수 있는 요약 출력](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary)
* `inheritance-graph`: [각 계약의 상속 그래프를 dot 파일로 내보내기](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph)
* `contract-summary`: [계약 요약 출력](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary)
* `loc`: [소스 파일(SRC), 종속성(DEP), 테스트 파일(TEST)에서 찾은 총 코드 줄 수(LOC), 소스 코드 줄 수(SLOC), 주석 코드 줄 수(CLOC) 계산](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc)
* `entry-points`: [계약의 모든 상태 변경 진입점 함수와 해당 변수 출력](https://github.com/trailofbits/slither/wiki/Printer-documentation#entry-points)

### 심층 검토 출력기* `call-graph`: [컨트랙트의 호출 그래프를 dot 파일로 내보내기](https://github.com/crytic/slither/wiki/Printer-documentation#call-graph)
* `cfg`: [각 함수의 CFG 내보내기](https://github.com/crytic/slither/wiki/Printer-documentation#cfg)
* `function-summary`: [함수 요약 출력](https://github.com/crytic/slither/wiki/Printer-documentation#function-summary)
* `vars-and-auth`: [쓰여진 상태 변수와 함수의 권한 출력](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization)
* `not-pausable`: [`whenNotPaused` 수정자를 사용하지 않는 함수 출력](https://github.com/crytic/slither/wiki/Printer-documentation#when-not-paused).

프린터를 실행하려면 `--print`와 함께 쉼표로 구분된 프린터 목록을 사용하세요.

전체 목록은 [프린터 문서](https://github.com/crytic/slither/wiki/Printer-documentation)를 참조하세요.

## 도구

* `slither-check-upgradeability`: [`delegatecall` 기반 업그레이드 가능성 검토](https://github.com/crytic/slither/blob/master/docs/src/tools/Upgradeability-Checks.md)
* `slither-prop`: [자동 단위 테스트 및 속성 생성](https://github.com/crytic/slither/blob/master/docs/src/tools/Property-generation.md)
* `slither-flat`: [코드베이스 평탄화](https://github.com/crytic/slither/blob/master/docs/src/tools/Contract-Flattening.md)
* `slither-check-erc`: [ERC 적합성 검사](https://github.com/crytic/slither/blob/master/docs/src/tools/ERC-Conformance.md)
* `slither-read-storage`: [컨트랙트에서 스토리지 값 읽기](https://github.com/crytic/slither/blob/master/docs/src/tools/ReadStorage.md)
* `slither-interface`: [컨트랙트에 대한 인터페이스 생성](https://github.com/crytic/slither/blob/master/docs/src/tools/Interface.md)

추가 도구는 [도구 문서](https://github.com/crytic/slither/blob/master/docs/src/tools/README.md)를 참조하세요.

[문의하기](https://www.trailofbits.com/contact/)를 통해 사용자 정의 도구 구축에 대한 도움을 받을 수 있습니다.

## API 문서

Slither 내부에 대한 문서는 [여기](https://crytic.github.io/slither/slither.html)에서 확인할 수 있습니다.

## 도움말

Slither 사용 또는 확장에 대한 도움을 받으려면 [Slack 채널](https://empireslacking.herokuapp.com) (#ethereum)에 방문하세요.

* [프린터 문서](https://github.com/crytic/slither/wiki/Printer-documentation)는 Slither가 각 컨트랙트에 대해 시각화할 수 있는 정보를 설명합니다.
* [탐지기 문서](https://github.com/crytic/slither/wiki/Adding-a-new-detector)는 새로운 취약점 분석을 작성하는 방법을 설명합니다.
* [API 문서](https://github.com/crytic/slither/wiki/Python-API)는 사용자 정의 분석에 사용 가능한 메서드와 객체를 설명합니다.
* [SlithIR 문서](https://github.com/crytic/slither/wiki/SlithIR)는 SlithIR 중간 표현을 설명합니다.

## 자주 묻는 질문 (FAQ)

모의 객체(mocks)나 테스트를 제외하려면 어떻게 하나요?

* [경로 필터링](https://github.com/crytic/slither/wiki/Usage#path-filtering)에 대한 문서를 참조하세요.

"unknown file" 또는 컴파일 문제를 해결하려면 어떻게 하나요?

* slither는 solc AST가 필요하므로 모든 의존성을 사용할 수 있어야 합니다.
컨트랙트에 의존성이 있는 경우 `slither contract.sol`은 실패합니다.
대신 `contracts/`의 상위 디렉토리에서 `slither .`를 사용하세요(`ls`를 실행하면 `contracts/`가 보여야 합니다).
`node_modules/` 폴더가 있다면 `contracts/`와 같은 디렉토리에 있어야 합니다. 이 문제가 slither와 관련된 것인지 확인하려면
사용 중인 프레임워크의 컴파일 명령어(예: `npx hardhat compile`)를 실행하세요. 해당 명령어가 성공적으로 작동해야 합니다.
그렇지 않으면 slither의 컴파일 엔진인 crytic-compile이 AST를 생성할 수 없습니다.

## 라이선스

Slither는 AGPLv3 라이선스에 따라 라이선스가 부여되고 배포됩니다. 라이선스 예외가 필요하시면 [문의](mailto:[email protected])해 주세요.

## 출판물

### Trail of Bits 출판물

* [Slither: A Static Analysis Framework For Smart Contracts](https://arxiv.org/abs/1908.09878), Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19

### 외부 출판물

제목 | 사용법 | 저자 | 학술지/학회 | 코드
--- | --- | --- | --- | ---
[ReJection: A AST-Based Reentrancy Vulnerability Detection Method](https://www.researchgate.net/publication/339354823_ReJection_A_AST-Based_Reentrancy_Vulnerability_Detection_Method) | Slither 기반 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](https://arxiv.org/pdf/1911.00570.pdf) | Slither를 통한 데이터 종속성 활용 | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | [MPro](https://github.com/QuanZhang-William/M-Pro)
[ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts](https://wcventure.github.io/FuzzingPaper/Paper/SANER20_ETHPLOIT.pdf) | Slither를 통한 데이터 종속성 활용 | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | -
[Verification of Ethereum Smart Contracts: A Model Checking Approach](http://www.ijmlc.org/vol10/977-AM0059.pdf) | Slither의 CFG 기반 기호 실행 | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | -
[Smart Contract Repair](https://arxiv.org/pdf/1912.05823.pdf) | Slither의 취약점 탐지기에 의존 | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | [SCRepair](https://github.com/xiaoly8/SCRepair/)
[Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Slither를 통한 데이터 종속성 활용 | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | -
[Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | 루프 탐지를 위해 Slither의 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](https://arxiv.org/pdf/2104.08638.pdf) | *스토리지 종속성 그래프* 구축을 위해 SlithIR에 의존 | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | [Sailfish](https://github.com/ucsb-seclab/sailfish)
[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | 정제 타입 시스템 구축을 위해 Slither를 프론트엔드로 사용 | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | -
```

---

[Read more](https://github.com/crytic/slither)
도구 다운로드