1. ¿Puede funcionar una carga útil x64 en una arquitectura x86?
Los ejecutables de 64 bits no pueden funcionar en arquitecturas x86 porque hay dos diferencias entre las arquitecturas. Más allá de las limitaciones del espacio de direcciones, existen registros de 64 bits que simplemente no existen. Los parámetros para las funciones se manejan de manera totalmente diferente. Las instrucciones de la máquina funcionan de manera diferente.
Windows de 64 bits contiene una gran cantidad de código para garantizar que haya compatibilidad para que los programas x86 se ejecuten en una arquitectura x64, pero los ejecutables deben escribirse para aprovechar esto. En este caso, el exploit debería construirse como una aplicación de 32 bits y utilizar el subsistema WOW64 . Este subsistema es como una caja de arena para ejecutar aplicaciones de 32 bits. Esencialmente emula un sistema de 32 bits para fines de ejecución.
2. ¿Existe una solución para la entrega de carga útil que no tenga dependencias arquitectónicas?
Compilación de compiladores para una arquitectura específica. Como dije anteriormente, el código independiente de la arquitectura requiere un tiempo de emulación. Por ejemplo, Java usa una máquina virtual para ejecutarse en múltiples plataformas. Esto viene a un costo de rendimiento.
3. ¿La codificación de una carga útil x64 con un codificador x86 crearía problemas de compatibilidad cuando se ejecutara?
No sé qué es un codificador x86. Si quiere decir que está transformando el código de máquina x64 en el código de máquina x86 ... es posible que, para empezar, compile con x86. Ya que es más o menos lo mismo.