2010-02-16 4 views
2

.NET 2.0 바이너리 파일 (* .exe)을 읽을 수있는 코드로 디 컴파일 할 수 있습니까? 그렇지 않다면, 단지 메소드 명, 디버깅 정보 등 일부 정보 만 추출하면됩니까?.NET 2.0 바이너리 디 컴파일

+0

이렇게하면 라이센스 계약을 위반할 가능성이 있습니다. ... –

답변

15

Reflector을보고 싶을 수도 있습니다. 어셈블리에 C# 또는 IL이 표시되어야합니다.

은 편집 : 리플렉터의 비용 ​​증가와

, 나는 하루의 요구에 내 하루 ILSpy로 전환했다.

+1

리플렉터는 내가 반전을 위해 사용한 최고의 도구입니다. :) –

+0

매력처럼 작동합니다, 감사합니다 :). – pako

+0

반사경은 VB.NET에서 C#으로 코드를 변환하는데도 잘 작동합니다. –

3

exe를 ILDASM 또는 Dot Net Reflector로 떨어 뜨리는 것은 그 트릭을 수행해야합니다.

0

예. 먼저 모든 .net 라이브러리에는 유형 정보가 포함 된 매니페스트가 있습니다. 리플렉션을 사용하거나 리플렉터와 같은 도구를 사용하여 문제를 조사 할 수 있습니다. 살펴볼 클래스에 대한 system.reflection 네임 스페이스를 살펴 보자.

1

나는이 question earlier today에서 자신을 견적합니다 다음 컴파일 된 코드로 저장 그것에 대해 더 메타 데이터가 없기 때문에

당신은 다시 정확한 같은 소스를 얻을 수 없다.

그러나 어셈블리 코드 에서 코드를 다시 만들 수 있습니다.

이 항목에 관심이 있다면이 책을 확인하십시오. 되감기 : 역 엔지니어링의 비밀. 당신은 "컴파일러"기술적으로 다른 단어 와 컴파일러를 정의하는 하지가 있다면

편집

여기

어떤 컴파일러-101, 는 무엇을 할 것인가?

답변 : 번역기

는 컴파일러는 구문/ 문구 당신이 C 컴파일러는 조립 또는 기계 코드로 변환 다른 언어로 작성한 변환합니다. C# 코드 은 IL 등으로 번역됩니다.

당신이 실행 파일 원본 텍스트/ 구문의 단지 번역이며 "그것을 반대"하고 싶은 경우 그러므로 당신이 가지고 당신은 대부분 동일한 구조 을받지 않습니다 "를 다시 번역" 처음에는. 영어에서 독일어 과 독일에서 영어로 돌아 가기 번역 경우

보다 실생활의 예는 것, Sentance와 구조가 가장 가능성이 다른 것, 즉이 사용될 수 있지만, 의미는 상황에 따라 이 변경되지 않았을 가능성이 큽니다.당신은 ASM에 C에서 가면

같은이 컴파일러/ 번역기에 간다, 논리는 그것을 읽는 단지 다른 방법, 동일 (및 물론 최적화 된).

C#과 관련하여 이미 반사경과 같은 훌륭한 도구가 많이 제공되었습니다. 그러나 코드가 난독 화되면 읽는 데 문제가 발생할 것입니다.