
XOR 암호화와 UUID 문자열 변환을 사용하여 Windows Defender를 우회하는 C++ 셸코드 주입 기법으로, 함수 호출 난독화 및 VirtualAlloc과 EnumChildWindows를 통한 메모리 실행을 포함합니다.
Windows Defender를 우회하기 위해 XOR 암호화 마법과 UUID 문자열 광기를 사용하는 또 다른 C++ 기반 셸코드 인젝션 기법입니다 :).
먼저, 바이너리 형식의 페이로드를 생성합니다(예: Havoc, CobaltStrike 또는 msfvenom 사용). 예를 들어 msfvenom에서는 다음과 같이 할 수 있습니다(사용하는 페이로드는 예시 목적이며 원하는 페이로드를 사용할 수 있습니다):
msfvenom -p windows/messagebox -f raw -o shellcode.bin
그런 다음 Python3 스크립트 bin_to_uuid.py를 사용하여 셸코드(바이너리/원시 형식)를 UUID 문자열 형식으로 변환합니다:
./bin_to_uuid.py -p shellcode.bin -o uuid.txt
Python3 스크립트 xor_encryptor.py를 사용하여 uuid.txt의 UUID 문자열을 xor 암호화합니다:
./xor_encryptor.py uuid.txt > xor_crypted_out.txt
xor_crypted_out.txt 파일에 있는 C-스타일 배열을 복사하여 C++ 파일에 unsigned char 배열로 붙여넣습니다(즉, unsigned char payload[]{xor_crypted_out.txt의 출력}).
이 셸코드 인젝션 기법은 다음과 같은 순서로 구성됩니다:
VirtualAlloc을 통해 페이로드 실행 및 상주를 위한 가상 메모리를 할당합니다.xor 키 값을 사용하여 페이로드를 xor 복호화합니다.UuidFromStringA를 사용하여 UUID 문자열을 바이너리 표현으로 변환하고 이전에 할당된 메모리에 저장합니다. 이는 WriteProcessMemory나 memcpy 같은 의심스러운 API 사용을 피하기 위함입니다.EnumChildWindows를 사용하여 이전에 메모리에 로드된 페이로드(1단계)를 실행합니다.memcpy나 WriteProcessMemory 같은 표준 함수(알려진 AV/EDR 경보 대상)를 사용하지 않습니다. 이 프로그램은 UuidFromStringA라는 Windows API 함수를 사용하여 데이터를 디코딩하고 동시에 메모리에 쓸 수 있습니다(정말 멋지지 않나요? 그리고 "아니요!"라고 말하지 말아 주세요 :)).xor 키(85행)를 원하는 값으로 변경해야 합니다. 이는 ./xor_encryptor.py Python3 스크립트에서도 KEY 변수를 변경하여 동일하게 수행해야 합니다. 키는 일치해야 합니다!실행 파일 이름 값(90행)을 자신의 파일 이름으로 변경해야 합니다.mingw를 사용했지만 원하는 컴파일러를 사용할 수 있습니다. :)make


바이너리는 2022년 8월 1일 antiscan.me에서 스캔되었습니다.

https://research.nccgroup.com/2021/01/23/rift-analysing-a-lazarus-shellcode-execution-method/