클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (513)
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (300)
      • C# (83)
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • Windows API
  • node.js
  • 변수
  • jQuery
  • asp.net core web api
  • .NET
  • android
  • HTML5
  • c#
  • CSS3
  • android studio
  • Entity Framework
  • ASP.NET
  • MariaDB
  • LINQ
  • asp.net core
  • NestJS
  • exception
  • Kotlin
  • JavaScript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[.NET] 닷넷 - 4. Decompiling
.NET

[.NET] 닷넷 - 4. Decompiling

2022. 6. 24. 12:53
728x90

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)

 

Download - Stable | Mono

1 Add the Mono repository to your system The package repository hosts the packages you need, add it with the following commands. Note: the packages should work on newer Ubuntu versions too but we only test the ones listed below. Ubuntu 20.04 (amd64, armhf,

www.mono-project.com

일단 .NET 으로 개발된 Assembly면 Decompile을 막을 수 있는 방법은 없습니다. 다만 소스코드를 보기 어렵게 하는 Dotfuscator와 같은 도구를 사용할 수 있지만 근본적인 해결책은 될 수 없으므로 Web Project가 아닌 이상 Source코드 안에 DB 접속 정보와 같은 민감한 정보를 포함시키지 말아야 합니다.

728x90
저작자표시 비영리 변경금지

'.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
    '.NET' 카테고리의 다른 글
    • [.NET] 닷넷 Type 사용하기 - 1. 숫자, 문자열
    • [.NET] 닷넷 - 5. .NET Framework에서 .NET으로의 전환
    • [.NET] 닷넷 - 3. 배포하기
    • [.NET] 닷넷 - 2. .NET components
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바