.net 어셈블리 (exe, dll)를 암호화하거나 안티 디버그 기술을 적용 할 방법을 찾고 있습니다. 어셈블리에 네이티브 바이트 코드가 아니라 CIL 코드가없고 쉽게 디 컴파일 될 수 있다는 것을 알고 있습니다.
솔직히 말해서 나는 .NET에 아주 익숙하다고 말하고있다. 저는 웹 개발자의 배경에서 왔고 C#은 취미 일 뿐이므로 실행 파일을 암호화 할 필요가 없지만 dotfuscator와 같은 솔루션이 어떻게 작동하는지 궁금해했습니다.
또한 파일을 메모리에서 해독해야만 파일을 실행할 수 있지만 네이티브 코드가 포함 된 어셈블리와 동일합니다.
.NET 실행 파일을 암호화하는 것이 유용할지 여부에 대한 토론이 필요하지 않습니다. 나는 암호화 또는 안티 디버그 기술 (예 : 제어 흐름 난독 화)을 적용하기 위해 취할 수있는 이론적 접근에만 관심이있다. 아래 예제와 관련 질문에서 알 수 있듯이 제 지식은 0보다 훨씬 적습니다. 코드가 컴파일되고 실행되면 나는 기쁜 애플리케이션 개발자이지만 코드를 더 깊이 파고 싶습니다.암호화 .net 어셈블리/안티 디버그 기술
using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
if(1 < 2)
{
if(3 == 3)
{
if ("a" != "b")
{
if(0 != 1)
{
Console.WriteLine("Hello World!");
}
}
}
}
Console.ReadLine();
}
}
}
쓸모없는 조건을 제어 흐름 난독 처리로 분류 할 수 있습니까?
제안 사항이나 흥미로운 링크 또는 권장 사항을 알려주십시오.
난독 화 코드는 개발자가 코드를 더 복잡하게 만들어 대개 더 모호한 버그로 변환하기 때문에 역효과를 낳습니다. 개발자가 노력해야하는 핵심 사항은 코드를 이해하기 쉽고 일반적으로 버그가 적고 유지 관리가 용이하다는 점입니다. – zaph
중요한 점은, 이것이 '암호화'가 아니라는 것입니다. 여러분이 묻는 것은 난독 화입니다. dll로 코드를 '암호화'한 다음 해독 된 데이터를 assembly.load하여 효과적으로 앱에서 암호화 된 쓰레기를 배포 할 수 있습니다. 그러나 이것이 성공하려면 적어도 엔트로피가 높은 비 관리 래퍼 (C++ 앱)를 작성해야 관리 코드를 해독하고 실행해야합니다. 전반적으로 지연은 의심스러운 이익을 위해 중요 할 수 있습니다. – zaitsman