1. Un payload x64 può funzionare su un'architettura x86
Gli eseguibili a 64 bit non possono funzionare su architetture x86 perché ci sono due diverse differenze tra le architetture. Oltre le limitazioni dello spazio degli indirizzi ci sono registri a 64 bit che semplicemente non esistono. I parametri per le funzioni sono gestiti in modo completamente diverso. Le istruzioni della macchina operano in modo diverso.
Windows 64-bit contiene molto codice per garantire che ci sia compatibilità per i programmi x86 da eseguire su un'architettura x64, ma gli eseguibili devono essere scritti per trarne vantaggio. In questo caso l'exploit dovrebbe essere costruito come un'applicazione a 32 bit e utilizzare il sottosistema WOW64 . Questo sottosistema è come una sandbox per eseguire applicazioni a 32 bit. Emula essenzialmente un sistema a 32 bit ai fini dell'esecuzione.
2. Esiste una soluzione per la consegna del payload che non ha dipendenze architettoniche?
I compilatori compilano per un'architettura specifica. Come ho detto sopra, il codice indipendente dell'architettura richiede un po 'di tempo di emulazione. Ad esempio, Java utilizza una macchina virtuale per l'esecuzione su più piattaforme. Questo ha un costo in termini di prestazioni.
3. Codificare un payload x64 con un encoder x86 crea problemi di compatibilità quando viene eseguito?
Non so cosa sia un encoder x86. Se intendi che stai trasformando il codice macchina x64 nel codice macchina x86 ... potresti anche creare x86 per iniziare. Dal momento che è praticamente la stessa cosa.