
otra cosa más de cifrado para suspensión. también usé el nombre de repositorio predeterminado de github para este.
otra cosa de cifrado de sleep. también usé el nombre de repositorio predeterminado de GitHub para este.
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork para crear + ejecutar + limpiar el callback.
El callback es un ensamblado chapucero que pone en cola un montón de gadgets ROP que harán pop de los argumentos (ya sean valores hardcodeados o basados en un offset dentro de una estructura pasada como parámetro de TpAllocWork) a los registros correctos, para luego volver al siguiente gadget/función. El padding se crea entre algunas llamadas a funciones empujando 5 valores basura + un gadget para mover el puntero de pila en 40 bytes como una solución hacky para arreglar algunas cosas raras de pila con las que me topé. Esto también es probablemente la razón por la que la pila de llamadas se ve horrible, pero no sé cómo abordarlo de otra manera.
Si estás tratando de extender esto y hacerlo realmente útil, va a haber un montón de follón raro con la pila (al menos de mi lado). Además, no puedo garantizar que los gadgets ROP que encontré estén presentes en todas las versiones de Windows (estaba desarrollando en Server 2016).
Kudaes, por crear RustChain, de donde saqué la idea del ROP
C5pider, por crear Ekko y ayudarme a entender el cifrado de sleep
x86matthew, por ayudarme a solucionar problemas raros de pila
NinjaParanoid, por proporcionar una entrada de blog sobre las Tp Apis