.NET 어셈블리를 위한 강력한 난독화 도구입니다. 이 도구는 .NET 애플리케이션의 코드를 보호하고 역공학을 어렵게 만들어 지적 재산을 보호하는데 도움을 줍니다. Mono.Cecil을 기반으로 구현되어 있으며, 다양한 난독화 기법을 통해 코드의 가독성과 분석 가능성을 크게 저하시킵니다.
- 클래스, 메서드, 필드 이름을 무작위 문자열로 변경하여 코드 가독성 저하
- 특수 이름(예: Main, InitializeComponent 등)은 보존하여 기능 유지
- 네임스페이스 구조 유지로 호환성 보장
- 난독화된 이름은 실행 시 자동으로 매핑되어 정상 동작
- 유니코드 문자를 활용한 이름 변경으로 추가적인 난독화 효과
- 인터페이스와 상속 관계는 유지하여 런타임 오류 방지
- 모든 문자열 리터럴을 Base64로 암호화
- 런타임에 자동으로 복호화되어 원본 기능 유지
- 암호화된 문자열은 디컴파일 시에도 원본 내용 노출 방지
- 성능 최적화를 위한 선택적 암호화 지원
- 암호화 키는 프로그램마다 고유하게 생성
- 문자열 풀(String Pool) 최적화로 메모리 사용량 감소
- 메서드 내 코드 흐름을 복잡하게 변경하여 분석 난이도 증가
- 무작위 분기문과 더미 코드 삽입
- 디컴파일러의 코드 분석 방해
- 원본 로직은 유지하면서 실행 흐름만 변경
- 조건부 분기문을 switch-case로 변환
- 가상 분기문을 통한 코드 흐름 혼란
- 더미 메서드 호출로 코드 분석 방해
-
Anti-Debug
- 디버거 감지 시 경고 메시지 출력
- 디버깅 시도 모니터링
- 안전한 방식으로 구현되어 프로그램 실행에 영향 최소화
- IsDebuggerPresent API 활용
- 디버그 포트 감지
- 디버그 레지스트리 키 검사
-
Anti-Dump
- 메모리 덤프 시도 방지
- 프로세스 메모리 보호
- 덤프 파일 생성 방지
- 메모리 페이지 보호 속성 설정
- 핸들 테이블 보호
- 덤프 파일 생성 API 후킹
-
Anti-Tamper
- 파일 무결성 검사를 통한 변조 감지
- SHA256 해시 기반 검증
- 변조 감지 시 프로그램 종료
- 실행 중 지속적인 무결성 검사
- 코드 섹션 해시 검증
- 리소스 섹션 보호
-
Anti-Decompiler
- 디컴파일러 분석 방지
- 코드 구조 난독화
- 디컴파일 시도 감지
- IL 코드 최적화
- 메타데이터 보호
- 리플렉션 방지
- 임베디드 리소스 암호화
- 문자열 리소스 Base64 인코딩
- 리소스 접근 제어
- 런타임에 자동 복호화
- 리소스 이름 난독화
- 리소스 압축 및 암호화
- 리소스 로딩 시점 보호
-
난독화하고 싶은 .NET 실행 파일을
DotObfuscator.exe에 드래그 앤 드롭합니다. -
난독화가 완료되면:
obfuscated_output.exe파일이 생성됩니다.- 원본 파일은 그대로 유지됩니다.
- 콘솔 창에 진행 상황이 표시됩니다.
-
생성된
obfuscated_output.exe를 실행하여 정상 작동하는지 확인합니다.
- Windows 운영체제 (Windows 7 이상)
- .NET Framework 4.8 이상
- 최소 100MB 이상의 디스크 공간
- 최소 2GB RAM 권장
- x86/x64 아키텍처 지원
- Mono.Cecil 0.11.4 이상
- System.Security.Cryptography
- System.Reflection.Metadata
- System.Runtime.CompilerServices.Unsafe
- 난독화는 프로그램 실행 속도에 약간의 영향을 줄 수 있습니다.
- 특히 문자열 암호화와 제어 흐름 난독화가 성능에 영향을 줄 수 있습니다.
- 대용량 어셈블리의 경우 처리 시간이 길어질 수 있습니다.
- 메모리 사용량이 증가할 수 있습니다.
- 난독화된 파일은 디버깅이 매우 어려워집니다.
- 개발 중인 코드는 난독화하지 않는 것을 권장합니다.
- PDB 파일과의 호환성이 제한될 수 있습니다.
- 예외 스택 트레이스가 난독화될 수 있습니다.
- 일부 보안 기능은 프로그램 실행에 영향을 줄 수 있습니다.
- 프로덕션 환경에서 사용하기 전에 충분한 테스트가 필요합니다.
- 안티바이러스 프로그램과 충돌할 수 있습니다.
- 시스템 보안 정책에 따라 실행이 제한될 수 있습니다.
- 일부 .NET 기능과 호환되지 않을 수 있습니다.
- 리플렉션을 사용하는 코드는 주의가 필요합니다.
- 동적 코드 생성과 호환성 문제가 있을 수 있습니다.
- 특정 프레임워크나 라이브러리와 충돌할 수 있습니다.