최근 DotNet 관련 자료를 공부하고 있는데 sscli가 정말 좋은 것 같아요 :P.
공부하면서 지식을 종합해서 이런 작은 도구를 만들었어요.
보호 원리는 중국의 RemoteSoft 및 Maxtocode와 유사합니다. 암호화된 프로그램은 출시될 때 런타임 라이브러리도 함께 제공해야 합니다.
그러나 이 두 가지와 달리 포함된 런타임 라이브러리는 순수 네이티브 dll이 아니라 C++/CLI 하이브리드 어셈블리입니다.
도구의 형태가 완성되었으며 전체 커널 프레임워크가 완성되었습니다. 샘플을 암호화하는 데 사용되며 정상적으로 실행됩니다.
일부 측면은 maxtocode를 초과합니다.
1. Microsoft의 ildasm 및 ilasm 프로그램에 의존하지 않습니다.
IL 디스어셈블리와 IL 어셈블리는 모두 프로그래밍 방식으로 구현됩니다.
네이티브 코드가 포함된 어셈블리는 암호화될 수 있습니다.
2. 안티 디컴파일 도구인 maxtocode 암호화 어셈블리는 리플렉터로 직접 볼 수 없지만 프로그램을 실행한 후 pedumper를 사용하고 덤프한 후에는 리플렉터를 사용하여 구조를 볼 수 있습니다. 물론 여전히 코드를 볼 수는 없습니다.
dnguard로 암호화한 어셈블리는 생각보다 좋습니다. 암호화된 어셈블리는 리플렉터로 볼 수 없고, 덤프된 어셈블리는 리플렉터 플러그인으로 볼 수 없습니다.
리플렉터는 여전히 약간 약한 것 같습니다. 유사한 소프트웨어인 Disa# 및 Xenocode fox는 maxtocode 및 dnguard 암호화된 어셈블리를 직접 열고 볼 수 있습니다.
이를 위해 dnguard 암호화된 어셈블리에 구조적 난독화를 추가하려고 했는데, Disa# 및 fox에서 구조를 볼 때 약간의 혼란이 있을 수 있습니다. 즉, 클래스 A의 기능이 표시될 수 있습니다. B클래스에서. 효과는 그리 좋지 않습니다. 각 클래스에는 문제를 일으킬 수 있는 함수가 몇 개밖에 없습니다.
3. Anti .Net 2.0의 새로운 기능은 maxtocode 3.13(내부 버전)과 비슷하다고 합니다. Jason 블로그의 답변을 보면 3.13)과 같은 것 같습니다. Max 3.12도 몇 바이트만 패치하면 사용할 수 있고, 리플렉션도 크게 다르지 않고, 패치하는데 필요한 바이트 수도 3.12보다 훨씬 적습니다.
이제 효율성에 영향을 주지 않고 강도를 크게 높일 수 있는 더 나은 솔루션이 있습니다. 하지만 덤프를 완전히 방지할 수는 없습니다.
또한 다른 보호 기술과 함께 구현해야 하는 상대적으로 완벽한 반덤핑 솔루션도 있습니다.
우리는 이 측면에 대해 심도 있게 논의할 계획이 없습니다. DNGuard 암호화 셸이 완성된 후에는 또 다른 보호 기술을 시작하고 최종적으로 두 가지 보호 기능을 결합할 것입니다.
4. 안티 덤프 후 어셈블리를 복원하려면 ildasm 및 ilasm을 사용하십시오. Anti .net 2.0의 새로운 안티 덤프 기능에 더해, DNGuard는 제가 초기에 만들었던 안티 덤프 기능도 추가했습니다. 또한 덤프 후 ildasm을 방지하기 위해 C++/CLI 하이브리드 어셈블리 기능도 사용됩니다. 그러나 이는 그다지 강하지 않으며 작은 어셈블리를 쉽게 수리하여 IL 어셈블리를 구현할 수 있습니다.
아직 암호화 알고리즘이 해결되지 않았고 런타임 라이브러리 자체에 대한 보호도 아직 완료되지 않았습니다. maxtocode의 런타임 라이브러리는 이 셸을 사용하지만 C++/CLI DLL에 대한 좋은 방법을 찾지 못했습니다. . 보호 계층을 수동으로만 추가할 수 있는 것으로 보이며 이미 테스트를 시작했습니다. 이제 간단한 암호화 셸을 추가하고 DNGuard 데모를 올려보겠습니다.
DNGuard가 어셈블리를 암호화한 후 리플렉터를 사용하여 다음을 확인합니다.
DNGuard 암호화된 어셈블리 덤프를 보려면 리플렉터를 사용하세요.
Maxtocode로 암호화된 어셈블리는 Reflector로 표시됩니다.
Maxtocode 암호화 어셈블리를 덤프한 후 Reflector로 봅니다.