
mais uma coisa de criptografia de suspensão. também usei o nome de repositório padrão do GitHub para este.
mais uma coisa de criptografia de sleep. também usei o nome padrão de repositório do GitHub para este.
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork para criar + executar + limpar o callback.
O callback é uma assembly tosca que enfileira um monte de gadgets de ROP que vão colocar argumentos (valores hardcoded ou baseados em um offset dentro de uma struct passada como parâmetro do TpAllocWork) nos registradores corretos e depois retornar para o próximo gadget/função. Padding é criado entre algumas chamadas de função ao empurrar 5 valores de lixo + um gadget para mover o ponteiro de pilha em 40 bytes, como uma solução gambiarra para corrigir umas coisas estranhas de pilha que encontrei. Isso também é provavelmente o motivo pelo qual a pilha de chamadas parece horrível, mas não sei de que outra forma resolver isso.
Se você está tentando estender isso e tornar isso realmente útil, vai ter um monte de merda estranha de pilha acontecendo (pelo menos do meu lado). Além disso, não posso garantir que os gadgets de ROP que encontrei estarão presentes em todas as versões do Windows (eu estava desenvolvendo no Server 2016).
Kudaes, por criar o RustChain, de onde veio a ideia de ROP para mim
C5pider, por criar o Ekko e me ajudar a entender criptografia de sleep
x86matthew, por me ajudar a resolver problemas estranhos de pilha
NinjaParanoid, por fornecer um post no blog sobre as Tp Apis