Pregunta

Tengo un compilador que compila lenguaje ensamblador a lenguaje de máquina (en la memoria). Mi proyecto se encuentra en C # .NET. ¿Hay alguna forma de ejecutar la memoria de un hilo? ¿Cómo se puede evitar que DEP?

byte[] a:  
01010101 10111010 00111010 10101011 ...
¿Fue útil?

Solución

Dudo que haya una manera compatible. No sé y no han investigado, pero aquí hay algunas conjeturas:

La forma más sencilla podría ser para lanzarlo como un proceso: escribir en un * .com presentar y luego decir la O / S para ejecutar ese ejecutable.

Alternativamente, pasar la memoria como un parámetro a la función CreateThread (pero tendrá que wrorry sobre el código que tiene el derecho de convenciones de llamada, esperando que los parámetros especificados, la preservación de registros, y estando en la memoria que es ejecutable).

Otra posibilidad es escribir los códigos de operación en la memoria que es saber ya que va a ser ejecutado (por ejemplo sobrescribir el código existente en un DLL cargada recientemente).

Otros consejos

La clave es poner el código ejecutable en un bloque de memoria asignada con VirtualAlloc tal que el tampón está marcado como ejecutable.

IntPtr pExecutableBuffer = VirtualAlloc(
  IntPtr.Zero,
  new IntPtr(byteCount),
  AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
  MemoryProtection.PAGE_EXECUTE_READWRITE);

(a continuación, utilizar VirtualFree para limpiar después de ti mismo).

Esto le dice a Windows que la memoria debe ser marcado como código ejecutable para que no se disparará un cheque DEP.

Es posible ejecutar código de bytes como:

Inline x86 ASM en C #

Se requiere el uso de código de unsafe.

pensé que esto era sólo un hecho divertido, pero inútil en la práctica, pero tal vez su aplicación en realidad tiene un uso para esto:)

Puede lista blanca de su aplicación desde el panel de control http://ask-leo.com/how_do_i_turn_off_data_execution_prevention_errors.html

Dudo que pueda lista blanca que programattically, pero ciertamente no sin acceso de administrador - que sería contrario al propósito de esta característica de seguridad

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top