2011-11-01 1 views
1

여기에 반사에 사용되는 코드의 예 : 소프트웨어가 난독난독 화가 완료된 후 리플렉션을 통해 C#에서 클래스/속성을 찾는 가장 좋은 방법은 무엇입니까?

var i = typeof(Program).Assembly.CreateInstance("test.Program"); 

후, 코드가 분명히 작동이 중지됩니다.

나는 난독 화가 완료된 후 변경되지 않는 클래스의 속성을 검색하여이 문제를 해결하기 위해 노력하고 있습니다. 나는 타입으로 그것을 시도했다 .GUID,하지만 디버그 버전을 실행할 때, 하나의 GUID를 얻고, 난독 화가 완료된 후 릴리스에서 GUID가 변경된다.

나는 난독 화를 위해 Eazfuscator.NET을 사용하고 있습니다.

가능하면 클래스/메소드를 표시하기 위해 속성을 사용하지 마십시오.

무엇이 효과가 있을지에 대한 아이디어가 있습니까?

+1

호기심에서 벗어나 클래스 및 메소드를 표시하기 위해 속성을 사용하지 않으려는 동기는 무엇입니까? –

+5

"나는 X를하고 싶다.하지만 쉽고 분명한 해결책을 피하고 싶다. 왜 그런지 말하지 않을 것이다."라는 질문을하는 사람들은 항상 혼란 스럽다. 우리는 초능력이 아닙니다. "난독 화를 건너 뛸 속성으로 표시"와 같은 분명한 해결책을 피할 이유가 있다면 그 이유가 무엇인지 확실히 알 수 없습니다. 아마도 당신은 어려운 일을하는 것의 도전을 즐기지 않을 것입니다. –

+4

게다가, 질문은 조금 자책하고 있습니다. 공격자를 물리 칠 수있는 obfuscator를 사용하려고하지만, 공격자가 그것을 물리 칠 수있을만큼 충분히 약해 지길 원할 것입니다. 확실하게 obfuscator를 물리 칠 수있는 방법을 찾으면 걱정되는 공격으로부터 당신을 보호하기 위해 의존해서는 안됩니다! –

답변

1

난독 화자가 공격자를 물리 치기를 원하지 않습니다. 코드를 이해하는 일을 더 어렵게 만드십시오. 그리고 이것을 고급 불법 복제 보호의 일부로 원합니다.

난독 화 후; zip, 암호화하고 어셈블리로 원하는 모든 작업을 수행하십시오. 그런 다음 다른 래퍼 프로젝트를 만들고 어셈블리를 리소스로 프로젝트에 추가합니다. AppDomain.CurrentDomain.AssemblyResolve 이벤트 (새 프로젝트에서)에 연결하고 해결되지 않은 어셈블리 이벤트가 발생할 때마다 리소스 (암호 해독, 압축 해제 등)를 읽고 실제 어셈블리를 반환하십시오.

최종 래퍼 응용 프로그램을 난독 화하려고 할 수도 있습니다.

안전합니까? 적어도 당신은 공격자의 삶을 더 어렵게 만들 수 있습니다.

0

정확한 답변은 없지만 ILSpy 님의 소스가 도움이 될 수 있습니다.

2

모든 유형을 반복하고 찾고자하는 것을 찾을 수있는 방법이있을 것이라고 확신하지만 마음에 오는 모든 것들은 최소한 유지 보수 가능한 코드를 생성합니다.

일부 obfuscator (우리는 DeepSea를 사용합니다. Eazfuscator를 모르지만)는 특정 클래스의 난독 화를 방지하여 해당 클래스에 대한 반영을 허용합니다. DeepSea의 경우, 이것은 속성에 의해 표시되지만 최종 조립품으로 만들지 않아야합니다 (나는 결코 확인하지 않습니다 : o).

리플렉션을 "어셈블리를 보는 외부 프로세스"로 간주하고 "외부 프로세스가 어셈블리를 보지 못하게하는"것을 난독 화 시키면 자신이 원하는 것을 수행하지 못하게됩니다.