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

ci.yml (75397B)

      1 name: CI
      2 
      3 on:
      4   push:
      5     branches: [ stable ]
      6   pull_request:
      7     branches: [ stable ]
      8 
      9 env:
     10   CARGO_TERM_COLOR: always
     11   RUST_VERSION: 1.92.0
     12 
     13 permissions:
     14   contents: read
     15 
     16 jobs:
     17   check:
     18     name: Check
     19     runs-on: ubuntu-latest
     20     steps:
     21       - name: Checkout code
     22         uses: actions/checkout@v4
     23 
     24       - name: Install Rust toolchain
     25         uses: dtolnay/rust-toolchain@stable
     26         with:
     27           toolchain: ${{ env.RUST_VERSION }}
     28 
     29       - name: Cache cargo registry
     30         uses: actions/cache@v4
     31         with:
     32           path: ~/.cargo/registry
     33           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
     34 
     35       - name: Cache cargo index
     36         uses: actions/cache@v4
     37         with:
     38           path: ~/.cargo/git
     39           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
     40 
     41       - name: Cache cargo build
     42         uses: actions/cache@v4
     43         with:
     44           path: target
     45           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
     46 
     47       - name: Run cargo check
     48         run: cargo check --verbose
     49 
     50   test:
     51     name: Test
     52     runs-on: ubuntu-latest
     53     steps:
     54       - name: Checkout code
     55         uses: actions/checkout@v4
     56 
     57       - name: Install Rust toolchain
     58         uses: dtolnay/rust-toolchain@stable
     59         with:
     60           toolchain: ${{ env.RUST_VERSION }}
     61 
     62       - name: Cache cargo registry
     63         uses: actions/cache@v4
     64         with:
     65           path: ~/.cargo/registry
     66           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
     67 
     68       - name: Cache cargo index
     69         uses: actions/cache@v4
     70         with:
     71           path: ~/.cargo/git
     72           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
     73 
     74       - name: Cache cargo build
     75         uses: actions/cache@v4
     76         with:
     77           path: target
     78           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
     79 
     80       - name: Run tests
     81         run: cargo test --verbose
     82 
     83   e2e-test:
     84     name: End-to-End Test
     85     runs-on: ubuntu-latest
     86     steps:
     87       - name: Checkout code
     88         uses: actions/checkout@v4
     89 
     90       - name: Install Rust toolchain
     91         uses: dtolnay/rust-toolchain@stable
     92         with:
     93           toolchain: ${{ env.RUST_VERSION }}
     94           targets: x86_64-pc-windows-gnu
     95 
     96       - name: Install cross-compilation tools
     97         run: sudo apt-get update && sudo apt-get install -y mingw-w64 nasm
     98 
     99       - name: Cache cargo registry
    100         uses: actions/cache@v4
    101         with:
    102           path: ~/.cargo/registry
    103           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
    104 
    105       - name: Cache cargo index
    106         uses: actions/cache@v4
    107         with:
    108           path: ~/.cargo/git
    109           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
    110 
    111       - name: Cache cargo build
    112         uses: actions/cache@v4
    113         with:
    114           path: target
    115           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
    116 
    117       - name: Build release binary
    118         run: cargo build --release --verbose
    119 
    120       - name: Run end-to-end test
    121         run: |
    122           # Create a test directory
    123           mkdir -p e2e-test
    124           cd e2e-test
    125 
    126           # Create a test shellcode file
    127           echo -ne '\x90\x90\x90\xc3' > test_shellcode.raw
    128           echo "✓ Created test shellcode file (4 bytes)"
    129 
    130           # Test 1: EXE binary generation with default encryption (AES)
    131           echo "=== Test 1: EXE binary with AES encryption ==="
    132           ../target/release/myph_v2 -s test_shellcode.raw -f test_aes.exe -e aes
    133 
    134           # Verify the EXE binary was created
    135           if [ ! -f "test_aes.exe" ]; then
    136             echo "Error: Binary 'test_aes.exe' was not created"
    137             exit 1
    138           fi
    139 
    140           # Verify it's a Windows PE executable
    141           if file test_aes.exe | grep -q "PE32+ executable.*MS Windows"; then
    142             echo "✓ EXE is a Windows PE32+ executable"
    143           else
    144             echo "Error: File is not a Windows PE executable"
    145             exit 1
    146           fi
    147 
    148           if file test_aes.exe | grep -q "stripped"; then
    149             echo "✓ EXE binary is stripped"
    150           else
    151             echo "Warning: EXE binary may not be stripped"
    152           fi
    153 
    154           BINARY_SIZE=$(stat -f%z test_aes.exe 2>/dev/null || stat -c%s test_aes.exe)
    155           echo "✓ EXE binary size: $BINARY_SIZE bytes"
    156 
    157           # Test 2: EXE binary generation with ChaCha20 encryption
    158           echo ""
    159           echo "=== Test 2: EXE binary with ChaCha20 encryption ==="
    160           ../target/release/myph_v2 -s test_shellcode.raw -f test_chacha20.exe -e chacha20
    161 
    162           if [ ! -f "test_chacha20.exe" ]; then
    163             echo "Error: Binary 'test_chacha20.exe' was not created"
    164             exit 1
    165           fi
    166 
    167           if file test_chacha20.exe | grep -q "PE32+ executable.*MS Windows"; then
    168             echo "✓ ChaCha20 encrypted binary is a valid PE32+ executable"
    169           else
    170             echo "Error: File is not a Windows PE executable"
    171             exit 1
    172           fi
    173 
    174           # Test 3: EXE binary generation with XOR encryption
    175           echo ""
    176           echo "=== Test 3: EXE binary with XOR encryption ==="
    177           ../target/release/myph_v2 -s test_shellcode.raw -f test_xor.exe -e xor
    178 
    179           if [ ! -f "test_xor.exe" ]; then
    180             echo "Error: Binary 'test_xor.exe' was not created"
    181             exit 1
    182           fi
    183 
    184           if file test_xor.exe | grep -q "PE32+ executable.*MS Windows"; then
    185             echo "✓ XOR encrypted binary is a valid PE32+ executable"
    186           else
    187             echo "Error: File is not a Windows PE executable"
    188             exit 1
    189           fi
    190 
    191           # Test 4: EXE binary generation with Blowfish encryption
    192           echo ""
    193           echo "=== Test 4: EXE binary with Blowfish encryption ==="
    194           ../target/release/myph_v2 -s test_shellcode.raw -f test_blowfish.exe -e blowfish
    195 
    196           if [ ! -f "test_blowfish.exe" ]; then
    197             echo "Error: Binary 'test_blowfish.exe' was not created"
    198             exit 1
    199           fi
    200 
    201           if file test_blowfish.exe | grep -q "PE32+ executable.*MS Windows"; then
    202             echo "✓ Blowfish encrypted binary is a valid PE32+ executable"
    203           else
    204             echo "Error: File is not a Windows PE executable"
    205             exit 1
    206           fi
    207 
    208           # Test 4a: EXE binary generation with AES-256 encryption
    209           echo ""
    210           echo "=== Test 4a: EXE binary with AES-256 encryption ==="
    211           ../target/release/myph_v2 -s test_shellcode.raw -f test_aes256.exe -e aes256
    212 
    213           if [ ! -f "test_aes256.exe" ]; then
    214             echo "Error: Binary 'test_aes256.exe' was not created"
    215             exit 1
    216           fi
    217 
    218           if file test_aes256.exe | grep -q "PE32+ executable.*MS Windows"; then
    219             echo "✓ AES-256 encrypted binary is a valid PE32+ executable"
    220           else
    221             echo "Error: File is not a Windows PE executable"
    222             exit 1
    223           fi
    224 
    225           # Test 4b: EXE binary generation with Twofish encryption
    226           echo ""
    227           echo "=== Test 4b: EXE binary with Twofish encryption ==="
    228           ../target/release/myph_v2 -s test_shellcode.raw -f test_twofish.exe -e twofish
    229 
    230           if [ ! -f "test_twofish.exe" ]; then
    231             echo "Error: Binary 'test_twofish.exe' was not created"
    232             exit 1
    233           fi
    234 
    235           if file test_twofish.exe | grep -q "PE32+ executable.*MS Windows"; then
    236             echo "✓ Twofish encrypted binary is a valid PE32+ executable"
    237           else
    238             echo "Error: File is not a Windows PE executable"
    239             exit 1
    240           fi
    241 
    242           # Test 4c: EXE binary generation with Camellia encryption
    243           echo ""
    244           echo "=== Test 4c: EXE binary with Camellia encryption ==="
    245           ../target/release/myph_v2 -s test_shellcode.raw -f test_camellia.exe -e camellia
    246 
    247           if [ ! -f "test_camellia.exe" ]; then
    248             echo "Error: Binary 'test_camellia.exe' was not created"
    249             exit 1
    250           fi
    251 
    252           if file test_camellia.exe | grep -q "PE32+ executable.*MS Windows"; then
    253             echo "✓ Camellia encrypted binary is a valid PE32+ executable"
    254           else
    255             echo "Error: File is not a Windows PE executable"
    256             exit 1
    257           fi
    258 
    259           # Test 5: DLL binary generation with encrypted shellcode
    260           echo ""
    261           echo "=== Test 5: DLL binary with AES encryption ==="
    262           ../target/release/myph_v2 -s test_shellcode.raw -f test_output.dll -b dll -e aes
    263 
    264           # Verify the DLL binary was created
    265           if [ ! -f "test_output.dll" ]; then
    266             echo "Error: DLL 'test_output.dll' was not created"
    267             exit 1
    268           fi
    269 
    270           # Verify it's a Windows PE DLL
    271           if file test_output.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    272             echo "✓ DLL is a Windows PE32+ DLL"
    273           else
    274             echo "Error: File is not a Windows PE DLL"
    275             exit 1
    276           fi
    277 
    278           if file test_output.dll | grep -q "stripped"; then
    279             echo "✓ DLL binary is stripped"
    280           else
    281             echo "Warning: DLL binary may not be stripped"
    282           fi
    283 
    284           DLL_SIZE=$(stat -f%z test_output.dll 2>/dev/null || stat -c%s test_output.dll)
    285           echo "✓ DLL binary size: $DLL_SIZE bytes"
    286 
    287           # Test 6: EXE binary generation with fixed key (AES)
    288           echo ""
    289           echo "=== Test 6: EXE binary with AES encryption and fixed key ==="
    290           ../target/release/myph_v2 -s test_shellcode.raw -f test_aes_fixed_key.exe -e aes -k "MyFixedKey12345"
    291 
    292           if [ ! -f "test_aes_fixed_key.exe" ]; then
    293             echo "Error: Binary 'test_aes_fixed_key.exe' was not created"
    294             exit 1
    295           fi
    296 
    297           if file test_aes_fixed_key.exe | grep -q "PE32+ executable.*MS Windows"; then
    298             echo "✓ AES encrypted binary with fixed key is a valid PE32+ executable"
    299           else
    300             echo "Error: File is not a Windows PE executable"
    301             exit 1
    302           fi
    303 
    304           # Test 7: EXE binary generation with fixed key (XOR)
    305           echo ""
    306           echo "=== Test 7: EXE binary with XOR encryption and fixed key ==="
    307           ../target/release/myph_v2 -s test_shellcode.raw -f test_xor_fixed_key.exe -e xor -k "SecretXORKey"
    308 
    309           if [ ! -f "test_xor_fixed_key.exe" ]; then
    310             echo "Error: Binary 'test_xor_fixed_key.exe' was not created"
    311             exit 1
    312           fi
    313 
    314           if file test_xor_fixed_key.exe | grep -q "PE32+ executable.*MS Windows"; then
    315             echo "✓ XOR encrypted binary with fixed key is a valid PE32+ executable"
    316           else
    317             echo "Error: File is not a Windows PE executable"
    318             exit 1
    319           fi
    320 
    321           # Test 8: Verify encrypted shellcode is embedded (should be larger than raw)
    322           echo ""
    323           echo "=== Test 8: Verify encryption increased embedded data size ==="
    324           # Compare sizes - encrypted should be larger due to IV/nonce
    325           ORIGINAL_SIZE=4
    326           echo "Original shellcode size: $ORIGINAL_SIZE bytes"
    327           echo "Note: Encrypted shellcode in binary should be larger due to IV/nonce/padding"
    328           echo "✓ Encryption is applied before embedding"
    329 
    330           # Test 9: CRT (CreateRemoteThread) technique with notepad.exe
    331           echo ""
    332           echo "=== Test 9: EXE binary with CRT technique ==="
    333           ../target/release/myph_v2 -s test_shellcode.raw -f test_crt.exe -e aes --technique crt --process notepad.exe
    334 
    335           if [ ! -f "test_crt.exe" ]; then
    336             echo "Error: Binary 'test_crt.exe' was not created"
    337             exit 1
    338           fi
    339 
    340           if file test_crt.exe | grep -q "PE32+ executable.*MS Windows"; then
    341             echo "✓ CRT technique binary is a valid PE32+ executable"
    342           else
    343             echo "Error: File is not a Windows PE executable"
    344             exit 1
    345           fi
    346 
    347           # Test 10: CRTx (CreateRemoteThreadEx) technique with cmd.exe
    348           echo ""
    349           echo "=== Test 10: EXE binary with CRTx technique ==="
    350           ../target/release/myph_v2 -s test_shellcode.raw -f test_crtx.exe -e xor --technique crtx --process cmd.exe
    351 
    352           if [ ! -f "test_crtx.exe" ]; then
    353             echo "Error: Binary 'test_crtx.exe' was not created"
    354             exit 1
    355           fi
    356 
    357           if file test_crtx.exe | grep -q "PE32+ executable.*MS Windows"; then
    358             echo "✓ CRTx technique binary is a valid PE32+ executable"
    359           else
    360             echo "Error: File is not a Windows PE executable"
    361             exit 1
    362           fi
    363 
    364           # Test 11: EnumCalendar technique (no process injection)
    365           echo ""
    366           echo "=== Test 11: EXE binary with EnumCalendar technique ==="
    367           ../target/release/myph_v2 -s test_shellcode.raw -f test_enum_calendar.exe -e chacha20 --technique enum-calendar
    368 
    369           if [ ! -f "test_enum_calendar.exe" ]; then
    370             echo "Error: Binary 'test_enum_calendar.exe' was not created"
    371             exit 1
    372           fi
    373 
    374           if file test_enum_calendar.exe | grep -q "PE32+ executable.*MS Windows"; then
    375             echo "✓ EnumCalendar technique binary is a valid PE32+ executable"
    376           else
    377             echo "Error: File is not a Windows PE executable"
    378             exit 1
    379           fi
    380 
    381           # Test 12: DLL with CRT technique
    382           echo ""
    383           echo "=== Test 12: DLL binary with CRT technique ==="
    384           ../target/release/myph_v2 -s test_shellcode.raw -f test_crt.dll -b dll -e aes --technique crt --process explorer.exe
    385 
    386           if [ ! -f "test_crt.dll" ]; then
    387             echo "Error: DLL 'test_crt.dll' was not created"
    388             exit 1
    389           fi
    390 
    391           if file test_crt.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    392             echo "✓ CRT technique DLL is a valid PE32+ DLL"
    393           else
    394             echo "Error: File is not a Windows PE DLL"
    395             exit 1
    396           fi
    397 
    398           # Test 13: CreateFiber technique
    399           echo ""
    400           echo "=== Test 13: EXE binary with CreateFiber technique ==="
    401           ../target/release/myph_v2 -s test_shellcode.raw -f test_create_fiber.exe -e xor --technique create-fiber
    402 
    403           if [ ! -f "test_create_fiber.exe" ]; then
    404             echo "Error: Binary 'test_create_fiber.exe' was not created"
    405             exit 1
    406           fi
    407 
    408           if file test_create_fiber.exe | grep -q "PE32+ executable.*MS Windows"; then
    409             echo "✓ CreateFiber technique binary is a valid PE32+ executable"
    410           else
    411             echo "Error: File is not a Windows PE executable"
    412             exit 1
    413           fi
    414 
    415           # Test 13a: LNK binary generation with AES encryption
    416           echo ""
    417           echo "=== Test 13a: LNK binary with AES encryption ==="
    418           ../target/release/myph_v2 -s test_shellcode.raw -f test_output.lnk -b lnk -e aes --technique create-fiber
    419 
    420           if [ ! -f "test_output.lnk" ]; then
    421             echo "Error: Binary 'test_output.lnk' was not created"
    422             exit 1
    423           fi
    424 
    425           # Verify the file exists and has non-zero size
    426           LNK_SIZE=$(stat -f%z test_output.lnk 2>/dev/null || stat -c%s test_output.lnk)
    427           if [ "$LNK_SIZE" -gt 0 ]; then
    428             echo "✓ LNK file created successfully ($LNK_SIZE bytes)"
    429           else
    430             echo "Error: LNK file is empty"
    431             exit 1
    432           fi
    433 
    434           # Verify it's recognized as a Windows shortcut
    435           if file test_output.lnk | grep -q "MS Windows shortcut"; then
    436             echo "✓ LNK file is recognized as MS Windows shortcut"
    437           else
    438             echo "Warning: file command may not recognize LNK format on this system"
    439           fi
    440 
    441           # Test 13b: LNK binary with XOR encryption
    442           echo ""
    443           echo "=== Test 13b: LNK binary with XOR encryption ==="
    444           ../target/release/myph_v2 -s test_shellcode.raw -f test_xor.lnk -b lnk -e xor --technique syscall
    445 
    446           if [ ! -f "test_xor.lnk" ]; then
    447             echo "Error: Binary 'test_xor.lnk' was not created"
    448             exit 1
    449           fi
    450 
    451           LNK_SIZE=$(stat -f%z test_xor.lnk 2>/dev/null || stat -c%s test_xor.lnk)
    452           if [ "$LNK_SIZE" -gt 0 ]; then
    453             echo "✓ LNK file with XOR encryption created successfully ($LNK_SIZE bytes)"
    454           else
    455             echo "Error: LNK file is empty"
    456             exit 1
    457           fi
    458 
    459           # Test 13c: LNK binary with ChaCha20 encryption
    460           echo ""
    461           echo "=== Test 13c: LNK binary with ChaCha20 encryption ==="
    462           ../target/release/myph_v2 -s test_shellcode.raw -f test_chacha.lnk -b lnk -e chacha20 --technique enum-calendar
    463 
    464           if [ ! -f "test_chacha.lnk" ]; then
    465             echo "Error: Binary 'test_chacha.lnk' was not created"
    466             exit 1
    467           fi
    468 
    469           LNK_SIZE=$(stat -f%z test_chacha.lnk 2>/dev/null || stat -c%s test_chacha.lnk)
    470           if [ "$LNK_SIZE" -gt 0 ]; then
    471             echo "✓ LNK file with ChaCha20 encryption created successfully ($LNK_SIZE bytes)"
    472           else
    473             echo "Error: LNK file is empty"
    474             exit 1
    475           fi
    476 
    477           # Test 14: Etwp technique
    478           echo ""
    479           echo "=== Test 14: EXE binary with Etwp technique ==="
    480           ../target/release/myph_v2 -s test_shellcode.raw -f test_etwp.exe -e aes --technique etwp
    481 
    482           if [ ! -f "test_etwp.exe" ]; then
    483             echo "Error: Binary 'test_etwp.exe' was not created"
    484             exit 1
    485           fi
    486 
    487           if file test_etwp.exe | grep -q "PE32+ executable.*MS Windows"; then
    488             echo "✓ Etwp technique binary is a valid PE32+ executable"
    489           else
    490             echo "Error: File is not a Windows PE executable"
    491             exit 1
    492           fi
    493 
    494           # Test 15: NtCreateThreadEx technique
    495           echo ""
    496           echo "=== Test 15: EXE binary with NtCreateThreadEx technique ==="
    497           ../target/release/myph_v2 -s test_shellcode.raw -f test_nt_create_thread_ex.exe -e chacha20 --technique nt-create-thread-ex
    498 
    499           if [ ! -f "test_nt_create_thread_ex.exe" ]; then
    500             echo "Error: Binary 'test_nt_create_thread_ex.exe' was not created"
    501             exit 1
    502           fi
    503 
    504           if file test_nt_create_thread_ex.exe | grep -q "PE32+ executable.*MS Windows"; then
    505             echo "✓ NtCreateThreadEx technique binary is a valid PE32+ executable"
    506           else
    507             echo "Error: File is not a Windows PE executable"
    508             exit 1
    509           fi
    510 
    511           # Test 16: ProcessHollowing technique
    512           echo ""
    513           echo "=== Test 16: EXE binary with ProcessHollowing technique ==="
    514           ../target/release/myph_v2 -s test_shellcode.raw -f test_process_hollowing.exe -e blowfish --technique process-hollowing --process notepad.exe
    515 
    516           if [ ! -f "test_process_hollowing.exe" ]; then
    517             echo "Error: Binary 'test_process_hollowing.exe' was not created"
    518             exit 1
    519           fi
    520 
    521           if file test_process_hollowing.exe | grep -q "PE32+ executable.*MS Windows"; then
    522             echo "✓ ProcessHollowing technique binary is a valid PE32+ executable"
    523           else
    524             echo "Error: File is not a Windows PE executable"
    525             exit 1
    526           fi
    527 
    528           # Test 17: SetTimer technique
    529           echo ""
    530           echo "=== Test 17: EXE binary with SetTimer technique ==="
    531           ../target/release/myph_v2 -s test_shellcode.raw -f test_set_timer.exe -e xor --technique set-timer
    532 
    533           if [ ! -f "test_set_timer.exe" ]; then
    534             echo "Error: Binary 'test_set_timer.exe' was not created"
    535             exit 1
    536           fi
    537 
    538           if file test_set_timer.exe | grep -q "PE32+ executable.*MS Windows"; then
    539             echo "✓ SetTimer technique binary is a valid PE32+ executable"
    540           else
    541             echo "Error: File is not a Windows PE executable"
    542             exit 1
    543           fi
    544 
    545           # Test 18: Syscall technique
    546           echo ""
    547           echo "=== Test 18: EXE binary with Syscall technique ==="
    548           ../target/release/myph_v2 -s test_shellcode.raw -f test_syscall.exe -e aes --technique syscall
    549 
    550           if [ ! -f "test_syscall.exe" ]; then
    551             echo "Error: Binary 'test_syscall.exe' was not created"
    552             exit 1
    553           fi
    554 
    555           if file test_syscall.exe | grep -q "PE32+ executable.*MS Windows"; then
    556             echo "✓ Syscall technique binary is a valid PE32+ executable"
    557           else
    558             echo "Error: File is not a Windows PE executable"
    559             exit 1
    560           fi
    561 
    562           # Test 19: EnumWindows technique
    563           echo ""
    564           echo "=== Test 19: EXE binary with EnumWindows technique ==="
    565           ../target/release/myph_v2 -s test_shellcode.raw -f test_enum_windows.exe -e chacha20 --technique enum-windows
    566 
    567           if [ ! -f "test_enum_windows.exe" ]; then
    568             echo "Error: Binary 'test_enum_windows.exe' was not created"
    569             exit 1
    570           fi
    571 
    572           if file test_enum_windows.exe | grep -q "PE32+ executable.*MS Windows"; then
    573             echo "✓ EnumWindows technique binary is a valid PE32+ executable"
    574           else
    575             echo "Error: File is not a Windows PE executable"
    576             exit 1
    577           fi
    578 
    579           # Test 20: EnumSystemLocales technique
    580           echo ""
    581           echo "=== Test 20: EXE binary with EnumSystemLocales technique ==="
    582           ../target/release/myph_v2 -s test_shellcode.raw -f test_enum_system_locales.exe -e blowfish --technique enum-system-locales
    583 
    584           if [ ! -f "test_enum_system_locales.exe" ]; then
    585             echo "Error: Binary 'test_enum_system_locales.exe' was not created"
    586             exit 1
    587           fi
    588 
    589           if file test_enum_system_locales.exe | grep -q "PE32+ executable.*MS Windows"; then
    590             echo "✓ EnumSystemLocales technique binary is a valid PE32+ executable"
    591           else
    592             echo "Error: File is not a Windows PE executable"
    593             exit 1
    594           fi
    595 
    596           # Test 21: QueueUserAPC technique
    597           echo ""
    598           echo "=== Test 21: EXE binary with QueueUserAPC technique ==="
    599           ../target/release/myph_v2 -s test_shellcode.raw -f test_queue_user_apc.exe -e xor --technique queue-user-apc
    600 
    601           if [ ! -f "test_queue_user_apc.exe" ]; then
    602             echo "Error: Binary 'test_queue_user_apc.exe' was not created"
    603             exit 1
    604           fi
    605 
    606           if file test_queue_user_apc.exe | grep -q "PE32+ executable.*MS Windows"; then
    607             echo "✓ QueueUserAPC technique binary is a valid PE32+ executable"
    608           else
    609             echo "Error: File is not a Windows PE executable"
    610             exit 1
    611           fi
    612 
    613           # Test 21a: ImageGetDigestStream technique
    614           echo ""
    615           echo "=== Test 21a: EXE binary with ImageGetDigestStream technique ==="
    616           ../target/release/myph_v2 -s test_shellcode.raw -f test_image_get_digest_stream.exe -e aes --technique image-get-digest-stream
    617 
    618           if [ ! -f "test_image_get_digest_stream.exe" ]; then
    619             echo "Error: Binary 'test_image_get_digest_stream.exe' was not created"
    620             exit 1
    621           fi
    622 
    623           if file test_image_get_digest_stream.exe | grep -q "PE32+ executable.*MS Windows"; then
    624             echo "✓ ImageGetDigestStream technique binary is a valid PE32+ executable"
    625           else
    626             echo "Error: File is not a Windows PE executable"
    627             exit 1
    628           fi
    629 
    630           # Test 22: EXE binary with API Hammering
    631           echo ""
    632           echo "=== Test 22: EXE binary with API Hammering (AES encryption) ==="
    633           ../target/release/myph_v2 -s test_shellcode.raw -f test_api_hammering.exe -e aes --with-api-hammering
    634 
    635           if [ ! -f "test_api_hammering.exe" ]; then
    636             echo "Error: Binary 'test_api_hammering.exe' was not created"
    637             exit 1
    638           fi
    639 
    640           if file test_api_hammering.exe | grep -q "PE32+ executable.*MS Windows"; then
    641             echo "✓ API Hammering binary is a valid PE32+ executable"
    642           else
    643             echo "Error: File is not a Windows PE executable"
    644             exit 1
    645           fi
    646 
    647           # Test 23: DLL binary with API Hammering
    648           echo ""
    649           echo "=== Test 23: DLL binary with API Hammering (XOR encryption) ==="
    650           ../target/release/myph_v2 -s test_shellcode.raw -f test_api_hammering.dll -b dll -e xor --with-api-hammering --technique crt --process notepad.exe
    651 
    652           if [ ! -f "test_api_hammering.dll" ]; then
    653             echo "Error: DLL 'test_api_hammering.dll' was not created"
    654             exit 1
    655           fi
    656 
    657           if file test_api_hammering.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    658             echo "✓ API Hammering DLL is a valid PE32+ DLL"
    659           else
    660             echo "Error: File is not a Windows PE DLL"
    661             exit 1
    662           fi
    663 
    664           # Test 24: EXE binary with AMSI Patch
    665           echo ""
    666           echo "=== Test 24: EXE binary with AMSI Patch (AES encryption) ==="
    667           ../target/release/myph_v2 -s test_shellcode.raw -f test_amsi_patch.exe -e aes --with-amsi-patch
    668 
    669           if [ ! -f "test_amsi_patch.exe" ]; then
    670             echo "Error: Binary 'test_amsi_patch.exe' was not created"
    671             exit 1
    672           fi
    673 
    674           if file test_amsi_patch.exe | grep -q "PE32+ executable.*MS Windows"; then
    675             echo "✓ AMSI Patch binary is a valid PE32+ executable"
    676           else
    677             echo "Error: File is not a Windows PE executable"
    678             exit 1
    679           fi
    680 
    681           # Test 25: DLL binary with AMSI Patch
    682           echo ""
    683           echo "=== Test 25: DLL binary with AMSI Patch (XOR encryption) ==="
    684           ../target/release/myph_v2 -s test_shellcode.raw -f test_amsi_patch.dll -b dll -e xor --with-amsi-patch --technique crt --process explorer.exe
    685 
    686           if [ ! -f "test_amsi_patch.dll" ]; then
    687             echo "Error: DLL 'test_amsi_patch.dll' was not created"
    688             exit 1
    689           fi
    690 
    691           if file test_amsi_patch.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    692             echo "✓ AMSI Patch DLL is a valid PE32+ DLL"
    693           else
    694             echo "Error: File is not a Windows PE DLL"
    695             exit 1
    696           fi
    697 
    698           # Test 26: EXE binary with combined features (API Hammering + AMSI Patch)
    699           echo ""
    700           echo "=== Test 26: EXE binary with API Hammering and AMSI Patch ==="
    701           ../target/release/myph_v2 -s test_shellcode.raw -f test_combined.exe -e chacha20 --with-api-hammering --with-amsi-patch --technique crt --process notepad.exe
    702 
    703           if [ ! -f "test_combined.exe" ]; then
    704             echo "Error: Binary 'test_combined.exe' was not created"
    705             exit 1
    706           fi
    707 
    708           if file test_combined.exe | grep -q "PE32+ executable.*MS Windows"; then
    709             echo "✓ Combined features binary is a valid PE32+ executable"
    710           else
    711             echo "Error: File is not a Windows PE executable"
    712             exit 1
    713           fi
    714 
    715           # Test 27: EXE binary with String Encryption
    716           echo ""
    717           echo "=== Test 27: EXE binary with String Encryption (AES encryption) ==="
    718           ../target/release/myph_v2 -s test_shellcode.raw -f test_string_encryption.exe -e aes --with-string-encryption
    719 
    720           if [ ! -f "test_string_encryption.exe" ]; then
    721             echo "Error: Binary 'test_string_encryption.exe' was not created"
    722             exit 1
    723           fi
    724 
    725           if file test_string_encryption.exe | grep -q "PE32+ executable.*MS Windows"; then
    726             echo "✓ String Encryption binary is a valid PE32+ executable"
    727           else
    728             echo "Error: File is not a Windows PE executable"
    729             exit 1
    730           fi
    731 
    732           # Test 28: DLL binary with String Encryption
    733           echo ""
    734           echo "=== Test 28: DLL binary with String Encryption (XOR encryption) ==="
    735           ../target/release/myph_v2 -s test_shellcode.raw -f test_string_encryption.dll -b dll -e xor --with-string-encryption --technique crt --process notepad.exe
    736 
    737           if [ ! -f "test_string_encryption.dll" ]; then
    738             echo "Error: DLL 'test_string_encryption.dll' was not created"
    739             exit 1
    740           fi
    741 
    742           if file test_string_encryption.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    743             echo "✓ String Encryption DLL is a valid PE32+ DLL"
    744           else
    745             echo "Error: File is not a Windows PE DLL"
    746             exit 1
    747           fi
    748 
    749           # Test 29: EXE binary with Dynamic Function Resolver
    750           echo ""
    751           echo "=== Test 29: EXE binary with Dynamic Function Resolver (XOR encryption) ==="
    752           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_resolver.exe -e xor --with-dynamic-function-resolver --technique create-fiber
    753 
    754           if [ ! -f "test_dynamic_resolver.exe" ]; then
    755             echo "Error: Binary 'test_dynamic_resolver.exe' was not created"
    756             exit 1
    757           fi
    758 
    759           if file test_dynamic_resolver.exe | grep -q "PE32+ executable.*MS Windows"; then
    760             echo "✓ Dynamic Function Resolver binary is a valid PE32+ executable"
    761           else
    762             echo "Error: File is not a Windows PE executable"
    763             exit 1
    764           fi
    765 
    766           # Test 30: DLL binary with Dynamic Function Resolver
    767           echo ""
    768           echo "=== Test 30: DLL binary with Dynamic Function Resolver (AES encryption) ==="
    769           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_resolver.dll -b dll -e aes --with-dynamic-function-resolver --technique crt --process notepad.exe
    770 
    771           if [ ! -f "test_dynamic_resolver.dll" ]; then
    772             echo "Error: DLL 'test_dynamic_resolver.dll' was not created"
    773             exit 1
    774           fi
    775 
    776           if file test_dynamic_resolver.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    777             echo "✓ Dynamic Function Resolver DLL is a valid PE32+ DLL"
    778           else
    779             echo "Error: File is not a Windows PE DLL"
    780             exit 1
    781           fi
    782 
    783           # Test 31: Multiple techniques with Dynamic Function Resolver
    784           echo ""
    785           echo "=== Test 31: Testing Dynamic Function Resolver with multiple techniques ==="
    786 
    787           echo "Testing EnumCalendar technique..."
    788           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_enum.exe -e xor --with-dynamic-function-resolver --technique enum-calendar
    789           if [ -f "test_dynamic_enum.exe" ] && file test_dynamic_enum.exe | grep -q "PE32+ executable"; then
    790             echo "✓ EnumCalendar with dynamic resolver works"
    791           fi
    792 
    793           echo "Testing SetTimer technique..."
    794           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_timer.exe -e aes --with-dynamic-function-resolver --technique set-timer
    795           if [ -f "test_dynamic_timer.exe" ] && file test_dynamic_timer.exe | grep -q "PE32+ executable"; then
    796             echo "✓ SetTimer with dynamic resolver works"
    797           fi
    798 
    799           echo "Testing Syscall technique..."
    800           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_syscall.exe -e chacha20 --with-dynamic-function-resolver --technique syscall
    801           if [ -f "test_dynamic_syscall.exe" ] && file test_dynamic_syscall.exe | grep -q "PE32+ executable"; then
    802             echo "✓ Syscall with dynamic resolver works"
    803           fi
    804 
    805           echo "Testing Etwp technique..."
    806           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_etwp.exe -e blowfish --with-dynamic-function-resolver --technique etwp
    807           if [ -f "test_dynamic_etwp.exe" ] && file test_dynamic_etwp.exe | grep -q "PE32+ executable"; then
    808             echo "✓ Etwp with dynamic resolver works"
    809           fi
    810 
    811           echo "Testing NtCreateThreadEx technique..."
    812           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_nt.exe -e xor --with-dynamic-function-resolver --technique nt-create-thread-ex
    813           if [ -f "test_dynamic_nt.exe" ] && file test_dynamic_nt.exe | grep -q "PE32+ executable"; then
    814             echo "✓ NtCreateThreadEx with dynamic resolver works"
    815           fi
    816 
    817           echo "Testing CRTx technique..."
    818           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_crtx.exe -e aes --with-dynamic-function-resolver --technique crtx --process cmd.exe
    819           if [ -f "test_dynamic_crtx.exe" ] && file test_dynamic_crtx.exe | grep -q "PE32+ executable"; then
    820             echo "✓ CRTx with dynamic resolver works"
    821           fi
    822 
    823           echo "Testing ProcessHollowing technique..."
    824           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_hollowing.exe -e xor --with-dynamic-function-resolver --technique process-hollowing --process notepad.exe
    825           if [ -f "test_dynamic_hollowing.exe" ] && file test_dynamic_hollowing.exe | grep -q "PE32+ executable"; then
    826             echo "✓ ProcessHollowing with dynamic resolver works"
    827           fi
    828 
    829           echo "Testing EnumWindows technique..."
    830           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_enum_windows.exe -e aes --with-dynamic-function-resolver --technique enum-windows
    831           if [ -f "test_dynamic_enum_windows.exe" ] && file test_dynamic_enum_windows.exe | grep -q "PE32+ executable"; then
    832             echo "✓ EnumWindows with dynamic resolver works"
    833           fi
    834 
    835           echo "Testing EnumSystemLocales technique..."
    836           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_enum_locales.exe -e chacha20 --with-dynamic-function-resolver --technique enum-system-locales
    837           if [ -f "test_dynamic_enum_locales.exe" ] && file test_dynamic_enum_locales.exe | grep -q "PE32+ executable"; then
    838             echo "✓ EnumSystemLocales with dynamic resolver works"
    839           fi
    840 
    841           echo "Testing QueueUserAPC technique..."
    842           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_queue_apc.exe -e blowfish --with-dynamic-function-resolver --technique queue-user-apc
    843           if [ -f "test_dynamic_queue_apc.exe" ] && file test_dynamic_queue_apc.exe | grep -q "PE32+ executable"; then
    844             echo "✓ QueueUserAPC with dynamic resolver works"
    845           fi
    846 
    847           echo "Testing ImageGetDigestStream technique..."
    848           ../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
    849           if [ -f "test_dynamic_image_digest.exe" ] && file test_dynamic_image_digest.exe | grep -q "PE32+ executable"; then
    850             echo "✓ ImageGetDigestStream with dynamic resolver works"
    851           fi
    852 
    853           # Test 32: Fairy-Law technique (privilege escalation)
    854           echo ""
    855           echo "=== Test 32: EXE binary with Fairy-Law technique ==="
    856           ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law.exe -e aes --technique fairy-law
    857 
    858           if [ ! -f "test_fairy_law.exe" ]; then
    859             echo "Error: Binary 'test_fairy_law.exe' was not created"
    860             exit 1
    861           fi
    862 
    863           if file test_fairy_law.exe | grep -q "PE32+ executable.*MS Windows"; then
    864             echo "✓ Fairy-Law technique binary is a valid PE32+ executable"
    865           else
    866             echo "Error: File is not a Windows PE executable"
    867             exit 1
    868           fi
    869 
    870           # Test 33: Fairy-Law with ChaCha20 encryption
    871           echo ""
    872           echo "=== Test 33: Fairy-Law with ChaCha20 encryption ==="
    873           ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_chacha.exe -e chacha20 --technique fairy-law
    874 
    875           if [ ! -f "test_fairy_law_chacha.exe" ]; then
    876             echo "Error: Binary 'test_fairy_law_chacha.exe' was not created"
    877             exit 1
    878           fi
    879 
    880           if file test_fairy_law_chacha.exe | grep -q "PE32+ executable.*MS Windows"; then
    881             echo "✓ Fairy-Law with ChaCha20 binary is a valid PE32+ executable"
    882           else
    883             echo "Error: File is not a Windows PE executable"
    884             exit 1
    885           fi
    886 
    887           # Test 34: Fairy-Law with Dynamic Function Resolver
    888           echo ""
    889           echo "=== Test 34: Fairy-Law with Dynamic Function Resolver ==="
    890           ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_dynamic.exe -e xor --with-dynamic-function-resolver --technique fairy-law
    891 
    892           if [ ! -f "test_fairy_law_dynamic.exe" ]; then
    893             echo "Error: Binary 'test_fairy_law_dynamic.exe' was not created"
    894             exit 1
    895           fi
    896 
    897           if file test_fairy_law_dynamic.exe | grep -q "PE32+ executable.*MS Windows"; then
    898             echo "✓ Fairy-Law with dynamic resolver is a valid PE32+ executable"
    899           else
    900             echo "Error: File is not a Windows PE executable"
    901             exit 1
    902           fi
    903 
    904           # Test 35: Fairy-Law with AMSI Patch
    905           echo ""
    906           echo "=== Test 35: Fairy-Law with AMSI Patch ==="
    907           ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law_amsi.exe -e blowfish --technique fairy-law --with-amsi-patch
    908 
    909           if [ ! -f "test_fairy_law_amsi.exe" ]; then
    910             echo "Error: Binary 'test_fairy_law_amsi.exe' was not created"
    911             exit 1
    912           fi
    913 
    914           if file test_fairy_law_amsi.exe | grep -q "PE32+ executable.*MS Windows"; then
    915             echo "✓ Fairy-Law with AMSI Patch is a valid PE32+ executable"
    916           else
    917             echo "Error: File is not a Windows PE executable"
    918             exit 1
    919           fi
    920 
    921           # Test 36: Fairy-Law with combined evasion features
    922           echo ""
    923           echo "=== Test 36: Fairy-Law with API Hammering and String Encryption ==="
    924           ../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
    925 
    926           if [ ! -f "test_fairy_law_combined.exe" ]; then
    927             echo "Error: Binary 'test_fairy_law_combined.exe' was not created"
    928             exit 1
    929           fi
    930 
    931           if file test_fairy_law_combined.exe | grep -q "PE32+ executable.*MS Windows"; then
    932             echo "✓ Fairy-Law with combined features is a valid PE32+ executable"
    933           else
    934             echo "Error: File is not a Windows PE executable"
    935             exit 1
    936           fi
    937 
    938           # Test 37: Fairy-Law DLL generation
    939           echo ""
    940           echo "=== Test 37: DLL binary with Fairy-Law technique ==="
    941           ../target/release/myph_v2 -s test_shellcode.raw -f test_fairy_law.dll -b dll -e twofish --technique fairy-law
    942 
    943           if [ ! -f "test_fairy_law.dll" ]; then
    944             echo "Error: DLL 'test_fairy_law.dll' was not created"
    945             exit 1
    946           fi
    947 
    948           if file test_fairy_law.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    949             echo "✓ Fairy-Law technique DLL is a valid PE32+ DLL"
    950           else
    951             echo "Error: File is not a Windows PE DLL"
    952             exit 1
    953           fi
    954 
    955           echo ""
    956           echo "Testing Fairy-Law technique..."
    957           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynamic_fairy_law.exe -e camellia --with-dynamic-function-resolver --technique fairy-law
    958           if [ -f "test_dynamic_fairy_law.exe" ] && file test_dynamic_fairy_law.exe | grep -q "PE32+ executable"; then
    959             echo "✓ Fairy-Law with dynamic resolver works"
    960           fi
    961 
    962           # Test: Low-resource mode
    963           echo ""
    964           echo "=== Test: EXE binary with low-resource mode ==="
    965           ../target/release/myph_v2 -s test_shellcode.raw -f test_low_resources.exe -e aes --technique create-fiber --low-resources
    966 
    967           if [ ! -f "test_low_resources.exe" ]; then
    968             echo "Error: Binary 'test_low_resources.exe' was not created"
    969             exit 1
    970           fi
    971 
    972           if file test_low_resources.exe | grep -q "PE32+ executable.*MS Windows"; then
    973             echo "✓ Low-resource mode binary is a valid PE32+ executable"
    974           else
    975             echo "Error: File is not a Windows PE executable"
    976             exit 1
    977           fi
    978 
    979           # Test: Low-resource mode with DLL
    980           echo ""
    981           echo "=== Test: DLL binary with low-resource mode ==="
    982           ../target/release/myph_v2 -s test_shellcode.raw -f test_low_resources.dll -b dll -e xor --technique crt --process notepad.exe --low-resources
    983 
    984           if [ ! -f "test_low_resources.dll" ]; then
    985             echo "Error: DLL 'test_low_resources.dll' was not created"
    986             exit 1
    987           fi
    988 
    989           if file test_low_resources.dll | grep -q "PE32+ executable.*DLL.*MS Windows"; then
    990             echo "✓ Low-resource mode DLL is a valid PE32+ DLL"
    991           else
    992             echo "Error: File is not a Windows PE DLL"
    993             exit 1
    994           fi
    995 
    996           echo ""
    997           echo "✓ All end-to-end tests passed!"
    998 
    999           # Test 32: Module Stomping technique
   1000           echo ""
   1001           echo "=== Test 32: EXE binary with Module Stomping technique ==="
   1002           ../target/release/myph_v2 -s test_shellcode.raw -f test_module_stomping.exe -e aes --technique module-stomping
   1003 
   1004           if [ ! -f "test_module_stomping.exe" ]; then
   1005             echo "Error: Binary 'test_module_stomping.exe' was not created"
   1006             exit 1
   1007           fi
   1008 
   1009           if file test_module_stomping.exe | grep -q "PE32+ executable.*MS Windows"; then
   1010             echo "✓ Module Stomping technique binary is a valid PE32+ executable"
   1011           else
   1012             echo "Error: File is not a Windows PE executable"
   1013             exit 1
   1014           fi
   1015 
   1016           # Test 33: Thread Hijacking technique
   1017           echo ""
   1018           echo "=== Test 33: EXE binary with Thread Hijacking technique ==="
   1019           ../target/release/myph_v2 -s test_shellcode.raw -f test_thread_hijacking.exe -e chacha20 --technique thread-hijacking --process notepad.exe
   1020 
   1021           if [ ! -f "test_thread_hijacking.exe" ]; then
   1022             echo "Error: Binary 'test_thread_hijacking.exe' was not created"
   1023             exit 1
   1024           fi
   1025 
   1026           if file test_thread_hijacking.exe | grep -q "PE32+ executable.*MS Windows"; then
   1027             echo "✓ Thread Hijacking technique binary is a valid PE32+ executable"
   1028           else
   1029             echo "Error: File is not a Windows PE executable"
   1030             exit 1
   1031           fi
   1032 
   1033           # Test 34: Early Bird APC technique
   1034           echo ""
   1035           echo "=== Test 34: EXE binary with Early Bird APC technique ==="
   1036           ../target/release/myph_v2 -s test_shellcode.raw -f test_early_bird.exe -e xor --technique early-bird --process cmd.exe
   1037 
   1038           if [ ! -f "test_early_bird.exe" ]; then
   1039             echo "Error: Binary 'test_early_bird.exe' was not created"
   1040             exit 1
   1041           fi
   1042 
   1043           if file test_early_bird.exe | grep -q "PE32+ executable.*MS Windows"; then
   1044             echo "✓ Early Bird APC technique binary is a valid PE32+ executable"
   1045           else
   1046             echo "Error: File is not a Windows PE executable"
   1047             exit 1
   1048           fi
   1049 
   1050           # Test 35: Anti-VM evasion
   1051           echo ""
   1052           echo "=== Test 35: EXE binary with Anti-VM evasion ==="
   1053           ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_vm.exe -e aes --technique create-fiber --with-anti-vm
   1054 
   1055           if [ ! -f "test_anti_vm.exe" ]; then
   1056             echo "Error: Binary 'test_anti_vm.exe' was not created"
   1057             exit 1
   1058           fi
   1059 
   1060           if file test_anti_vm.exe | grep -q "PE32+ executable.*MS Windows"; then
   1061             echo "✓ Anti-VM evasion binary is a valid PE32+ executable"
   1062           else
   1063             echo "Error: File is not a Windows PE executable"
   1064             exit 1
   1065           fi
   1066 
   1067           # Test 36: Anti-Sandbox evasion
   1068           echo ""
   1069           echo "=== Test 36: EXE binary with Anti-Sandbox evasion ==="
   1070           ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_sandbox.exe -e chacha20 --technique syscall --with-anti-sandbox
   1071 
   1072           if [ ! -f "test_anti_sandbox.exe" ]; then
   1073             echo "Error: Binary 'test_anti_sandbox.exe' was not created"
   1074             exit 1
   1075           fi
   1076 
   1077           if file test_anti_sandbox.exe | grep -q "PE32+ executable.*MS Windows"; then
   1078             echo "✓ Anti-Sandbox evasion binary is a valid PE32+ executable"
   1079           else
   1080             echo "Error: File is not a Windows PE executable"
   1081             exit 1
   1082           fi
   1083 
   1084           # Test 37: Anti-Debugger evasion
   1085           echo ""
   1086           echo "=== Test 37: EXE binary with Anti-Debugger evasion ==="
   1087           ../target/release/myph_v2 -s test_shellcode.raw -f test_anti_debugger.exe -e xor --technique enum-calendar --with-anti-debugger
   1088 
   1089           if [ ! -f "test_anti_debugger.exe" ]; then
   1090             echo "Error: Binary 'test_anti_debugger.exe' was not created"
   1091             exit 1
   1092           fi
   1093 
   1094           if file test_anti_debugger.exe | grep -q "PE32+ executable.*MS Windows"; then
   1095             echo "✓ Anti-Debugger evasion binary is a valid PE32+ executable"
   1096           else
   1097             echo "Error: File is not a Windows PE executable"
   1098             exit 1
   1099           fi
   1100 
   1101           # Test 38: Combined evasion features
   1102           echo ""
   1103           echo "=== Test 38: EXE binary with combined evasion features ==="
   1104           ../target/release/myph_v2 -s test_shellcode.raw -f test_all_evasion.exe -e aes --technique module-stomping \
   1105             --with-anti-vm --with-anti-sandbox --with-anti-debugger --with-amsi-patch --with-string-encryption
   1106 
   1107           if [ ! -f "test_all_evasion.exe" ]; then
   1108             echo "Error: Binary 'test_all_evasion.exe' was not created"
   1109             exit 1
   1110           fi
   1111 
   1112           if file test_all_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
   1113             echo "✓ Combined evasion features binary is a valid PE32+ executable"
   1114           else
   1115             echo "Error: File is not a Windows PE executable"
   1116             exit 1
   1117           fi
   1118 
   1119           # Test 39: Call stack spoofing alone
   1120           echo ""
   1121           echo "=== Test 39: EXE binary with call stack spoofing ==="
   1122           ../target/release/myph_v2 -s test_shellcode.raw -f test_callstack_spoofing.exe -e xor --technique create-fiber --with-callstack-spoofing
   1123 
   1124           if [ ! -f "test_callstack_spoofing.exe" ]; then
   1125             echo "Error: Binary 'test_callstack_spoofing.exe' was not created"
   1126             exit 1
   1127           fi
   1128 
   1129           if file test_callstack_spoofing.exe | grep -q "PE32+ executable.*MS Windows"; then
   1130             echo "✓ Call stack spoofing binary is a valid PE32+ executable"
   1131           else
   1132             echo "Error: File is not a Windows PE executable"
   1133             exit 1
   1134           fi
   1135 
   1136           # Test 40: Call stack spoofing with dynamic resolver
   1137           echo ""
   1138           echo "=== Test 40: EXE binary with call stack spoofing and dynamic resolver ==="
   1139           ../target/release/myph_v2 -s test_shellcode.raw -f test_callstack_dynamic.exe -e aes --technique syscall \
   1140             --with-callstack-spoofing --with-dynamic-function-resolver
   1141 
   1142           if [ ! -f "test_callstack_dynamic.exe" ]; then
   1143             echo "Error: Binary 'test_callstack_dynamic.exe' was not created"
   1144             exit 1
   1145           fi
   1146 
   1147           if file test_callstack_dynamic.exe | grep -q "PE32+ executable.*MS Windows"; then
   1148             echo "✓ Call stack spoofing with dynamic resolver binary is a valid PE32+ executable"
   1149           else
   1150             echo "Error: File is not a Windows PE executable"
   1151             exit 1
   1152           fi
   1153 
   1154           # Test 41: Maximum evasion with call stack spoofing
   1155           echo ""
   1156           echo "=== Test 41: EXE binary with maximum evasion including call stack spoofing ==="
   1157           ../target/release/myph_v2 -s test_shellcode.raw -f test_max_evasion.exe -e chacha20 --technique early-bird --process cmd.exe \
   1158             --with-callstack-spoofing --with-dynamic-function-resolver --with-amsi-patch \
   1159             --with-anti-vm --with-anti-sandbox --with-anti-debugger
   1160 
   1161           if [ ! -f "test_max_evasion.exe" ]; then
   1162             echo "Error: Binary 'test_max_evasion.exe' was not created"
   1163             exit 1
   1164           fi
   1165 
   1166           if file test_max_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
   1167             echo "✓ Maximum evasion with call stack spoofing binary is a valid PE32+ executable"
   1168           else
   1169             echo "Error: File is not a Windows PE executable"
   1170             exit 1
   1171           fi
   1172 
   1173           # Test 29: AMSI Patch with String Encryption
   1174           echo ""
   1175           echo "=== Test 29: AMSI Patch with String Encryption ==="
   1176           ../target/release/myph_v2 -s test_shellcode.raw -f test_amsi_string_enc.exe -e aes --with-amsi-patch --with-string-encryption
   1177 
   1178           if [ ! -f "test_amsi_string_enc.exe" ]; then
   1179             echo "Error: Binary 'test_amsi_string_enc.exe' was not created"
   1180             exit 1
   1181           fi
   1182 
   1183           if file test_amsi_string_enc.exe | grep -q "PE32+ executable.*MS Windows"; then
   1184             echo "✓ AMSI Patch with String Encryption binary is a valid PE32+ executable"
   1185           else
   1186             echo "Error: File is not a Windows PE executable"
   1187             exit 1
   1188           fi
   1189 
   1190           # Test 30: AMSI Patch with Dynamic Function Resolver
   1191           echo ""
   1192           echo "=== Test 30: AMSI Patch with Dynamic Function Resolver ==="
   1193           ../target/release/myph_v2 -s test_shellcode.raw -f test_amsi_dynamic.exe -e xor --with-amsi-patch --with-dynamic-function-resolver --technique create-fiber
   1194 
   1195           if [ ! -f "test_amsi_dynamic.exe" ]; then
   1196             echo "Error: Binary 'test_amsi_dynamic.exe' was not created"
   1197             exit 1
   1198           fi
   1199 
   1200           if file test_amsi_dynamic.exe | grep -q "PE32+ executable.*MS Windows"; then
   1201             echo "✓ AMSI Patch with Dynamic Function Resolver binary is a valid PE32+ executable"
   1202           else
   1203             echo "Error: File is not a Windows PE executable"
   1204             exit 1
   1205           fi
   1206 
   1207           # Test 31: AMSI Patch with both String Encryption and Dynamic Function Resolver
   1208           echo ""
   1209           echo "=== Test 31: AMSI Patch with String Encryption and Dynamic Function Resolver ==="
   1210           ../target/release/myph_v2 -s test_shellcode.raw -f test_amsi_both.exe -e chacha20 --with-amsi-patch --with-string-encryption --with-dynamic-function-resolver --technique syscall
   1211 
   1212           if [ ! -f "test_amsi_both.exe" ]; then
   1213             echo "Error: Binary 'test_amsi_both.exe' was not created"
   1214             exit 1
   1215           fi
   1216 
   1217           if file test_amsi_both.exe | grep -q "PE32+ executable.*MS Windows"; then
   1218             echo "✓ AMSI Patch with both String Encryption and Dynamic Function Resolver is a valid PE32+ executable"
   1219           else
   1220             echo "Error: File is not a Windows PE executable"
   1221             exit 1
   1222           fi
   1223 
   1224           echo ""
   1225           echo "✓ All end-to-end tests passed!"
   1226 
   1227           # Test 39: Dynamic Function Resolver with VirtualAlloc (kernel32.dll)
   1228           echo ""
   1229           echo "=== Test 39: Dynamic Function Resolver with VirtualAlloc ==="
   1230           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_virtualalloc.exe -e aes --technique create-fiber --with-dynamic-function-resolver
   1231 
   1232           if [ ! -f "test_dynres_virtualalloc.exe" ]; then
   1233             echo "Error: Binary 'test_dynres_virtualalloc.exe' was not created"
   1234             exit 1
   1235           fi
   1236 
   1237           if file test_dynres_virtualalloc.exe | grep -q "PE32+ executable.*MS Windows"; then
   1238             echo "✓ Dynamic resolver with VirtualAlloc (kernel32.dll) works"
   1239           else
   1240             echo "Error: File is not a Windows PE executable"
   1241             exit 1
   1242           fi
   1243 
   1244           # Verify no static imports for key APIs
   1245           if ! strings test_dynres_virtualalloc.exe | grep -q "VirtualAlloc"; then
   1246             echo "✓ VirtualAlloc not found in static strings (dynamically resolved)"
   1247           else
   1248             echo "⚠ Warning: VirtualAlloc found in binary strings"
   1249           fi
   1250 
   1251           # Test 40: Dynamic Function Resolver with CreateProcess (kernel32.dll)
   1252           echo ""
   1253           echo "=== Test 40: Dynamic Function Resolver with CreateProcess ==="
   1254           ../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
   1255 
   1256           if [ ! -f "test_dynres_createprocess.exe" ]; then
   1257             echo "Error: Binary 'test_dynres_createprocess.exe' was not created"
   1258             exit 1
   1259           fi
   1260 
   1261           if file test_dynres_createprocess.exe | grep -q "PE32+ executable.*MS Windows"; then
   1262             echo "✓ Dynamic resolver with CreateProcess works"
   1263           else
   1264             echo "Error: File is not a Windows PE executable"
   1265             exit 1
   1266           fi
   1267 
   1268           # Test 41: Dynamic Function Resolver with QueueUserAPC (kernel32.dll)
   1269           echo ""
   1270           echo "=== Test 41: Dynamic Function Resolver with QueueUserAPC ==="
   1271           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_queueapc.exe -e xor --technique queue-user-apc --with-dynamic-function-resolver
   1272 
   1273           if [ ! -f "test_dynres_queueapc.exe" ]; then
   1274             echo "Error: Binary 'test_dynres_queueapc.exe' was not created"
   1275             exit 1
   1276           fi
   1277 
   1278           if file test_dynres_queueapc.exe | grep -q "PE32+ executable.*MS Windows"; then
   1279             echo "✓ Dynamic resolver with QueueUserAPC works"
   1280           else
   1281             echo "Error: File is not a Windows PE executable"
   1282             exit 1
   1283           fi
   1284 
   1285           # Test 42: Dynamic Function Resolver with NtCreateThreadEx (ntdll.dll)
   1286           echo ""
   1287           echo "=== Test 42: Dynamic Function Resolver with NtCreateThreadEx ==="
   1288           ../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
   1289 
   1290           if [ ! -f "test_dynres_ntapi.exe" ]; then
   1291             echo "Error: Binary 'test_dynres_ntapi.exe' was not created"
   1292             exit 1
   1293           fi
   1294 
   1295           if file test_dynres_ntapi.exe | grep -q "PE32+ executable.*MS Windows"; then
   1296             echo "✓ Dynamic resolver with NtCreateThreadEx (ntdll.dll) works"
   1297           else
   1298             echo "Error: File is not a Windows PE executable"
   1299             exit 1
   1300           fi
   1301 
   1302           # Test 43: Dynamic Function Resolver + String Encryption + AMSI Patch
   1303           echo ""
   1304           echo "=== Test 43: Dynamic Resolver with String Encryption and AMSI Patch ==="
   1305           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_full_evasion.exe -e aes --technique create-fiber \
   1306             --with-dynamic-function-resolver --with-string-encryption --with-amsi-patch
   1307 
   1308           if [ ! -f "test_dynres_full_evasion.exe" ]; then
   1309             echo "Error: Binary 'test_dynres_full_evasion.exe' was not created"
   1310             exit 1
   1311           fi
   1312 
   1313           if file test_dynres_full_evasion.exe | grep -q "PE32+ executable.*MS Windows"; then
   1314             echo "✓ Dynamic resolver with full evasion (string encryption + AMSI patch) works"
   1315           else
   1316             echo "Error: File is not a Windows PE executable"
   1317             exit 1
   1318           fi
   1319 
   1320           # Verify encrypted function names
   1321           if ! strings test_dynres_full_evasion.exe | grep -q "AmsiScanBuffer"; then
   1322             echo "✓ AmsiScanBuffer not found in static strings (encrypted)"
   1323           else
   1324             echo "⚠ Warning: AmsiScanBuffer found in binary strings"
   1325           fi
   1326 
   1327           # Test 44: Dynamic Function Resolver with all new techniques
   1328           echo ""
   1329           echo "=== Test 44: Dynamic Resolver with ModuleStomping ==="
   1330           ../target/release/myph_v2 -s test_shellcode.raw -f test_dynres_module_stomping.exe -e xor --technique module-stomping --with-dynamic-function-resolver
   1331 
   1332           if [ ! -f "test_dynres_module_stomping.exe" ]; then
   1333             echo "Error: Binary 'test_dynres_module_stomping.exe' was not created"
   1334             exit 1
   1335           fi
   1336 
   1337           if file test_dynres_module_stomping.exe | grep -q "PE32+ executable.*MS Windows"; then
   1338             echo "✓ Dynamic resolver with ModuleStomping works"
   1339           else
   1340             echo "Error: File is not a Windows PE executable"
   1341             exit 1
   1342           fi
   1343 
   1344           echo ""
   1345           echo "=== Test 45: Dynamic Resolver with EarlyBird ==="
   1346           ../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
   1347 
   1348           if [ ! -f "test_dynres_early_bird.exe" ]; then
   1349             echo "Error: Binary 'test_dynres_early_bird.exe' was not created"
   1350             exit 1
   1351           fi
   1352 
   1353           if file test_dynres_early_bird.exe | grep -q "PE32+ executable.*MS Windows"; then
   1354             echo "✓ Dynamic resolver with EarlyBird works"
   1355           else
   1356             echo "Error: File is not a Windows PE executable"
   1357             exit 1
   1358           fi
   1359 
   1360           echo "✓ Tested 7 encryption algorithms (AES-128, AES-256, ChaCha20, Twofish, Camellia, Blowfish, XOR)"
   1361           echo "✓ Tested 3 binary formats (EXE, DLL, LNK)"
   1362           echo "✓ Tested LNK format with 3 encryption methods (AES, XOR, ChaCha20) on Linux"
   1363           echo "✓ Tested fixed key encryption (AES, XOR)"
   1364           echo "✓ Tested 17 techniques (CRT, CRTx, EnumCalendar, EnumWindows, EnumSystemLocales, ImageGetDigestStream, CreateFiber, Etwp, FairyLaw, NtCreateThreadEx, ProcessHollowing, QueueUserAPC, SetTimer, Syscall, ModuleStomping, ThreadHijacking, EarlyBird)"
   1365           echo "✓ Tested API Hammering feature"
   1366           echo "✓ Tested AMSI Patch feature"
   1367           echo "✓ Tested String Encryption feature"
   1368           echo "✓ Tested Dynamic Function Resolver feature"
   1369           echo "✓ Tested Anti-VM evasion"
   1370           echo "✓ Tested Anti-Sandbox evasion"
   1371           echo "✓ Tested Anti-Debugger evasion"
   1372           echo "✓ Tested Dynamic Function Resolver with kernel32.dll APIs (VirtualAlloc, CreateFileW, CloseHandle, CreateProcess, QueueUserAPC)"
   1373           echo "✓ Tested Dynamic Function Resolver with ntdll.dll APIs (NtCreateThreadEx, RtlCopyMemory)"
   1374           echo "✓ Tested Dynamic Function Resolver with imagehlp.dll APIs (ImageGetDigestStream)"
   1375           echo "✓ Tested Dynamic Resolver with all techniques including ImageGetDigestStream"
   1376           echo "✓ Verified no static API imports (strings check)"
   1377           echo "✓ Tested combined features (API Hammering + AMSI Patch)"
   1378           echo "✓ Tested String Encryption feature"
   1379           echo "✓ Tested Dynamic Function Resolver feature"
   1380           echo "✓ Tested AMSI Patch with String Encryption"
   1381           echo "✓ Tested AMSI Patch with Dynamic Function Resolver"
   1382           echo "✓ Tested AMSI Patch with both String Encryption and Dynamic Function Resolver"
   1383           echo "✓ Tested Dynamic Function Resolver with all 13 techniques"
   1384 
   1385   fmt:
   1386     name: Format
   1387     runs-on: ubuntu-latest
   1388     steps:
   1389       - name: Checkout code
   1390         uses: actions/checkout@v4
   1391 
   1392       - name: Install Rust toolchain
   1393         uses: dtolnay/rust-toolchain@stable
   1394         with:
   1395           toolchain: ${{ env.RUST_VERSION }}
   1396           components: rustfmt
   1397 
   1398       - name: Check formatting
   1399         run: cargo fmt -- --check
   1400 
   1401   clippy:
   1402     name: Clippy
   1403     runs-on: ubuntu-latest
   1404     steps:
   1405       - name: Checkout code
   1406         uses: actions/checkout@v4
   1407 
   1408       - name: Install Rust toolchain
   1409         uses: dtolnay/rust-toolchain@stable
   1410         with:
   1411           toolchain: ${{ env.RUST_VERSION }}
   1412           components: clippy
   1413 
   1414       - name: Cache cargo registry
   1415         uses: actions/cache@v4
   1416         with:
   1417           path: ~/.cargo/registry
   1418           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
   1419 
   1420       - name: Cache cargo index
   1421         uses: actions/cache@v4
   1422         with:
   1423           path: ~/.cargo/git
   1424           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
   1425 
   1426       - name: Cache cargo build
   1427         uses: actions/cache@v4
   1428         with:
   1429           path: target
   1430           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
   1431 
   1432       - name: Run clippy
   1433         run: cargo clippy --all-targets --all-features -- -D warnings
   1434 
   1435   build:
   1436     name: Build
   1437     runs-on: ubuntu-latest
   1438     steps:
   1439       - name: Checkout code
   1440         uses: actions/checkout@v4
   1441 
   1442       - name: Install Rust toolchain
   1443         uses: dtolnay/rust-toolchain@stable
   1444         with:
   1445           toolchain: ${{ env.RUST_VERSION }}
   1446 
   1447       - name: Cache cargo registry
   1448         uses: actions/cache@v4
   1449         with:
   1450           path: ~/.cargo/registry
   1451           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
   1452 
   1453       - name: Cache cargo index
   1454         uses: actions/cache@v4
   1455         with:
   1456           path: ~/.cargo/git
   1457           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
   1458 
   1459       - name: Cache cargo build
   1460         uses: actions/cache@v4
   1461         with:
   1462           path: target
   1463           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
   1464 
   1465       - name: Build project
   1466         run: cargo build --release --verbose
   1467 
   1468   windows-integration-test:
   1469     name: Windows Integration Tests
   1470     runs-on: windows-latest
   1471     steps:
   1472       - name: Checkout code
   1473         uses: actions/checkout@v4
   1474 
   1475       - name: Install Rust toolchain
   1476         uses: dtolnay/rust-toolchain@stable
   1477         with:
   1478           toolchain: ${{ env.RUST_VERSION }}
   1479           targets: x86_64-pc-windows-gnu
   1480 
   1481       - name: Install MinGW-w64
   1482         run: choco install mingw -y
   1483 
   1484       - name: Cache cargo registry
   1485         uses: actions/cache@v4
   1486         with:
   1487           path: ~/.cargo/registry
   1488           key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
   1489 
   1490       - name: Cache cargo index
   1491         uses: actions/cache@v4
   1492         with:
   1493           path: ~/.cargo/git
   1494           key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
   1495 
   1496       - name: Cache cargo build
   1497         uses: actions/cache@v4
   1498         with:
   1499           path: target
   1500           key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock', 'build.rs', 'src/internals/templates/**/*.rs') }}
   1501 
   1502       - name: Run Windows-specific Integration Tests
   1503         run: |
   1504           echo "=== Running Windows Integration Tests ==="
   1505           cargo test --verbose test_resolve_kernel32_integrity
   1506           cargo test --verbose test_resolve_function_address_from_exports
   1507           cargo test --verbose test_unicode_case_folding_dll_names
   1508           cargo test --verbose test_forwarded_exports_resolution
   1509           cargo test --verbose test_resolve_with_encrypted_dll_name
   1510           echo "=== All Windows Integration Tests Completed ==="
   1511 
   1512       - name: Build release binary
   1513         run: cargo build --release --verbose
   1514 
   1515       - name: Run Windows E2E Tests
   1516         shell: pwsh
   1517         run: |
   1518           echo "=== Running Windows End-to-End Tests ==="
   1519 
   1520           # Create test directory
   1521           New-Item -ItemType Directory -Force -Path e2e-test | Out-Null
   1522 
   1523           # Create msf.raw with NOP instructions (8 NOPs + RET)
   1524           $nopShellcode = @(0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xC3)
   1525           [System.IO.File]::WriteAllBytes("e2e-test\msf.raw", $nopShellcode)
   1526           Write-Host "✓ Created msf.raw with NOP shellcode ($($nopShellcode.Length) bytes)"
   1527 
   1528           Set-Location e2e-test
   1529 
   1530           # Test 1: AES encryption with create-fiber
   1531           Write-Host ""
   1532           Write-Host "=== Test 1: AES encryption with create-fiber ==="
   1533           ..\target\release\myph_v2.exe -s .\msf.raw -f test_aes_fiber.exe -e aes -t create-fiber
   1534           if (Test-Path "test_aes_fiber.exe") {
   1535             Write-Host "✓ Generated test_aes_fiber.exe"
   1536             $env:RUST_BACKTRACE=1
   1537             & .\test_aes_fiber.exe
   1538             if ($LASTEXITCODE -eq 0) {
   1539               Write-Host "✓ test_aes_fiber.exe executed successfully"
   1540             } else {
   1541               Write-Host "✗ test_aes_fiber.exe failed with exit code $LASTEXITCODE"
   1542               exit 1
   1543             }
   1544           } else {
   1545             Write-Host "✗ Failed to generate test_aes_fiber.exe"
   1546             exit 1
   1547           }
   1548 
   1549           # Test 2: XOR encryption with enum-calendar
   1550           Write-Host ""
   1551           Write-Host "=== Test 2: XOR encryption with enum-calendar ==="
   1552           ..\target\release\myph_v2.exe -s .\msf.raw -f test_xor_enum.exe -e xor -t enum-calendar
   1553           if (Test-Path "test_xor_enum.exe") {
   1554             Write-Host "✓ Generated test_xor_enum.exe"
   1555             $env:RUST_BACKTRACE=1
   1556             & .\test_xor_enum.exe
   1557             if ($LASTEXITCODE -eq 0) {
   1558               Write-Host "✓ test_xor_enum.exe executed successfully"
   1559             } else {
   1560               Write-Host "✗ test_xor_enum.exe failed with exit code $LASTEXITCODE"
   1561               exit 1
   1562             }
   1563           } else {
   1564             Write-Host "✗ Failed to generate test_xor_enum.exe"
   1565             exit 1
   1566           }
   1567 
   1568           # Test 3: ChaCha20 encryption with set-timer
   1569           Write-Host ""
   1570           Write-Host "=== Test 3: ChaCha20 encryption with set-timer ==="
   1571           ..\target\release\myph_v2.exe -s .\msf.raw -f test_chacha_timer.exe -e chacha20 -t set-timer
   1572           if (Test-Path "test_chacha_timer.exe") {
   1573             Write-Host "✓ Generated test_chacha_timer.exe"
   1574             $env:RUST_BACKTRACE=1
   1575             & .\test_chacha_timer.exe
   1576             if ($LASTEXITCODE -eq 0) {
   1577               Write-Host "✓ test_chacha_timer.exe executed successfully"
   1578             } else {
   1579               Write-Host "✗ test_chacha_timer.exe failed with exit code $LASTEXITCODE"
   1580               exit 1
   1581             }
   1582           } else {
   1583             Write-Host "✗ Failed to generate test_chacha_timer.exe"
   1584             exit 1
   1585           }
   1586 
   1587           # Test 4: Blowfish encryption with syscall
   1588           Write-Host ""
   1589           Write-Host "=== Test 4: Blowfish encryption with syscall ==="
   1590           ..\target\release\myph_v2.exe -s .\msf.raw -f test_blowfish_syscall.exe -e blowfish -t syscall
   1591           if (Test-Path "test_blowfish_syscall.exe") {
   1592             Write-Host "✓ Generated test_blowfish_syscall.exe"
   1593             $env:RUST_BACKTRACE=1
   1594             & .\test_blowfish_syscall.exe
   1595             if ($LASTEXITCODE -eq 0) {
   1596               Write-Host "✓ test_blowfish_syscall.exe executed successfully"
   1597             } else {
   1598               Write-Host "✗ test_blowfish_syscall.exe failed with exit code $LASTEXITCODE"
   1599               exit 1
   1600             }
   1601           } else {
   1602             Write-Host "✗ Failed to generate test_blowfish_syscall.exe"
   1603             exit 1
   1604           }
   1605 
   1606           # Test 5: AES with API hammering
   1607           Write-Host ""
   1608           Write-Host "=== Test 5: AES with API hammering ==="
   1609           ..\target\release\myph_v2.exe -s .\msf.raw -f test_aes_hammer.exe -e aes -t create-fiber --with-api-hammering
   1610           if (Test-Path "test_aes_hammer.exe") {
   1611             Write-Host "✓ Generated test_aes_hammer.exe"
   1612             $env:RUST_BACKTRACE=1
   1613             & .\test_aes_hammer.exe
   1614             if ($LASTEXITCODE -eq 0) {
   1615               Write-Host "✓ test_aes_hammer.exe executed successfully"
   1616             } else {
   1617               Write-Host "✗ test_aes_hammer.exe failed with exit code $LASTEXITCODE"
   1618               exit 1
   1619             }
   1620           } else {
   1621             Write-Host "✗ Failed to generate test_aes_hammer.exe"
   1622             exit 1
   1623           }
   1624 
   1625           # Test 6: XOR with AMSI patch
   1626           Write-Host ""
   1627           Write-Host "=== Test 6: XOR with AMSI patch ==="
   1628           ..\target\release\myph_v2.exe -s .\msf.raw -f test_xor_amsi.exe -e xor -t enum-calendar --with-amsi-patch
   1629           if (Test-Path "test_xor_amsi.exe") {
   1630             Write-Host "✓ Generated test_xor_amsi.exe"
   1631             $env:RUST_BACKTRACE=1
   1632             & .\test_xor_amsi.exe
   1633             if ($LASTEXITCODE -eq 0) {
   1634               Write-Host "✓ test_xor_amsi.exe executed successfully"
   1635             } else {
   1636               Write-Host "✗ test_xor_amsi.exe failed with exit code $LASTEXITCODE"
   1637               exit 1
   1638             }
   1639           } else {
   1640             Write-Host "✗ Failed to generate test_xor_amsi.exe"
   1641             exit 1
   1642           }
   1643 
   1644           # Test 7: ChaCha20 with string encryption
   1645           Write-Host ""
   1646           Write-Host "=== Test 7: ChaCha20 with string encryption ==="
   1647           ..\target\release\myph_v2.exe -s .\msf.raw -f test_chacha_strenc.exe -e chacha20 -t set-timer --with-string-encryption
   1648           if (Test-Path "test_chacha_strenc.exe") {
   1649             Write-Host "✓ Generated test_chacha_strenc.exe"
   1650             $env:RUST_BACKTRACE=1
   1651             & .\test_chacha_strenc.exe
   1652             if ($LASTEXITCODE -eq 0) {
   1653               Write-Host "✓ test_chacha_strenc.exe executed successfully"
   1654             } else {
   1655               Write-Host "✗ test_chacha_strenc.exe failed with exit code $LASTEXITCODE"
   1656               exit 1
   1657             }
   1658           } else {
   1659             Write-Host "✗ Failed to generate test_chacha_strenc.exe"
   1660             exit 1
   1661           }
   1662 
   1663           # Test 8: XOR with dynamic function resolver (XOR works with dynamic resolver)
   1664           Write-Host ""
   1665           Write-Host "=== Test 8: XOR with dynamic function resolver ==="
   1666           ..\target\release\myph_v2.exe -s .\msf.raw -f test_xor_dynres.exe -e xor -t create-fiber --with-dynamic-function-resolver
   1667           if (Test-Path "test_xor_dynres.exe") {
   1668             Write-Host "✓ Generated test_xor_dynres.exe"
   1669             $env:RUST_BACKTRACE=1
   1670             & .\test_xor_dynres.exe
   1671             if ($LASTEXITCODE -eq 0) {
   1672               Write-Host "✓ test_xor_dynres.exe executed successfully"
   1673             } else {
   1674               Write-Host "✗ test_xor_dynres.exe failed with exit code $LASTEXITCODE"
   1675               exit 1
   1676             }
   1677           } else {
   1678             Write-Host "✗ Failed to generate test_xor_dynres.exe"
   1679             exit 1
   1680           }
   1681 
   1682           # Test 9: DLL generation
   1683           Write-Host ""
   1684           Write-Host "=== Test 9: DLL generation ==="
   1685           ..\target\release\myph_v2.exe -s .\msf.raw -f test_output.dll -b dll -e aes -t create-fiber
   1686           if (Test-Path "test_output.dll") {
   1687             Write-Host "✓ Generated test_output.dll"
   1688           } else {
   1689             Write-Host "✗ Failed to generate test_output.dll"
   1690             exit 1
   1691           }
   1692 
   1693           # Test 10: Combined features (API hammering + AMSI patch)
   1694           Write-Host ""
   1695           Write-Host "=== Test 10: Combined features (API hammering + AMSI patch) ==="
   1696           ..\target\release\myph_v2.exe -s .\msf.raw -f test_combined.exe -e aes -t enum-calendar --with-api-hammering --with-amsi-patch
   1697           if (Test-Path "test_combined.exe") {
   1698             Write-Host "✓ Generated test_combined.exe"
   1699             $env:RUST_BACKTRACE=1
   1700             & .\test_combined.exe
   1701             if ($LASTEXITCODE -eq 0) {
   1702               Write-Host "✓ test_combined.exe executed successfully"
   1703             } else {
   1704               Write-Host "✗ test_combined.exe failed with exit code $LASTEXITCODE"
   1705               exit 1
   1706             }
   1707           } else {
   1708             Write-Host "✗ Failed to generate test_combined.exe"
   1709             exit 1
   1710           }
   1711 
   1712           # Test 11: LNK file generation with AES encryption
   1713           Write-Host ""
   1714           Write-Host "=== Test 11: LNK file with AES encryption ==="
   1715           ..\target\release\myph_v2.exe -s .\msf.raw -f test_output.lnk -b lnk -e aes -t create-fiber
   1716           if (Test-Path "test_output.lnk") {
   1717             Write-Host "✓ Generated test_output.lnk"
   1718             $lnkSize = (Get-Item "test_output.lnk").Length
   1719             Write-Host "✓ LNK file size: $lnkSize bytes"
   1720           } else {
   1721             Write-Host "✗ Failed to generate test_output.lnk"
   1722             exit 1
   1723           }
   1724 
   1725           # Test 12: LNK file with XOR encryption
   1726           Write-Host ""
   1727           Write-Host "=== Test 12: LNK file with XOR encryption ==="
   1728           ..\target\release\myph_v2.exe -s .\msf.raw -f test_xor.lnk -b lnk -e xor -t syscall
   1729           if (Test-Path "test_xor.lnk") {
   1730             Write-Host "✓ Generated test_xor.lnk with XOR encryption"
   1731           } else {
   1732             Write-Host "✗ Failed to generate test_xor.lnk"
   1733             exit 1
   1734           }
   1735 
   1736           # Test 13: LNK file with ChaCha20 encryption
   1737           Write-Host ""
   1738           Write-Host "=== Test 13: LNK file with ChaCha20 encryption ==="
   1739           ..\target\release\myph_v2.exe -s .\msf.raw -f test_chacha.lnk -b lnk -e chacha20 -t enum-calendar
   1740           if (Test-Path "test_chacha.lnk") {
   1741             Write-Host "✓ Generated test_chacha.lnk with ChaCha20 encryption"
   1742           } else {
   1743             Write-Host "✗ Failed to generate test_chacha.lnk"
   1744             exit 1
   1745           }
   1746 
   1747           # Test 14: Low-resource mode
   1748           Write-Host ""
   1749           Write-Host "=== Test 14: Low-resource mode ==="
   1750           ..\target\release\myph_v2.exe -s .\msf.raw -f test_low_resources.exe -e aes -t create-fiber --low-resources
   1751           if (Test-Path "test_low_resources.exe") {
   1752             Write-Host "✓ Generated test_low_resources.exe with low-resource mode"
   1753             $env:RUST_BACKTRACE=1
   1754             & .\test_low_resources.exe
   1755             if ($LASTEXITCODE -eq 0) {
   1756               Write-Host "✓ test_low_resources.exe executed successfully"
   1757             } else {
   1758               Write-Host "✗ test_low_resources.exe failed with exit code $LASTEXITCODE"
   1759               exit 1
   1760             }
   1761           } else {
   1762             Write-Host "✗ Failed to generate test_low_resources.exe"
   1763             exit 1
   1764           }
   1765 
   1766           Write-Host ""
   1767           Write-Host "=== All Windows E2E Tests Passed ==="
   1768           Write-Host "✓ Tested 4 encryption methods (AES, XOR, ChaCha20, Blowfish)"
   1769           Write-Host "✓ Tested 4 techniques (create-fiber, enum-calendar, set-timer, syscall)"
   1770           Write-Host "✓ Tested 3 binary formats (EXE, DLL, LNK)"
   1771           Write-Host "✓ Tested LNK format with 3 encryption methods (AES, XOR, ChaCha20)"
   1772           Write-Host "✓ Tested API Hammering feature"
   1773           Write-Host "✓ Tested AMSI Patch feature"
   1774           echo "✓ Tested String Encryption feature"
   1775           echo "✓ Tested Dynamic Function Resolver feature"
   1776           echo "✓ Tested Anti-VM evasion"
   1777           echo "✓ Tested Anti-Sandbox evasion"
   1778           echo "✓ Tested Anti-Debugger evasion"
   1779           echo "✓ Tested Dynamic Function Resolver with kernel32.dll APIs (VirtualAlloc, CreateProcess, QueueUserAPC)"
   1780           echo "✓ Tested Dynamic Function Resolver with ntdll.dll APIs (NtCreateThreadEx)"
   1781           echo "✓ Tested Dynamic Resolver with all new techniques (ModuleStomping, EarlyBird, ThreadHijacking)"
   1782           echo "✓ Verified no static API imports (strings check)"
   1783           Write-Host "✓ Tested String Encryption feature"
   1784           Write-Host "✓ Tested Dynamic Function Resolver feature"
   1785           Write-Host "✓ Tested Low-resource mode"
   1786           Write-Host "✓ Tested DLL generation"
   1787           Write-Host "✓ Tested combined features"
   1788           Write-Host "✓ All generated binaries executed successfully without crashes"