.NET EXE를 읽을 수있는 C # 소스 코드로 어떻게 디 컴파일합니까?


259

몇 년 전에 클라이언트를 위해 C # 응용 프로그램을 작성했지만 더 이상 소스 코드가 없습니다. 내가 가진 것은 클라이언트 PC에 배포 한 EXE입니다. EXE에서 C # 소스 코드를 생성 할 수있는 방법이 있습니까?


2
확인. 여기 봐 ... Teleriks JustDecompile 실제로 디 컴파일 DLL의 레드 게이트 리플렉터가 완전히 ... 망쳐 많은 문제가 ... 지금까지 리플렉터 ... JustDecompile ... 흠과가 있다고
마크 존스턴을

1
나는 JustDecompile을 오랫동안 사용 해 왔으며 csproject를 컴파일 할 준비가 된 소스 파일을 디 컴파일하고 패키지화하는 데 정말 좋습니다. 그것은 실제로 개발에 적극적이며 그들의 저장소에 열린 문제가없는 것 같습니다. github.com/telerik/JustDecompileEngine
David Chelliah

답변:


194

리플렉터 와 추가 기능 FileDisassembler .

리플렉터는 소스 코드를 볼 수 있습니다. FileDisassembler를 사용하면 VS 솔루션으로 변환 할 수 있습니다.


4
Reflector 사본에 "내보내기 ..."옵션이 있으며 플러그인이 설치되어 있지 않습니다. 모든 소스 코드와 리소스로 VS 프로젝트를 만듭니다. 왜 모두가 FileDisassembler를 제안합니까? 더 낫습니까?
Lucas

Lucas : 상자에서 반사기가이 작업을 수행하는 것을 보지 못했습니다. FileDisassembler는 항상 유일한 방법이었습니다. 내가 생각하기는하지만 최근 역사에서 바뀌었을 수도 있습니다. 제가 확인하겠습니다.
GEOCHET

생명의 은인! dumb ass TFS가 내 프로젝트를 삭제했습니다. TFS에 자체 삭제를 지시했지만 로컬 파일 시스템에서 프로젝트를 제거 할 것으로 기대하지는 않았습니다. 고마워 x
Christo

FileDisassembler는 어디에 있습니까? : /
Tom Stickel

.Net 프레임 워크에서만 작동합니다. .Net core 3.0 exe에서 작동하는 도구는 무엇입니까?
Somnath Kadam

144

Red Gate가 더 이상 .Net Reflector의 무료 버전이 없다고 말했을 때 ILSpy 와 Telerik의 JustDecompile을 사용하기 시작했습니다 . ILSpy가 JustDecompile (아직 베타 버전 임)보다 더 정확하게 디 컴파일하는 것을 발견했습니다. 레드 게이트는 그들의 결정을 바꾸었고 여전히 .Net Reflector의 무료 버전을 가지고 있지만, 지금은 ILSpy를 좋아합니다.

ILSpy 웹 사이트 ( https://github.com/icsharpcode/ILSpy/ )에서 :

ILSpy 는 오픈 소스 .NET 어셈블리 브라우저 및 디 컴파일러입니다.

ILSpy 기능

  • 어셈블리 브라우징
  • IL 분해
  • C #으로 디 컴파일
  • 람다 및 '수율 반환'지원
  • XML 문서를 보여줍니다
  • 자원 절약
  • 유형 / 방법 / 속성 검색 (하위 문자열)
  • 하이퍼 링크 기반 유형 / 방법 / 속성 탐색
  • 기본 / 파생 유형 탐색
  • 탐색 기록
  • BAML에서 XAML 디 컴파일러로
  • C # 프로젝트로 어셈블리 저장
  • 필드 / 방법의 사용법 찾기
  • 플러그인 (MEF)을 통해 확장 가능

최신 정보:

2012 년 4 월 15 일, ILSpy 2.0이 출시되었습니다. 버전 1.0과 비교 한 새로운 기능 :

  • 조립 목록
  • 식 트리 디 컴파일 지원
  • nullable에 대한 리프팅 연산자 지원
  • Visual Basic으로 디 컴파일
  • 공백으로 구분 된 여러 문자열 검색 (ILSpy.exe에서 "어셈블리 관리자"를 검색하면 AssemblyListManager가 있음)
  • 지역 변수를 클릭하면 해당 변수의 다른 모든 항목이 강조 표시됩니다
  • 디 컴파일 된 코드보기 내에서 Ctrl + F를 사용하여 검색 할 수 있습니다.

최신 정보:

  • ILSpy 2.1은 비동기 / 대기 디 컴파일을 지원합니다

1
2.2를 사용하고 있으며 IL, VB.NET 및 C #으로 디 컴파일을 지원합니다. 나는 이것이 매우 유용하다는 것을 알았다.
VoteCoffee

1
Telerik은 실행중인 컴퓨터에서 의심스러운 정보를 수집하는 데 관심이 있으며 ILSpy는 소스에서 컴파일 할 수 없습니다. 또한 ILSpy 바이너리는 변수 이름을 혼합하고 소스 코드에 이상한 문자를 넣습니다.
AaA

1
ILSpy에는 Visual Studio 추가 기능이 포함되어 있습니다. ILSpy 2.4의 경우 Visual Studio 소스 코드에서 디 컴파일 된 출력으로 직접 이동하는 기능을 추가했습니다. 불행히도 ILSpy 메인 라인에 병합되었지만 2.4 릴리스를 만들지 못한 최신 수정 사항이있었습니다.
yoyo

훌륭한! 문제를 해결하기 위해 서버에 "특별한"도구를 사용하도록 시간당 £ 100를 청구하는 소프트웨어 회사가 있습니다. 연결하는 동안 사용한 도구의 사본을 얻도록 관리 한 다음 ILSpy를 사용하여 도구 잠금 해제 암호를 쉽게 얻을 수있었습니다. 더 이상 고객을 추출하지 않아도됩니다!
user2924019

ILSpy는 최고입니다
Pritam

65

리플렉터는 더 이상 일반적으로 무료가 아니지만 오픈 소스 개발자에게 무료로 제공합니다 : http://reflectorblog.red-gate.com/2013/07/open-source/

그러나 DevExtras 및 JetBrains와 같은 몇몇 회사는 무료 대안을 만들었습니다.

DevExtras CodeReflect

제트 브레인 도트 픽


5
반사기는 35 $와 같습니다. 내가 아는 은행을 깨는 것은 가치가 10 배에 달합니다.
StingyJack

7
Telerik JustDecompile을 무료 .NET 어셈블리 디 컴파일러 목록에 추가하는 것도 좋습니다. telerik.com/justdecompile
Todd

3
@StingyJack : 좋아요, 그들이 당신을들은 것 같습니다! VS2012 디스어셈블러를 원한다면 실제로 $ 368에 10의 가격입니다. : /
DeepSpace101

1
나는 돈을 버는 것에 대해 반대하지는 않지만 @Daniel의 대답에서 ILSpy (언급)는 내가 지금 사용하고 있습니다.
StingyJack

1
이제 표준 버전은 $ 100, Visual Studio와 통합 된 버전은 $ 200입니다. 그것은 인플레이션 율의 대폭입니다. 그들은 오픈 소스 개발자에게 무료로 물건을 제공하지만, reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

Denis Bauer의 리플렉터와 파일 디스어셈블러 애드 인 실제로 Reflector 자체는 디스 어셈블 된 소스 만 표시하는 어셈블리에서 소스 프로젝트를 생성합니다.

추가 : 내가 가장 좋아하는 것은 JetBrains ' dotPeek 입니다.


나는 dotPeek이 전체 폴더로 쉽게 작업 할 수 있지만 오늘은 c #으로 디 컴파일 만합니다. 대부분의 다른 디 컴파일러는 vb 및 IL도 수행합니다. Telerik 4.5.1 지원하는 반면, 그것은 또한 단지 넷 4.5을 지원합니다
VoteCoffee

그래서 dotPeek은 완전 무료이거나 유료 버전에 대한 제한이 있습니까?. 나는 jetbrains 웹 사이트에 관한 정보를 볼 수 없었습니다.
batmaci

29

Telerik JustDecompile 은 무료이며 .NET 어셈블리에서 프로젝트를 생성하는 기능이 있습니다.


Telerik은 VB.NET, IL 또는 C # .NET으로 디 컴파일하는 기능을 제공합니다. 또한 프레임 워크를 자동으로 선택하고 난독 처리에 사용할 수있는 플러그인이 있습니다. 또한 .NET 4.5.1을 지원합니다. 꽤 좋아 보인다.
VoteCoffee

1
이 게시물의 모든 솔루션을 시도했지만 JustDecompile이 나에게 완벽하게 작동하는 유일한 솔루션이었습니다.
Alvaro Pereira

24

아무도 Microsoft의 ildasm 을 언급하지 않은 것에 놀랐습니다 . ILSpy 또는 Reflector만큼 예쁘지 않을 수도 있지만 Visual Studio와 함께 제공되므로 많은 개발자가 이미 가지고 있습니다.

실행하려면 (VS 2013을 가정하고 다른 버전과 비슷해야 함) :

  1. 시작> 모든 프로그램> Visual Studio 2013> Visual Studio 도구를 선택하십시오.
  2. VS2013의 개발자 명령 프롬프트를 두 번 클릭하십시오.
  3. 결과 명령 프롬프트에서 "ildasm"을 실행하십시오.
  4. 도구에서 파일> 열기를 선택하고 실행 파일 또는 DLL을여십시오.

이제 DLL 구조를 탐색 할 수 있습니다. 수업 일원을 두 번 클릭하여 IL을보십시오. 파일> 덤프를 사용하여 IL을 파일로 내 보냅니다.


IL DASM이 약간 야만적이라고 생각합니다. 그것은 나무를 보여 주지만, 마우스 오른쪽 버튼을 클릭해도 아무것도 보이지 않습니다. 또한 파일로 내보내기 덤프는 기본적으로 쓰레기입니다. 보세요, 어떻게 원격으로 도움이 되나요?
Tom Stickel

4
나는 ildasm이 최선의 선택이라고 주장한 적이 없으며 그것이 가능하고 작동한다는 것뿐입니다. ¯_ (ツ) _ / ¯
yoyo

아니야.
yoyo

dotPeek이 내가 알고있는 문자열에 대해 전체 어셈블리를 검색 할 수 없다는 사실에 정말 놀랐습니다. ildasm은 예쁘지 않지만 적어도 내가 찾고있는 문자열이 포함 된 클래스를 찾는 데 도움이되는 덤프 옵션이 있습니다.
Gabe Halsmer

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.