
.NET/PowerShell/VBA 공격적 보안 난독화 도구
Codecepticon은 C#, VBA/VB6(매크로), PowerShell 소스 코드를 난독화할 수 있는 .NET 애플리케이션으로, Red/Purple Team과 같은 공격적 보안 활동을 위해 개발되었습니다. 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 패키지가 다운로드될 때까지 기다린 후 솔루션을 빌드하십시오. 미리 컴파일된 Release를 다운로드할 수도 있습니다.
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은 다음 사항에 동의하는 한 기여를 매우 환영합니다: