ILSpy - .NET 디컴파일러 치트시트
ILSpy는 오픈소스 .NET 어셈블리 브라우저 및 디컴파일러입니다. 컴파일 프로세스를 역으로 수행하여 Microsoft 중간 언어(MSIL/CIL)를 읽을 수 있는 고급 C#(및 기타 언어)으로 변환합니다. .NET 바이너리를 검사, 분석, 리버스 엔지니어링하기 위한 표준 무료 도구입니다. 악성 코드 분류부터 소스 없이 서드파티 라이브러리 디버깅까지 사용됩니다. Windows GUI, 크로스플랫폼 Avalonia 앱, VS Code 확장, 그리고 ilspycmd CLI로 실행됩니다.
설치
| 변형 | 방법 |
|---|
| Windows GUI | GitHub Releases에서 설치 프로그램/zip 다운로드 |
| 크로스플랫폼 GUI | AvaloniaILSpy 빌드 (Linux/macOS) |
CLI (ilspycmd) | dotnet tool install --global ilspycmd |
| VS Code | ”ILSpy .NET Decompiler” 확장 설치 |
| CLI 확인 | ilspycmd --version |
GUI 기본 사항
| 작업 | 방법 |
|---|
| 어셈블리 열기 | File → Open, 또는 .dll/.exe을 드래그 |
| 종속성 로드 | ILSpy는 참조된 어셈블리를 자동으로 해석 |
| 네비게이션 | 트리 확장: 어셈블리 → 네임스페이스 → 타입 → 멤버 |
| 멤버 디컴파일 | 클릭하면 C#이 주 창에 나타남 |
| 사용 분석 | 우클릭 → Analyze (누가 호출/사용하는가?) |
| 검색 | Ctrl+F / 검색 상자에서 타입 및 멤버 검색 |
| 언어 버전 변경 | 도구 모음 드롭다운 (C# 1.0 … 최신) |
| 디컴파일된 프로젝트 저장 | File → Save Code (전체 .csproj 내보내기) |
Analyze (크로스 참조)
| 우클릭 → Analyze 표시 |
|---|
| Instantiated By |
| Used By |
| Assigned By / Read By (필드) |
| Overridden By / Overrides |
| Exposed By |
이것은 핵심 RE 워크플로우입니다: 의심스러운 메서드를 선택하고 누가 호출하는지, 무엇을 건드리는지 추적합니다.
ilspycmd (명령줄)
| 명령어 | 설명 |
|---|
ilspycmd Assembly.dll | 전체 어셈블리를 stdout으로 디컴파일 |
ilspycmd -o out/ Assembly.dll | 디렉터리로 디컴파일 |
ilspycmd -p -o proj/ Assembly.dll | 컴파일 가능한 .csproj 프로젝트로 내보내기 |
ilspycmd -t Namespace.Type Assembly.dll | 단일 타입 디컴파일 |
ilspycmd -il Assembly.dll | C# 대신 원본 IL 표시 |
ilspycmd -lv CSharp10_0 Assembly.dll | C# 언어 버전 설정 |
ilspycmd --nested-directories -p -o out/ A.dll | 네임스페이스를 폴더로 미러링 |
ilspycmd -r LIBDIR Assembly.dll | 어셈블리 참조 검색 경로 추가 |
메타데이터 & 리소스 검사
| 대상 | 방법 |
|---|
| 포함된 리소스 | 트리 → Resources 노드; Save로 추출 |
| 메타데이터 테이블 | View → “Metadata” (원본 테이블, 토큰) |
| 문자열/IL | 언어 드롭다운을 IL로 전환 |
| PInvoke/native | 메서드 서명에 표시 |
일반적인 워크플로우
# 의심스러운 .NET 샘플 분류: grep용 전체 소스 덤프
ilspycmd -o sample_src/ suspicious.dll
grep -rin "DownloadString\|FromBase64String\|Process.Start" sample_src/
# 소스를 잃은 DLL에서 빌드 가능한 프로젝트 복구
ilspycmd -p -o recovered/ MyLib.dll
# C# 디컴파일이 난독화되었을 때 원본 IL 보기
ilspycmd -il obfuscated.dll | less
심하게 난독화된 어셈블리의 경우, ILSpy를 난독화 해제 도구(예: de4dot)와 페어링한 후 정제된 바이너리를 디컴파일합니다.
ILSpy vs 다른 .NET 도구
| 도구 | 타입 | 참고 |
|---|
| ILSpy | 디컴파일러 + 브라우저 | 무료, 오픈소스, CLI + GUI |
| dnSpy / dnSpyEx | 디컴파일러 + 디버거 | 어셈블리 편집 & 디버그 |
| dotPeek | 디컴파일러 | 무료 (JetBrains), Windows |
| ILDASM | 디스어셈블러 | IL만, .NET SDK와 함께 제공 |
리소스