소개
de4dot은 .NET 어셈블리의 난독화 및 패킹을 해제하는 오픈 소스 도구입니다. C#로 작성되었으며, 다양한 난독화 기법을 역추적하여 어셈블리를 가능한 한 원래 상태에 가깝게 복원합니다. 0xd4d 개발자에 의해 유지 관리되며, GPL-3.0 라이선스 하에 배포됩니다. 주로 .NET 어셈블리의 문자열 암호화, 메서드 인라인, 가상화된 코드, 리소스 암호화 등을 해제하는 데 사용됩니다.
상세정보
난독화 해제 기능
de4dot은 다음과 같은 난독화 기법을 처리할 수 있습니다:
- 인라인 메서드 복원
- 문자열 암호화 해제 (정적 및 동적)
- 상수 암호화 해제 (정수, 실수 등)
- 메서드 암호화 해제 (정적 및 동적)
- 프록시 메서드 제거
- 심볼 이름 복원 (가능한 경우)
- 가상화된 코드 디버추얼라이즈
- 리소스 및 임베디드 파일 암호화 해제
- 탐지 방지 및 안티-디버그 코드 제거
- 제어 흐름 난독화 해제
- 클래스 필드 복원
- PE 실행 파일을 .NET 실행 파일로 변환
- 정크 클래스 제거
- PE 검증 오류 수정
- 메서드 매개변수 및 필드 타입 복원
지원 난독화 도구
다음과 같은 난독화 도구에 대한 지원을 제공합니다:
- Agile.NET (aka CliSecure)
- Babel.NET
- CodeFort
- CodeVeil
- CodeWall
- CryptoObfuscator
- DeepSea Obfuscator
- Dotfuscator
- .NET Reactor
- Eazfuscator.NET
- Goliath.NET
- ILProtector
- MaxtoCode
- MPRESS
- Rummage
- Skater.NET
- SmartAssembly
- Spices.Net
- Xenocode
기본 사용법 (N00b 사용자)
파일을 de4dot.exe로 드래그 앤 드롭하면 몇 초 내에 처리됩니다.
여러 파일 일괄 처리
여러 어셈블리를 한 번에 처리해야 할 때는 다음과 같이 재귀 검색 옵션을 사용합니다:
de4dot -r c:input -ru -ro c:output
이 명령은 c:input 폴더를 재귀적으로 검색하여 지원되는 난독화가 적용된 모든 어셈블리를 처리하고, 결과를 c:output에 저장합니다. -ru 옵션은 알 수 없는 파일을 무시하고, -ro 옵션은 출력 디렉터리를 지정합니다.
난독화 도구 감지
파일을 해제하지 않고 난독화 도구만 감지하려면 -d 옵션을 사용합니다:
de4dot -d -r c:input</n지원되는 난독화 도구로 감지된 파일만 보려면 -ru 옵션을 추가합니다:
de4dot -d -r c:input -ru특정 파일에 대해 난독화 도구를 감지하려면 다음과 같이 입력합니다:
de4dot -d file1.dll file2.dll file3.dll메타데이터 토큰 보존
특정 경우 메타데이터 토큰을 보존해야 할 때는 다음과 같은 옵션을 사용할 수 있습니다:
중요한 토큰 모두 보존:
de4dot --preserve-tokens file1.dll토큰 보존 및 타입/필드 추가 유지:
de4dot --keep-types --preserve-tokens file1.dll토큰 보존 및 Param 행 생성 방지:
de4dot --dont-create-params --preserve-tokens file1.dllParam 토큰 제외하고 모든 토큰 보존:
de4dot --preserve-table all,-pd file1.dll동적 문자열 복호화
지원되지 않는 난독화 도구의 문자열을 복호화해야 할 때는 다음과 같이 사용할 수 있습니다:
de4dot file1.dll --strtyp delegate --strtok 06012345 --strtok 060ABCDE이 명령은 어셈블리를 메모리에 로드하고 실행하므로, 악성 파일을 의심되는 경우 샌드박스 환경에서 실행해야 합니다.
난독화 도구 강제 지정
자동 감지가 실패한 경우 특정 난독화 도구로 강제 지정할 수 있습니다:
de4dot file1.dll -p sa // SmartAssembly로 강제de4dot file1.dll -p un // 지원되지 않는 난독화 도구로 강제심볼 이름 변경 비활성화
WPF 또는 Silverlight 앱에서 문제가 발생할 경우 이름 변경을 비활성화할 수 있습니다:
de4dot --dont-rename file1.dll file2.dll특정 심볼 유형에 대해 이름 변경 비활성화:
de4dot --keep-names pem file1.dll // 속성, 이벤트, 메서드 제외하고 이름 변경제한 사항·확인 사항
심볼 이름 변경은 원래 이름을 복원할 수 없으며, 이는 난독화 과정에서 원래 이름이 제거되기 때문입니다. 따라서 리네이밍은 가독성을 위해 임의 이름을 부여하는 데 그칩니다.
일부 난독화 도구는 어셈블리와 모든 종속성을 메모리에 로드하여 실행할 수 있습니다. 악성 파일을 의심되는 경우 반드시 샌드박스 환경에서 사용해야 합니다.
현재 버전이 특정 어셈블리를 메모리에 로드하지 않더라도, 미래 버전에서는 그렇게 할 수 있으므로 항상 주의가 필요합니다.
최신 버전·업데이트
현재 버전은 0.0.0.15이며, 최신 소스 코드와 릴리스 정보는 GitHub 저장소에서 확인할 수 있습니다.
시스템 요구사항
별도의 시스템 요구사항이 등록되지 않았습니다.


