
l'ennesimo coso sulla crittografia dello sleep. ha anche usato il nome predefinito del repository GitHub per questo.
ancora un'altra cosa per la crittografia del sonno. ho anche usato il nome predefinito del repository github per questa.
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork per creare + eseguire + pulire la callback.
La callback è un po' di assembly raffazzonato che mette in coda un sacco di gadget ROP che fanno pop degli argomenti (sia valori hardcoded, sia basati su un offset all'interno di una struct passata come parametro di TpAllocWork) nei registri corretti, per poi tornare al gadget/funzione successivo. Il padding viene creato tra alcune chiamate di funzione pushando 5 valori spazzatura + un gadget per spostare lo stack pointer di 40 byte, come soluzione hacky per sistemare alcune stranezze dello stack che ho incontrato. Questo è anche probabilmente il motivo per cui il call stack sembra disgustoso, ma non so come altro affrontarlo.
Se stai cercando di estendere questo e renderlo davvero utile, ci saranno un sacco di strane magagne dello stack (almeno per quanto mi riguarda). Inoltre, non posso garantire che i gadget ROP che ho trovato siano presenti in tutte le versioni di Windows (stavo sviluppando su Server 2016).
Kudaes, per aver creato RustChain da cui mi è venuta l'idea per i ROP
C5pider, per aver creato Ekko e avermi aiutato a capire la crittografia del sonno
x86matthew, per avermi aiutato a risolvere problemi strani con lo stack
NinjaParanoid, per aver fornito un post del blog sulle Tp Apis