
.NET/PowerShell/VBA 공격적 보안 난독화 도구
[!CAUTION] 이 저장소는 유지보수되지 않습니다. 최신 버전은 https://github.com/sadreck/Codecepticon 을 방문하세요.
Codecepticon은 C#, VBA/VB6 (매크로) 및 PowerShell 소스 코드를 난독화할 수 있는 .NET 애플리케이션으로, Red/Purple Teams와 같은 공격적 보안 작업을 위해 개발되었습니다. Codecepticon을 다른 난독화 도구와 구분하는 점은 컴파일된 실행 파일이 아닌 소스 코드 자체를 대상으로 하며, 특히 AV/EDR 우회를 위해 개발되었다는 것입니다.
Codecepticon을 사용하면 코드를 난독화하고 다시 작성할 수 있을 뿐만 아니라 명령줄도 다시 작성할 수 있는 기능을 제공합니다.
! 시작하기 전에 !
이 문서는 Codecepticon을 설치하고 사용하는 방법에 관한 내용만 포함합니다. Rubeus, SharpHound와 같은 도구의 컴파일, 사용 및 지원은 제공되지 않습니다. 자세한 내용은 각 프로젝트의 저장소를 별도로 참조하세요.
Codecepticon은 VS2022에서 적극적으로 개발/테스트되고 있지만, VS2019에서도 작동해야 합니다. VS2019 이하에서 생성된 티켓/이슈는 해당 문제가 VS2022에서 재현되지 않는 한 조사되지 않습니다. 그러므로 최신 버전인 VS2022를 사용해 주세요.
다음 패키지는 반드시 v3.9.0이어야 합니다. 더 새로운 버전에는 다음과 같은 아직 해결되지 않은 문제가 있습니다: https://github.com/dotnet/roslyn/issues/58463
Codecepticon은 런타임에 이러한 패키지의 버전을 확인하며, 버전이 v3.9.0과 다를 경우 알려줍니다.
아무리 강조해도 지나치지 않습니다: 항상 먼저 로컬에서 난독화된 코드를 테스트하세요.


Codecepticon을 열고 모든 NuGet 패키지가 다운로드될 때까지 기다린 후 솔루션을 빌드하세요.
Codecepticon을 사용하는 방법은 두 가지입니다. 모든 인수를 명령줄에 입력하거나 단일 XML 구성 파일을 전달하는 것입니다. 지원되는 사용자 정의 수준이 높기 때문에 --help 출력을 수동으로 살펴보며 어떤 매개변수를 어떻게 사용할지 파악하는 것은 권장되지 않습니다. CommandLineGenerator.html을 사용하여 빠르게 명령을 생성하세요:

명령 생성기의 출력 형식은 Console 또는 XML 중 선택할 수 있습니다. 콘솔 명령은 다음과 같이 실행할 수 있습니다:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
XML 구성 파일을 사용하는 경우:
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Codecepticon의 기능을 깊이 파고들고 싶다면 이 문서를 확인하세요.
사용할 수 있는 팁은 이 문서를 확인하세요.
C# 프로젝트를 난독화하는 것은 간단합니다. 대상으로 삼을 솔루션을 선택하기만 하면 됩니다. 솔루션 자체의 백업은 생성되지 않으며, 현재 솔루션이 난독화됩니다. Codecepticon을 실행하기 전에 대상 프로젝트를 독립적으로 컴파일할 수 있는지 확인하세요.
VBA 난독화는 Microsoft Office 문서가 아닌 소스 코드 자체를 대상으로 합니다. 따라서 doc(x) 또는 xls(x) 파일을 Codecepticon에 전달할 수 없습니다. 모듈 자체의 소스 코드여야 합니다 (Alt-F11을 누르고 코드를 복사하세요).
PowerShell 스크립트의 복잡성과 스크립트 작성 방식의 자유도로 인해 모든 엣지 케이스를 다루고 난독화된 결과가 완전히 기능하도록 보장하는 것은 어렵습니다. Codecepticon이 간단한 스크립트/기능에 대해서는 잘 작동할 것으로 예상되지만, PowerView와 같은 복잡한 스크립트에 대해 실행하는 것은 작동하지 않습니다 – 이는 진행 중인 작업입니다.
애플리케이션이나 스크립트를 난독화한 후에는 명령줄 인수도 이름이 변경되었을 가능성이 높습니다. 이에 대한 해결책은 HTML 매핑 파일을 사용하여 새 이름을 찾는 것입니다. 예를 들어, 다음 명령줄을 변환해 보겠습니다:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
HTML 매핑 파일에서 각 인수를 검색하면 다음과 같은 결과를 얻습니다:



그리고 모든 문자열을 교체하면 결과는 다음과 같습니다:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
그러나 일부 값은 둘 이상의 범주에 존재할 수 있습니다:

따라서 항상 로컬 환경에서 결과를 먼저 테스트하는 것이 매우 중요합니다.
Codecepticon을 사용하여 실행 파일 (컴파일된 출력물)에 디지털 서명을 할 수도 있습니다. Codecepticon은 서명 인증서를 생성한 다음 이를 사용하거나 (또는 제공한 다른 인증서를 사용하여) 대상 파일에 서명할 수 있습니다.
컴파일된 출력물에는 많은 종속 DLL이 포함되어 있으며, 라이선스 요구 사항으로 인해 서면 동의 없이 재배포할 수 없습니다.
아니요, Codecepticon은 모든 프로젝트에서 작동해야 합니다. 프로필은 단지 대상 프로젝트에 추가로 적용되는 약간의 조정으로, 프로젝트를 더 안정적이고 쉽게 다룰 수 있도록 하기 위한 것입니다.
하지만 모든 코드는 고유하기 때문에, 프로젝트를 난독화할 때 컴파일 또는 실행을 방해하는 하나 또는 두 개의 오류가 발생할 수 있습니다. 이 경우 새로운 프로필이 필요할 수 있습니다 – 해당 사례가 발생하면 새 이슈를 제출해 주세요.
PowerShell/VBA 코드에도 동일한 원칙이 적용됩니다 – 현재 Codecepticon에 포함된 프로필은 없지만, 필요하다면 추가하는 것은 쉬운 작업입니다.
버그 신고 및 새로운 기능 제안은 이슈를 생성해 주세요.
풀 리퀘스트 제출은 Contributions 섹션을 참조하세요.
Codecepticon을 실행하기 전에 대상 프로젝트의 깨끗한 버전을 컴파일할 수 있는지 확인하세요. 이 문제가 발생하는 경우, 종종 Codecepticon보다는 대상 솔루션의 누락된 종속성 때문인 경우가 많습니다. 하지만 여전히 컴파일되지 않는다면:
최선을 다하겠지만, PowerShell 스크립트는 매우 복잡할 수 있고 PSParser가 C#용 Roslyn만큼 고급스럽지 않기 때문에 약속할 수 없습니다. VBA/VB6에도 동일하게 적용됩니다.
다음 오류가 발생할 수 있습니다:

아직 이 문제의 원인을 파악 중입니다. 빠른 수정 방법은 NuGet 패키지 관리자에서 System.Collections.Immutable 패키지를 제거한 후 다시 설치하는 것입니다.
오타, 버그, 새로운 기능 등 Codecepticon은 기여에 매우 열려 있습니다. 단, 다음 사항에 동의하는 경우에 한합니다: