IT story

.NET 난독 화 도구 / 전략 [폐쇄]

hot-time 2020. 6. 6. 08:11
반응형

.NET 난독 화 도구 / 전략 [폐쇄]


내 제품에는 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-syntax 및와 같은 컴파일러 'magic' var및 C # 2 함수 yield(이름을 읽을 수없는 새 클래스가 생성됨)를 추가하십시오. 디 컴파일 된 코드는 컴파일 할 수 없을 정도로 멀다.

많은 시간을 가진 전문 팀은 여전히 ​​다시 역 엔지니어링 할 수 있지만, 난독 화 된 코드에서도 마찬가지입니다. 그들이 가져온 코드는 유지 관리가 불가능하고 버그가 많을 가능성이 높습니다.

어셈블리에 키 서명을하는 것이 좋습니다 (해커가 모두 다시 컴파일해야하는 어셈블리를 다시 컴파일 할 수 있는지 여부). 난독 화가 그만한 가치가 있다고 생각하지 않습니다.


우리는 많은 난독 화를 시도했습니다. 원격을 사용하는 대형 클라이언트 / 서버 앱에서는 작동하지 않습니다. 문제는 클라이언트와 서버가 일부 dll을 공유하고 처리 할 수있는 난독 화기를 찾지 못했다는 것입니다.

우리는 DotFuscator Pro, SmartAssembly, XenoCode, Salamander 및 이름이 저를 탈출하는 몇 가지 작은 시간 응용 프로그램을 시도했습니다.

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

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


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

Xenocode-.net 2.0 어셈블리를 난독 처리하는 데 사용했던 Xenocode2005의 이전 라이센스가 있습니다. XP에서 잘 작동했으며 적절한 솔루션이었습니다. 내 현재 프로젝트는 .net 3.5이며 Vista에 있습니다. 지원에 따르면 이동을 제안했지만 2005 버전은 Vista (크래시)에서도 작동하지 않으므로 이제는 저렴한 가격으로 'PostBuild2008'을 구매해야합니다 $ 1900 중 이것은 좋은 도구 일지 모르지만 알아낼 수는 없습니다. 너무 비싼.

Reactor.Net- 훨씬 매력적인 가격대이며 독립형 Executeable에서 잘 작동했습니다. 라이센싱 모듈도 훌륭했고 많은 노력을 아끼지 않았을 것입니다. 불행히도, 그것은 핵심 기능이 누락되어 있으며 난독 화에서 물건을 제외시키는 기능입니다. 따라서 필요한 결과를 얻을 수 없습니다 (여러 어셈블리를 병합하고 일부를 난독 처리하고 다른 것을 폐색하지 않음).

SmartAssembly- 나는 이것을 위해 Eval을 다운로드했으며 완벽하게 작동했습니다. 원하는 모든 것을 얻을 수 있었고 인터페이스는 일류였습니다. 가격대는 여전히 약간 무겁습니다.

Dotfuscator Pro- 웹 사이트에서 가격을 찾을 수 없습니다. 현재 견적을 받기 위해 토론 중입니다. 불길한 소리.

Confuser- 이름에서 알 수 있듯이 ppl을 혼란스럽게 만드는 오픈 소스 프로젝트입니다. https://confuser.codeplex.com/(jgauffin
에 의해 추가됨)

참고 : ConfuserEx는 GitHub 리포지토리의 이슈 # 498따라 "손상된"것으로보고되었습니다 .


무료 제품을 찾고 있다면 Visual Studio 또는 Eazfuscator.NET 과 함께 제공되는 DotObfuscator Community Edition을 사용해보십시오 .


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


나는 smartassembly를 사용하고 있습니다. 기본적으로 dll을 선택하면 난독 화됩니다. 잘 작동하는 것 같고 지금까지 아무런 문제가 없었습니다. 사용하기 매우 쉽습니다.


나는 시장에서 거의 모든 난 독자를 시험해 보았고 SmartAssembly는 내 의견으로는 최고입니다.


SmartAssembly도 사용하고 있습니다. Ezrinz .Net Reactor가 .net 응용 프로그램에서 훨씬 나아졌습니다. 모노를 난독 화하고 지원하며 어셈블리를 병합하며 평가판을 만들거나 라이센스를 특정 컴퓨터에 연결하는 매우 유용한 라이센싱 모듈도 있습니다 (매우 구현하기 쉽습니다). 가격도 매우 경쟁력이 있으며 필요할 때 빠른 속도로 지원해야합니다. 에지 리즈

나는 분명히 제품을 좋아하고 회사와 관련이없는 고객입니다.


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

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

그러나 이러한 모든 작업은 읽기가 더 어려워 지므로 필요한 노력의 양이 증가합니다. 종종 이것은 독자를 방해하기에 충분하지만, 코드를 파 헤치려는 사람은 항상 그렇게 할 수 있습니다.


원격 기능을 지원하는 asp.net 및 winform 인터페이스가있는 다중 계층 앱이 있습니다. 모든 종류의 예기치 않은 방법으로 문제가 될 수 있고 내 의견으로는 가치가없는 로더를 생성하는 암호화 유형을 제외하고는 난독 화기를 사용하는 데 아무런 문제가 없었습니다. 실제로 내 조언은 "전염병과 같은 암호화 로더 유형 난독 화를 피하십시오"라는 문구를 따라야합니다. :)

내 경험에 따르면 모든 obfuscator는 asp.net 및 원격을 포함하여 .net의 모든 측면에서 잘 작동합니다. 설정에 친숙해지고 코드의 어느 영역에서 얼마나 멀리 밀어 넣을 수 있는지 알아야합니다. 그리고 당신이 얻는 것에 대해 리버스 엔지니어링을 시도하고 그것이 다양한 설정에서 어떻게 작동하는지보십시오.

우리는 상업적인 앱에서 수년에 걸쳐 사용했으며 가격이 맞기 때문에 9rays.net의 Spices obfuscator에 정착했습니다. 가격이 맞기 때문에 일을하고 더 이상 수년간 지원이 필요하지 않았지만 정직해야합니다. remoting 및 asp.net에서 올바르게 작동하게하려면 어떤 난독 화기를 사용하는 것이 중요하지 않다고 생각하고 문제와 학습 곡선이 모두 동일합니다.

As others have mentioned all you're really doing is the equivalent of a padlock, keeping otherwise honest people out and or making it harder to simply recompile an app.

Licensing is usually the key area for most people and you should definitely be using some kind of digitally signed certificate system for licensing anyway. Your biggest loss will come from casual sharing of licenses if you don't have a smart system in place, the people that break the licensing system were never going to buy in the first place.

It's really easy to take this too far and have a negative impact on your customers and your business, do what is simple and reasonable and then don't worry about it.


For the past two days I've been experimenting with Dotfuscator Community Edition advanced (a free download after registering the basic CE that comes bundled with Visual Studio).

I think the reason more people don't use obfuscation as a default option is that it's a serious hassle compared to the risk. On smaller test projects I could get the obfuscated code running with a lot of effort. Deploying a simple project via ClickOnce was troublesome, but achievable after manually signing the manifests with mage. The only problem was that on error the stack trace came back obfuscated and the CE doesn't have a deobfuscator or clarifier packaged.

I tried to obfuscate a real project which is VSTO based in Excel, with Virtual Earth integration, lots of webservice calls and an IOC container and lot's of reflection. It was impossible.

If obfuscation is really a critical requirement, you should design your application with that in mind from the start, testing the obfuscated builds as you progress. Otherwise, if it's a fairly complex project, you're going to end up with a serious amount of pain.


Crypto Obfuscator address all your concerns and scenarios. It :

  1. Automatically excludes types/members from obfuscation based on rules. Serialized types/fields are one of them.
  2. It can be integrated into the build process using MSBUild.
  3. Supports ASP.Net projects.

I've recently tried piping the output of one free obfuscator into the another free obfuscator - namely Dotfuscator CE and the new Babel obfuscator on CodePlex. More details on my blog.

As for serialization, I've moved that code into a different DLL and included that in the project. I reasoned that there weren't any secrets in there that aren't in the XML anyway, so it didn't need obfuscation. If there is any serious code in those classes, using partial classes in the main assembly should cover it.


You should use whatever is cheapest and best known for your platform and call it a day. Obfuscation of high-level languages is a hard problem, because VM opcode streams don't suffer from the two biggest problems native opcode streams do: function/method identification and register aliasing.

What you should know about bytecode reversing is that it is already standard practice for security testers to review straight X86 code and find vulnerabilities in it. In raw X86, you cannot necessarily even find valid functions, let alone track a local variable throughout a function call. In almost no circumstances do native code reversers have access to function and variable names --- unless they're reviewing Microsoft code, for which MSFT helpfully provides that information to the public.

"Dotfuscation" works principally by scrambling function and variable names. It's probably better to do this than publish code with debug-level information, where the Reflector is literally giving up your source code. But anything you do beyond this is likely to get into diminishing returns.


I have had no problems with Smartassembly.


You could use "Dotfuscator Community Edition" - it comes by default in Visual Studio 2008 Professional. You can read about it at:

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

The "Professional" version of the product costs money but is better.

Do you really need your code obfuscated? Usually there is very little wrong with your application being decompiled, unless it is used for security purposes. If you are worried about people "stealing" your code, don't be; the vast majority of people looking at your code will be for learning purposes. Anyway, there is no totally effective obfuscation strategy for .NET - someone with enough skill will always be able to decompile/change you application.


Avoid Reactor. It is completely useless (and yes I paid for a license). Xenocode was the best one I encountered and bought a license for too. The support was very good but I didn't need it much as it just worked. I tested every obfuscator I could find and my conclusion is that xenocode was far and away the most robust and did the best job (also possibility to post process your .NET exe to a native exe which I didn't see anywhere else.).

There are two main differences between reactor and xenocode. The first one is that Xenocode actually works. The second is that the execution speed of your assemblies is no different. With reactor it was about 6 million times slower. I also got the impression that reactor was a one man operation.


I found the Agile.Net provide pretty good protection for your .Net Assembly because it offer not only obfuscation but also encryption. Download a free trail.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx


I've been obfuscating code in the same application since .Net 1, and it's been a major headache from a maintenance perspective. As you've mentioned, the serialization problem can be avoided, but it's really easy to make a mistake and obfuscate something you didn't want obfuscated. It's easy to break the build, or to change the obfuscation pattern and not be able to open old files. Plus it can be difficult to find out what went wrong and where.

Our choice was Xenocode, and were I to make the choice again today I would prefer to not obfuscate the code, or use Dotfuscator.


Here's a document from Microsoft themselves. Hope that helps..., it's from 2003, but it might still be relevant.


We're using SmartAssembly on our windows client. Works just fine.

Does add some extra problems too. Printing out your class names in log files/exceptions have to be de-obfuscated. And of course can't create a class from its name. So it's a good idea to take a look at your client and see which problems you can get by obfuscating.


It all depends on the programming language, which you use. Read the article: Obfuscated code


the free way would be to use dotfuscator from within visual studio, otherwise youd have to go out and buy an obfuscator like Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)


I had to use a obfuscation/resource protection in my latest rpoject and found Crypto Obfuscator as a nice and simple to use tool. The serialization issue is only a matter of settings in this tool.


There's a good open source version called Obfuscar. Seems to work fine. Types, properties, fields, methods can be excluded. The original is here: https://code.google.com/p/obfuscar/, but since it seems to not be updated anymore, somebody forked it to here: https://obfuscar.codeplex.com/


You may also want to look at new code protection technologies such as Metaforic and V.i.Labs and new software copy protection technologies such as ByteShield. Disclosure: I work for ByteShield.


I also use smartassembly. However, I don't know how it works for a web application. However, I'd like to point out that if your app uses shareware type protection, make sure it don't check a license with a boolean return. it's too easy to byte crack. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx


SmartAssembly is great,I was used in most of my projects


I tried Eziriz demo version....I liked it. But never brought the software.


Obfuscating is not a real protection.

If you have a .NET Exe file there is a FAR better solution.

I use Themida and can tell that it works very well.

The only drawback of Themida is that it cannot protect .NET Dlls. (It also protects C++ code in Exe and DLLs)

Themida is by far cheaper than the here mentioned obfuscators and is the best in anti piracy protection on the market. It creates a virtual machine were critical parts of your code are run and runs several threads that detect manipulation or breakpoints set by a cracker. It converts the .NET Exe into something that Reflector does not even recognize as a .NET assembly anymore.

Please read the detailed description on their website: http://www.oreans.com/themida_features.php


I have tried a product called Rummage and it does a good job in giving you some control ... Although it lacks many things that Eziriz offers but price for Rummage is too good...

참고URL : https://stackoverflow.com/questions/2525/net-obfuscation-tools-strategy

반응형