FUD-UUID-Shellcode is another shellcode injection technique using C++ that attempts to bypass Windows Defender using XOR encryption sorcery and UUID strings madness.
How it works?
Shellcode Generation
Firstly, generate a payload in binary format( using either CobaltStrike or msfvenom ) for instance, in msfvenom, you can do it like so( the payload I’m using is for illustration purposes, you can use whatever payload you want ):
msfvenom -p windows/messagebox -f raw -o shellcode.bin
Then convert the shellcode( in binary/raw format ) into a UUID string format using the Python3 script, bin_to_uuid.py:
./bin_to_uuid.py -p shellcode.bin > uuid.txt
xor encrypt the UUID strings in the uuid.txt using the Python3 script, xor_encryptor.py.
./xor_encryptor.py uuid.txt > xor_crypted_out.txt
Copy the C-style array in the file, xor_crypted_out.txt, and paste it in the C++ file as an array of unsigned char i.e. unsigned char payload[]{your_output_from_xor_crypted_out.txt}
Execution
This shellcode injection technique comprises the following subsequent steps:
- First things first, it allocates virtual memory for payload execution and residence via
VirtualAlloc - It
xordecrypts the payload using thexorkey value - Uses
UuidFromStringAto convertUUIDstrings into their binary representation and store them in the previously allocated memory. This is used to avoid the usage of suspicious APIs likeWriteProcessMemoryormemcpy. - Use
EnumChildWindowsto execute the payload previously loaded into memory( in step 1 )
What makes it unique?
- It doesn’t use standard functions like
memcpyorWriteProcessMemorywhich are known to raise alarms to AVs/EDRs, this program uses the Windows API function calledUuidFromStringAwhich can be used to decode data as well as write it to memory( Isn’t that great folks? And please don’t say “NO!” 🙂 ). - It uses the function call obfuscation trick to call the Windows API functions
- Lastly, because it looks unique 🙂 ( Isn’t it? 🙂 )
Important
- You have to change the
xorkey(line 85) to what you wish. This also has to be done in the./xor_encryptor.pypython3 script by changing theKEYvariable. The keys have to match! - You have to change the default
executable filenamevalue(row 90) to your filename. mingwwas used but you can use whichever compiler you prefer. 🙂
Compile
- Simply run this at your terminal/shell:
make
Proof-of-Concept( PoC )

Static Analysis

AV Scan results
The binary was scanned using antiscan.me on 01/08/2022.













.png)
