2012-09-10 1 views
4

기존 .NET 어셈블리 dll의 코드를 일부 변경했습니다. 코드에 서명하는 데 사용되는 키 파일이 없습니다. StrongNames (Damages 응용 프로그램)를 제거하지 않고 .NET 실행 파일을로드하지 않도록하려면 어떻게 등록을 건너 뛰지 않고 등록 (휴대용이 아닌)하지 않고 등록 할 수 있습니까?StrongName 원본 키 파일에 액세스 할 수없는 .NET 어셈블리

답변

2

Reflexil (.NET Reflector Addon)에서 .NET dll을 편집하고 수정 된 코드에서 원래 서명을 유지할 수 있습니다. 답변 해 주셔서 감사합니다.

어셈블리를 편집하고 사임하지 않으려는 사용자는 Reflexil을 사용하십시오. 이 답변을 투표 한 바보가 그들이 말하는 분야를 완전히 이해하지 못한다고해서 잘못하지는 않았을뿐입니다.

+0

정말요? Reflexil 페이지에서 강력한 이름을 제거하고 (따라서 다른 어셈블리에서 참조를 편집 할 수는 있지만) 원래 서명을 유지하고 어셈블리를 변경할 수 있다는 것은 암호로 의심스러워 보입니다. 어떻게했는지 설명해 주시겠습니까? – zneak

+0

원래 dll을 가져 와서 원하는 방법 수정/etc ..., 어셈블리 저장 후 지연된 서명 수행. 나는 이것에 대한 증거를 가지고 있지만, 내가 이것을 한 dll을 게시하도록 허용되는지 확신 할 수 없다. –

+2

[지연된 서명은 유효한 강력한 이름이 아닙니다.] (http://msdn.microsoft.com/en-us/library/t07a3dye.aspx). DLL에 대한 유효성 검사를 해제하지 않았습니까? – zneak

12

당신은 그럴 수 없습니다. 그게 강한 이름입니다.

강력한 이름은 작성자가 아닌 사람이 실행 파일을 변조하지 않았 음을 확인합니다. (원래의 키 파일을 가진 사람은 누구나 저자로 간주됩니다.) 키 파일이 없기 때문에 저자가되어서는 안되며, 이렇게 강력한 이름을 지정하면 원하는 변경을 할 수 없습니다.

DLL을로드하려면 제안한 솔루션을 사용해야합니다.

EDIT 다음 조건 중 하나 이상을 제공Since .NET 3.5 SP1, strong name verification is bypassed이 충족 :

  • 어셈블리가 완전히 Authenticode로 서명;
  • 어셈블리는 완전히 신뢰할 수 있습니다 (강력한 이름의 증거와 상관없이).
  • 어셈블리가 완전히 신뢰할 수있는 AppDomain에로드됩니다 (대부분의 시나리오에서 데스크톱 응용 프로그램에서 발생하는 현상입니다).
  • 어셈블리는 AppDomain의 ApplicationBase 아래 위치에서로드됩니다. 즉, 어셈블리는 응용 프로그램과 함께 배포되며 같은 디렉터리에 있습니다.

기본적으로 Silverlight를 제외한 모든 유스 케이스에 대해 강력한 이름 확인이 사용되지 않았습니다. 시스템 관리자가 레지스트리 키에 기본적으로 이름 확인을 다시 사용하는 것은, 그러나, 가능 :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework] 
"AllowStrongNameBypass"=dword:00000000 

Microsoft는이 변경이 허용되는 이유는 그 strong names were not an integrity checking mechanism하지만 조립 식별 메커니즘이라고 말했다. 실제 무결성 검사를 위해서는 Authenticode가 필요합니다.

이것은 모든 실제적인 목적을 위해 강력한 이름이 함부로 변경을 방지하는 데 유용하지 않으며 시스템 관리자가 방지하지 않는 한 누구나 어셈블리를 임의로 변경하여 올바르게로드 할 수 있음을 의미합니다.

정확하게 대답하려면 어셈블리 을 수정하면은 강력한 이름이 무효화됩니다. 따라서 snk을 사용할 수없는 경우 강력한 이름을 무효화하지 않고 DLL을 편집 할 수있는 방법이 없습니다. . 그러나 대부분의 경우로드되지 않습니다.

+0

나는 그것을 보았다. 나는 지금 예를보고있다. –

+0

찾으면 알려주세요. 애플리케이션의 소스 코드에 액세스 할 수 있습니까? – zneak

+0

예. 나는 완전한 소스 코드를 가지고 있으며, 나는 키가 없다. –