
ещё одна штука для шифрования режима сна. также для этого использовал имя репозитория GitHub по умолчанию.
ещё одна штука для шифрования сна. для этой тоже использовал стандартное имя репозитория github.
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork для создания + выполнения + очистки callback.
Callback — это немного корявый ассемблер, который ставит в очередь кучу ROP-гаджетов, закидывающих аргументы (либо захардкоженные значения, либо вычисляемые по смещению внутри структуры, передаваемой как параметр TpAllocWork) в нужные регистры, а затем возвращающихся к следующему гаджету/функции. Между некоторыми вызовами функций создаётся паддинг путём пуша 5 мусорных значений + гаджета для сдвига указателя стека на 40 байт — в качестве костыля для исправления странных проблем со стеком, на которые я наткнулся. Вероятно, именно поэтому стек вызовов выглядит отвратительно, но я не знаю, как ещё это можно исправить.
Если вы пытаетесь расширить это и сделать по-настоящему полезным, будет много странной возни со стеком (по крайней мере, с моей стороны). Также не могу гарантировать, что найденные мной ROP-гаджеты будут присутствовать во всех версиях Windows (я разрабатывал на Server 2016).
Kudaes — за создание RustChain, из которого я почерпнул идею ROP
C5pider — за создание Ekko и помощь в понимании шифрования сна
x86matthew — за помощь в решении странных проблем со стеком
NinjaParanoid — за предоставленный пост в блоге о Tp API