문제

내가 어셈블리를 NGen이라면 ildasm이 여전히 분해하는 것이 정상입니까?

알겠습니다. HelloWorld 클래스 라이브러리를 작성했고 그 뒤에 나오는 dll의 이름은 NGenILDasmTest.dll입니다. -> .Net fw 4를 대상으로합니다.

Vs 2010 명령 프롬프트에서 라코 디스

GAC에 설치된 어셈블리를 볼 수 있습니다. IL을 볼 수 있도록 ildasm을 실행했습니다. 지금까지 훌륭합니다.

그런 다음 실행합니다 라코 디스

(ngen에 대한 옵션을 지정하지 않았습니다). 그리고이 어셈블리는 성공적으로 컴파일되었습니다. 폴더 아래에 NGenILDasmTest.ni.dll이라는 이름으로 위치했습니다. 라코 디스

이제 아래와 같이 ildasm을 실행하면 라코 디스

Ngen-ed 어셈블리의 내용을 볼 수있었습니다. 이것은 정상입니까?.

기술적으로 말하면 Ngen은 IL에 대한 기본 CPU 명령을 생성합니다 (그리고 분명히 C : \ windows \ Assembly \ NAtiveImages_V4. ##### _ 32-제 경우에는). 그렇다면 ILDasm을 사용하여 NGen 기반 어셈블리를 IL로 어떻게 볼 수 있습니까?

여기에서 내가 놓치고있는 '작은 것'을 이해하도록 도와주세요.

도움이 되었습니까?

해결책

NGEN 어셈블리는 IL과 네이티브 코드입니다. IL은 제거되지 않습니다. NGen 어셈블리에 네이티브 이미지 포함되어 있다는 혼동이 종종 있습니다. 메타 데이터에는 원본 정보가 여전히 필요합니다.

Microsoft는 NGen 어셈블리의 내부에 대한 구체적인 정보가없는 것 같습니다. 우리가 알고있는 대부분의 정보는 리버스 엔지니어링에서 가져온 것입니다.

수정 :

.NET Framework 1.1 (yay ..)을 설치 한 후-.NET 1.1 NGen이 IL을 제거 하는 것으로 보입니다. v2에서 시작하는 것처럼 보입니다. IL이 유지됩니다. 이것이 바로 주변에 모순되는 정보가있는 이유 인 것 같습니다.이 변경이 이루어진 정확한 이유는 알려지지 않은 것 같습니다.

ngen의 내부에 대한 좋은 기사 (그리고 난독 화에 대한 매우 나쁜 아이디어)가 여기에 있습니다. http://www.woodmann.com/forum/entry.php?68- Exploiting-lefotver-IL ... 에 의해 관리되는 .NET-exes-into-native-.NET-exes-into-rebuilding-native-.NET-exes-into-managed-.NET-exes-by-Exploiting-lefotver-IL ... <인용구>

이제 Ngen의 흥미로운 점은 IL이나 메타 데이터를 제거하지 않는다는 것입니다. IL 코드는 실행에 필요하지 않지만 메타 데이터는 모든 문자열과 기타 프로그램에 필요한 관련 데이터는 메타 데이터 내에 포함되어 있습니다. 그래서 Ngen은 모든 메타 데이터를 네이티브 exe의 .IL 섹션에 추가하고 IL 코드를 나중에 복사합니다.

다른 팁

빠르고 쉬운 난독 화를 살펴보면 자체 어셈블리의 부트 로더가 될 C ++로 혼합 모드 어셈블리를 작성하십시오 (기본 코드에서 COM을 통해 레거시 .NET FW 4.0을로드하고 공용 인터페이스를 사용합니다).관리되는 부품에서 선언되고 관리되는 어셈블리에 대해 생성 된 .tlb를 통해 암호화 된 리소스로 유지되고 (RSA 사용) 네이티브 C ++ 코드를 암호화 한 다음 두 어셈블리에 모두 서명합니다.그러면 ILDASM이 어셈블리를 수행하는 것을 방지하여 여전히 프로젝트를 디버깅하고 빌드 할 수 있습니다 (빌드 이벤트 사용)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top