문제

내 제품에는 여러 구성 요소가 있습니다.ASP.NET, Windows Forms 앱 및 Windows 서비스.코드의 95% 정도가 VB.NET으로 작성되었습니다.

지적 재산권 문제로 인해 코드를 난독화해야 하며, 지금까지는 5년이 넘은 dotfuscator 버전을 사용하고 있습니다.이제는 새로운 세대의 도구로 전환해야 할 때라고 생각합니다.제가 찾고 있는 것은 새로운 난독화 장치를 검색할 때 고려해야 할 요구 사항 목록입니다.

지금까지 찾아야 할 사항은 다음과 같습니다.

  • 직렬화/역직렬화.현재 솔루션에서는 간단히 도구에 다음과 같이 말합니다. ~ 아니다 이전에 직렬화된 데이터를 로드할 수 없다는 고통이 너무 크기 때문에 클래스 데이터 멤버를 난독화합니다.
  • 빌드 프로세스와 통합
  • ASP.NET 작업.과거에는 .dll 이름 변경으로 인해 이 문제가 발생했다는 사실을 발견했습니다(종종 페이지당 이름이 하나씩 있음). 모든 도구가 제대로 처리되지는 않습니다.
도움이 되었습니까?

해결책

.Net 1.1에서는 난독화가 필수적이었습니다.코드 디컴파일은 쉬웠고 어셈블리에서 IL, C# 코드로 이동하여 아주 적은 노력으로 다시 컴파일할 수 있었습니다.

이제 .Net 3.5에서는 확실하지 않습니다.3.5 어셈블리를 디컴파일해 보세요.당신이 얻는 것은 컴파일과는 거리가 멀다.

3.5의 최적화(1.1보다 훨씬 좋음)와 익명 유형, 대리자 등이 리플렉션에 의해 처리되는 방식을 추가합니다(재컴파일하기에는 악몽입니다).람다 표현식, Linq 구문과 같은 컴파일러 '마법'을 추가하고 var, 및 C#2 함수는 다음과 같습니다. yield (이로 인해 이름을 읽을 수 없는 새 클래스가 생성됩니다)디컴파일된 코드는 컴파일 가능한 코드와는 거리가 멀습니다.

시간이 많은 전문 팀은 다시 리버스 엔지니어링할 수 있지만 난독화된 코드의 경우에도 마찬가지입니다.거기서 얻은 코드는 유지 관리가 불가능하고 버그가 많을 가능성이 높습니다.

어셈블리에 키 서명을 권장합니다(해커가 어셈블리를 다시 컴파일할 수 있으면 모두 다시 컴파일해야 함). 하지만 난독화는 그만한 가치가 없다고 생각합니다.

다른 팁

우리는 여러 가지 난독화 장치를 사용해 보았습니다.그들 중 누구도 원격을 사용하는 대규모 클라이언트/서버 앱에서 작동하지 않습니다.문제는 클라이언트와 서버가 일부 DLL을 공유하는데 이를 처리할 수 있는 난독 처리기를 찾지 못했다는 것입니다.

우리는 DotFuscator Pro, SmartAssembly, XenoCode, Salamander 및 이름이 생소한 몇 가지 소규모 앱을 사용해 보았습니다.

솔직히 저는 난독화가 큰 해킹이라고 확신합니다.

그것이 다루는 문제조차도 완전히 실제 문제는 아닙니다.실제로 보호해야 할 유일한 것은 연결 문자열, 활성화 코드, 보안에 민감한 것들입니다.다른 회사가 전체 코드베이스를 리버스 엔지니어링하고 그것으로 경쟁 제품을 만들 것이라는 말도 안되는 소리는 현실이 아니라 편집증 관리자의 악몽에서 나온 것입니다.

나는 지금 이 문제에 대해 'Knee Deep'이며 좋은 해결책을 찾으려고 노력하고 있습니다.지금까지의 인상은 다음과 같습니다.

제노코드 - .net 2.0 어셈블리를 난독화하는 데 사용했던 Xenocode2005에 대한 이전 라이센스가 있습니다.XP에서는 잘 작동했고 괜찮은 솔루션이었습니다.내 현재 프로젝트는 .net 3.5이고 Vista를 사용하고 있습니다. 지원팀에서는 시도해 보라고 했지만 2005 버전은 Vista에서도 작동하지 않아서(충돌) 지금은 'PostBuild2008'을 엄청나게 비싼 가격에 구입해야 합니다. $1900.이것은 좋은 도구일지도 모르지만 나는 알아 내지 않을 것입니다.너무 비싼.

리액터넷 - 이것은 훨씬 더 매력적인 가격대이며 독립 실행형 실행 파일에서 잘 작동했습니다.라이센스 모듈도 훌륭했고 많은 노력을 절약할 수 있었을 것입니다.불행히도 핵심 기능이 누락되어 난독화에서 항목을 제외하는 기능이 있습니다.이로 인해 필요한 결과를 얻는 것이 불가능해졌습니다(여러 어셈블리를 함께 병합하고 일부는 난독화하고 다른 어셈블리는 난독화하지 않음).

스마트어셈블리 - 이를 위해 Eval을 다운로드했는데 완벽하게 작동했습니다.나는 내가 원하는 모든 것을 달성할 수 있었고 인터페이스는 최고였습니다.가격대는 아직 좀 비싼 편입니다.

Dotfuscator Pro - 홈페이지에서 가격을 확인할 수 없습니다.현재 견적을 받기 위해 논의 중입니다.불길한 것 같네요.

혼란스러운 사람 - 꽤 잘 작동하는 오픈 소스 프로젝트입니다(이름에서 알 수 있듯이 사람들을 혼동하기 위해). https://confuser.codeplex.com/
(jgauffin이 추가함)

메모:ConfuserEx는 다음과 같이 "깨진" 것으로 알려졌습니다. 이슈 #498 GitHub 레포에 있습니다.

무료 버전을 찾고 있다면 Visual Studio와 함께 제공되는 DotObfuscator Community Edition을 사용해 보거나 Eazfuscator.NET.


2012년 6월 29일부터, Eazfuscator.NET은 이제 상용화되었습니다.사용 가능한 마지막 무료 버전은 3.3입니다.

저는 스마트어셈블리를 사용해왔습니다.기본적으로 dll을 선택하면 난독화된 DLL이 반환됩니다.잘 작동하는 것 같고 아직까지는 문제가 없었습니다.매우 사용하기 쉽습니다.

나는 시장에 있는 거의 모든 난독 처리기를 사용해 보았지만 내 생각에는 SmartAssembly가 최고라고 생각합니다.

나는 또한 SmartAssembly를 사용하고 있습니다.나는 Ezrinz .Net Reactor가 .net 애플리케이션에 훨씬 더 적합하다는 것을 알았습니다.난독화하고, Mono를 지원하고, 어셈블리를 병합하며, 평가판을 만들거나 라이센스를 특정 시스템에 연결하는 매우 훌륭한 라이센스 모듈도 있습니다(구현이 매우 쉽습니다).가격 또한 매우 경쟁력이 있으며 지원이 필요할 때 신속하게 지원됩니다.에지리스

분명히 말씀드리자면 저는 단지 제품을 좋아하는 고객일 뿐이며 회사와 어떤 식으로든 관련이 없습니다.

짧은 대답은 할 수 없다는 것입니다.

누군가가 귀하의 코드를 읽기 어렵게 만드는 다양한 도구가 있습니다. 그 중 일부는 다른 답변에서 지적되었습니다.

그러나 이 모든 것은 읽기를 더 어렵게 만드는 것입니다. 필요한 노력의 양을 늘리는 것뿐입니다.종종 이는 일반 독자를 단념시키기에 충분하지만, 귀하의 코드를 파고들기로 결심한 사람은 항상 그렇게 할 수 있습니다.

원격도 지원하는 asp.net 및 winform 인터페이스를 갖춘 다중 계층 앱이 있습니다.모든 종류의 예상치 못한 방식으로 문제가 발생할 수 있고 제 생각에는 가치가 없는 로더를 생성하는 암호화 유형을 제외하고 난독 처리기를 사용하는 데 아무런 문제가 없었습니다.실제로 내 조언은 "전염병과 같은 로더 유형 난독 처리기를 암호화하지 마십시오"라는 내용에 더 가깝습니다.:)

내 경험에 따르면 모든 난독처리기는 asp.net 및 원격을 포함하여 .net의 모든 측면에서 잘 작동합니다. 설정에 익숙해지고 코드의 어느 영역에서 얼마나 멀리 밀어넣을 수 있는지 알아보면 됩니다.그리고 얻은 결과에 대해 리버스 엔지니어링을 시도하고 다양한 설정에서 어떻게 작동하는지 확인하는 시간을 가지십시오.

우리는 상업용 앱에서 수년에 걸쳐 몇 가지를 사용했으며 가격이 적당하고 작업을 수행하며 좋은 지원을 제공하기 때문에 9rays.net의 Spices obfuscator에 정착했습니다. 하지만 솔직히 말해서 몇 년 동안 더 이상 지원이 필요하지 않았지만 솔직하게 말하자면 어떤 난독처리기를 사용하는지는 중요하지 않다고 생각합니다. 원격 및 asp.net에서 제대로 작동하도록 하려면 문제와 학습 곡선이 모두 동일합니다.

다른 사람들이 언급했듯이 실제로 수행하는 작업은 자물쇠와 동일하여 정직한 사람들을 차단하거나 단순히 앱을 다시 컴파일하기 어렵게 만드는 것입니다.

라이센스는 일반적으로 대부분의 사람들에게 핵심 영역이므로 어쨌든 라이센스를 위해 일종의 디지털 서명 인증서 시스템을 사용해야 합니다.가장 큰 손실은 스마트 시스템을 갖추지 않은 경우 라이센스를 임시로 공유함으로써 발생합니다. 라이센스 시스템을 깨는 사람들은 애초에 구매하지 않을 것입니다.

이것을 너무 멀리 가져가서 고객과 비즈니스에 부정적인 영향을 미치기 쉽습니다. 간단하고 합리적인 일을 한 다음 걱정하지 마십시오.

지난 이틀 동안 저는 Dotfuscator Community Edition Advanced(Visual Studio와 함께 번들로 제공되는 기본 CE를 등록한 후 무료 다운로드)를 실험해 왔습니다.

난독화를 기본 옵션으로 사용하지 않는 이유는 위험에 비해 번거로움이 크기 때문이라고 생각합니다.소규모 테스트 프로젝트에서는 많은 노력을 들여 난독화된 코드를 실행할 수 있었습니다.ClickOnce를 통해 간단한 프로젝트를 배포하는 것은 번거로운 일이었지만 마법사를 사용하여 매니페스트에 수동으로 서명한 후에는 달성할 수 있습니다.유일한 문제는 오류 발생 시 스택 추적이 난독화되어 돌아왔고 CE에는 난독화 장치 또는 정화기가 패키지되어 있지 않다는 것입니다.

Virtual Earth 통합, 많은 웹 서비스 호출, IOC 컨테이너 및 많은 반영을 통해 Excel 기반 VSTO인 실제 프로젝트를 난독화하려고 했습니다.불가능했습니다.

난독화가 정말 중요한 요구 사항이라면 처음부터 이를 염두에 두고 애플리케이션을 설계하고 진행하면서 난독화된 빌드를 테스트해야 합니다.그렇지 않고 상당히 복잡한 프로젝트라면 결국 심각한 고통을 겪게 될 것입니다.

암호화 난독처리기 모든 우려사항과 시나리오를 해결하세요.그것 :

  1. 규칙에 따라 난독화에서 유형/멤버를 자동으로 제외합니다.직렬화된 유형/필드가 그 중 하나입니다.
  2. MSBUild를 사용하여 빌드 프로세스에 통합할 수 있습니다.
  3. ASP.Net 프로젝트를 지원합니다.

저는 최근에 하나의 무료 난독처리기의 출력을 다른 무료 난독처리기, 즉 Dotfuscator CE와 CodePlex의 새로운 Babel 난독처리기에 연결해 보았습니다.자세한 내용은 내 블로그에.

직렬화의 경우 해당 코드를 다른 DLL로 이동하고 이를 프로젝트에 포함했습니다.어쨌든 XML에 없는 비밀은 없으므로 난독화가 필요하지 않다고 생각했습니다.해당 클래스에 심각한 코드가 있는 경우 기본 어셈블리의 부분 클래스를 사용하면 이를 처리할 수 있습니다.

귀하의 플랫폼에 대해 가장 저렴하고 가장 잘 알려진 것을 사용하고 하루에 통화해야 합니다.VM opcode 스트림은 기본 opcode 스트림에서 발생하는 두 가지 가장 큰 문제를 겪지 않기 때문에 고급 언어의 난독화는 어려운 문제입니다.함수/메소드 식별 및 앨리어싱 등록.

바이트코드 반전에 대해 알아야 할 것은 보안 테스터가 직접 X86 코드를 검토하고 그 안에서 취약점을 찾는 것이 이미 표준 관행이라는 것입니다.원시 X86에서는 함수 호출 전체에서 지역 변수를 추적하는 것은 물론이고 유효한 함수를 찾을 수도 없습니다.MSFT가 해당 정보를 대중에게 유용하게 제공하는 Microsoft 코드를 검토하는 경우를 제외하고는 거의 어떤 상황에서도 기본 코드 리버서가 함수 및 변수 이름에 액세스할 수 없습니다.

"Dotfuscation"은 주로 함수 및 변수 이름을 뒤섞는 방식으로 작동합니다.Reflector가 문자 그대로 소스 코드를 포기하는 디버그 수준 정보가 포함된 코드를 게시하는 것보다 이렇게 하는 것이 더 나을 것입니다.하지만 그 이상으로 하는 일은 수익이 감소할 가능성이 높습니다.

Smartassemblies에는 아무런 문제가 없었습니다.

"Dotfuscator Community Edition"을 사용할 수 있습니다. 이는 Visual Studio 2008 Professional에서 기본적으로 제공됩니다.이에 대한 내용은 다음에서 읽을 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

제품의 "Professional" 버전은 비용이 들지만 더 좋습니다.

코드를 난독화해야 합니까?일반적으로 보안 목적으로 사용되지 않는 한 애플리케이션이 디컴파일되는 데에는 거의 문제가 없습니다.사람들이 귀하의 코드를 "훔치는" 것이 걱정된다면 걱정하지 마십시오.귀하의 코드를 보는 대다수의 사람들은 학습 목적일 것입니다.어쨌든, .NET에 대한 완전히 효과적인 난독화 전략은 없습니다. 충분한 기술을 가진 사람은 항상 응용 프로그램을 디컴파일/변경할 수 있습니다.

원자로를 피하십시오.그것은 전혀 쓸모가 없습니다. (그렇습니다. 저는 라이센스 비용을 지불했습니다.)Xenocode는 제가 만난 것 중 최고였고 라이센스도 구입했습니다.지원은 매우 좋았지만 효과가 좋았기 때문에 별로 필요하지 않았습니다.제가 찾을 수 있는 모든 난독 처리기를 테스트한 결과 제노코드가 단연 가장 강력하고 최고의 작업을 수행했다는 결론이 나왔습니다. (또한 .NET exe를 다른 곳에서는 볼 수 없었던 기본 exe로 처리할 수도 있습니다.)

리액터와 제노코드에는 두 가지 주요 차이점이 있습니다.첫 번째는 Xenocode가 실제로 작동한다는 것입니다.두 번째는 어셈블리의 실행 속도가 다르지 않다는 것입니다.리액터를 사용하면 약 600만 배 느려졌습니다.나는 또한 원자로가 한 사람이 운영하는 것이라는 인상을 받았습니다.

나는 Agile.Net이 난독화뿐만 아니라 암호화도 제공하기 때문에 .Net 어셈블리에 대해 꽤 좋은 보호 기능을 제공한다는 것을 알았습니다.무료 트레일을 다운로드하세요.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

저는 .Net 1부터 동일한 애플리케이션의 코드를 난독화해 왔으며 이는 유지 관리 측면에서 큰 골칫거리였습니다.언급했듯이 직렬화 문제는 피할 수 있지만 실수를 해서 난독화하고 싶지 않은 내용을 난독화하는 것은 정말 쉽습니다.빌드를 중단하거나 난독화 패턴을 변경하여 오래된 파일을 열 수 없게 되는 것은 쉽습니다.게다가 무엇이 잘못되었고 어디서 문제가 발생했는지 알아내는 것도 어려울 수 있습니다.

우리의 선택은 Xenocode였으며, 오늘 다시 선택해야 한다면 코드를 난독화하지 않거나 Dotfuscator를 사용하는 것을 선호합니다.

다음은 Microsoft 자체의 문서입니다. 도움이 되길 바랍니다... 2003년의 내용이지만 여전히 관련성이 있을 수 있습니다.

우리는 Windows 클라이언트에서 SmartAssembly를 사용하고 있습니다.잘 작동합니다.

몇 가지 추가 문제도 추가합니다.로그 파일/예외의 클래스 이름을 인쇄하려면 난독화를 해제해야 합니다.물론 해당 이름으로 클래스를 만들 수는 없습니다.따라서 클라이언트를 살펴보고 난독화로 인해 어떤 문제가 발생할 수 있는지 확인하는 것이 좋습니다.

그것은 모두 사용하는 프로그래밍 언어에 따라 다릅니다.기사를 읽다: 난독화된 코드

무료 방법은 Visual Studio 내에서 dotfuscator를 사용하는 것입니다. 그렇지 않으면 나가서 Postbuild와 같은 난독 처리기를 구입해야 합니다(http://www.xenocode.com/Landing/Obfuscation.aspx)

최신 프로젝트에서 난독화/리소스 보호를 사용해야 했고 발견했습니다. 암호화 난독처리기 훌륭하고 사용하기 쉬운 도구입니다.직렬화 문제는 이 도구의 설정 문제일 뿐입니다.

Obfuscar라는 좋은 오픈 소스 버전이 있습니다.잘 작동하는 것 같습니다.유형, 속성, 필드, 메서드를 제외할 수 있습니다.원본은 여기에 있습니다: https://code.google.com/p/obfuscar/, 하지만 더 이상 업데이트되지 않는 것 같아서 누군가 여기로 포크했습니다. https://obfuscar.codeplex.com/

다음과 같은 새로운 코드 보호 기술을 살펴볼 수도 있습니다. 메타포릭 그리고 V.I.Labs 다음과 같은 새로운 소프트웨어 복제 방지 기술 바이트쉴드.폭로:저는 ByteShield에서 일합니다.

저도 스마트어셈블리를 사용하고 있습니다.그러나 웹 애플리케이션에서는 어떻게 작동하는지 모르겠습니다.그러나 앱이 셰어웨어 유형 보호를 사용하는 경우 부울 반환으로 라이선스를 확인하지 않도록 주의하세요.바이트 크랙이 너무 쉽습니다.http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

SmartAssembly는 훌륭합니다. 대부분의 프로젝트에 사용되었습니다.

에지리즈 데모버전을 사용해봤는데....좋았어요.하지만 소프트웨어는 가져오지 않았습니다.

난독화는 진정한 보호 수단이 아닙니다.

.NET Exe 파일이 있는 경우 훨씬 더 해결책.

나는 사용한다 테미다 그리고 그것이 아주 잘 작동한다고 말할 수 있습니다.

Themida의 유일한 단점은 .NET DLL을 보호할 수 없다는 것입니다.(Exe 및 DLL의 C++ 코드도 보호합니다)

Themida는 여기에 언급된 난독화 장치보다 훨씬 저렴하며 다음과 같은 분야에서 최고입니다. 안티 불법 복제 보호 시장에.코드의 중요한 부분이 실행되는 가상 머신을 생성하고 크래커가 설정한 중단점이나 조작을 감지하는 여러 스레드를 실행합니다..NET Exe를 Reflector가 더 이상 .NET 어셈블리로 인식하지 못하는 것으로 변환합니다.

해당 웹사이트에서 자세한 설명을 읽어보세요.http://www.oreans.com/themida_features.php

나는 Rummage라는 제품을 사용해 보았는데 어느 정도 제어력을 제공하는 데 효과적이었습니다...에지리즈가 제공하는 기능이 많이 부족하지만 러미지 가격이 너무 착해요...

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