5. Decompiling
.NET은 IL이라고 하는 중간 언어를 거치를 방식으로 컴파일이 진행됩니다. 이런 원리를 통해 IL을 다시 본래 소스코드로 되돌려 볼 수 있는데 이를 '디컴파일'이라고 합니다.
디컴파일을 위해서는 여러 가지 도구를 사용할 수 있는데 마이크로소프트에서 공식적으로 이를 위해 내놓은 도구로 'ILSpy'라는 것이 있습니다. 이 도구는 Visual Studio (2022)에서 확장 기능으로 설치해 사용할 수 있습니다.
Visual Studio를 실행해 'Manage Extension'안에서 ILSPY를 검색하고 해당 확장 기능을 설치합니다.
Visual Studio를 종료하고 설치를 마무리합니다.
Visual Studio를 다시 실행하고 'Tool -> ILSpy'를 선택하여 실행한 뒤 'File -> Open'메뉴를 실행해 Decompile 하고자 하는 Assembly파일을 선택합니다.
예제는 System.Collections.dll 파일을 열어본 것인데 보시는 바와 같이 본래 소스코드를 복원해 볼 수 있습니다.
ILSpy는 Visual Studio Code에서도 확장 기능을 통해 사용할 수 있습니다.
ILSpy확장 도구를 설치하고 F1키를 눌러 'ILSpy: Pick assembly from file system'을 선택합니다.
Decompile 하고자 하는 Assembly를 선택하면 Visual Studio와 비슷한 결과를 볼 수 있습니다.
화면 오른쪽 상단에 'output language'에서 'IL'을 선택하면 해당 Code가 IL로 변환되는 결과 또한 확인할 수 있습니다.
참고 : MacOS와 Linux에서는 Mono에 의존하므로 Mono가 우선 설치되어 있어야 합니다.
Download - Stable | Mono (mono-project.com)
일단 .NET 으로 개발된 Assembly면 Decompile을 막을 수 있는 방법은 없습니다. 다만 소스코드를 보기 어렵게 하는 Dotfuscator와 같은 도구를 사용할 수 있지만 근본적인 해결책은 될 수 없으므로 Web Project가 아닌 이상 Source코드 안에 DB 접속 정보와 같은 민감한 정보를 포함시키지 말아야 합니다.
'.NET' 카테고리의 다른 글
[.NET] 닷넷 Type 사용하기 - 1. 숫자, 문자열 (0) | 2022.06.26 |
---|---|
[.NET] 닷넷 - 5. .NET Framework에서 .NET으로의 전환 (0) | 2022.06.24 |
[.NET] 닷넷 - 3. 배포하기 (0) | 2022.06.24 |
[.NET] 닷넷 - 2. .NET components (0) | 2022.06.24 |
[.NET] 닷넷 - 1. .NET 6 개요 (0) | 2022.06.24 |