
실용적인 Windows 악성코드 개발 과정: API hashing, DLL sideloading, shellcode execution, PE manipulation, payload hosting 및 delivery labs.
Desktop development with C++ 워크로드를 선택합니다.추가로 (선택 사항) 더 완전한 리버싱 환경을 위해 심볼을 설정합니다:
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
Visual Studio에서 PMD.sln을 엽니다.
setup 프로젝트를 선택하고 다음을 수행할 수 있는지 확인합니다:
a. 프로젝트를 컴파일합니다.
b. DebugView++에서 디버그 출력 문을 확인합니다.
IAT 항목과 기타 PE 속성을 조작하기 위해 template 프로젝트의 컴파일러 및 링커 플래그를 수정합니다.
a. 동적 API 해석 및 MSDN 문서에 익숙해집니다.
b. 눈에 띄는 다른 속성이 있나요? 바이너리에 대해 Strings.exe를 실행하면 특별히 눈에 띄는 문자열이 있나요?
c. 그것들을 제거하거나 업데이트할 수 있나요?
실습을 완료하려면 원하는 도구를 사용하세요 (예: dumpbin/PE Bear). scripts\props.py 아래에 pefile용 래퍼가 제공되어 있습니다 (요구 사항을 설치했는지 확인하세요).
VXUG에서 악성코드 샘플을 다운로드합니다.
a. 정상(양성) 실행 파일과 악성 실행 파일의 주요 차이점은 무엇인가요?
b. 우리 바이너리와 정상 실행 파일 간의 주요 차이점은 무엇인가요?
현재 사용되는 API 해싱 알고리즘은 fnv1a입니다.
solution 프로젝트를 열고 API 해싱 프레임워크를 사용하여 MessageBoxA를 호출합니다.Cisco Webex를 다운로드합니다 (https://www.webex.com/downloads.html)
CiscoCollabHost를 찾아 어떤 DLL이 로드되는지 확인합니다.
Ghidra에서 CiscoCollabHost를 열고 사이드로딩을 통해 코드 실행을 달성하는 다양한 방법을 식별합니다.
dll_template을 수정하여 대상 바이너리를 사이드로드합니다. DebugView++에서 디버그 문자열을 볼 수 있는지 확인합니다.
dll_template.dll의 LastWriteTime 및 CreationTime을 대상 DLL과 일치하도록 업데이트합니다.
유틸리티 프로젝트를 컴파일하고 실행합니다.
a. 추가로, 호스트 시스템에서 실행하는 것도 고려해 보세요.
식별된 DLL을 x64/{Debug,Release} 디렉터리에 복사하고 로더 코드를 업데이트합니다.
API 해싱 프레임워크에서 다른 함수로 셸코드를 실행하도록 execute_sc를 업데이트합니다.
클라우드 스토리지 제공업체에 가입합니다 (예: AWS/CloudFlare)
페이로드를 패키징하고 업로드합니다.
a. 추가로, 다운로드 액세스를 제한/감사하는 방법을 조사합니다.
VM의 스냅샷을 생성합니다.
기본 VM으로 되돌리고 전체 "전달" 시나리오를 실행합니다.
.github\workflows\build.yml을 업데이트합니다. 몇 가지 아이디어는 다음과 같습니다:
props.py를 실행하고 출력을 검증/포함합니다.LastWriteTime 및 CreationTime 업데이트를 자동화합니다.