
また別のスリープ暗号化のやつ。これもGitHubリポジトリのデフォルト名を使った。
またまたスリープ暗号化の何か。しかも、これにはGitHubのデフォルトリポジトリ名を使った。
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork を使用して、コールバックの作成 + 実行 + クリーンアップを行います。
コールバックは、TpAllocWork パラメータとして渡される構造体内のオフセットに基づく値か、ハードコードされた値のいずれかをポップして正しいレジスタに格納し、次のガジェット/関数に戻る、大量のROPガジェットをキューに入れる、かなり雑なアセンブリです。一部の関数呼び出しの間には、スタックを40バイト移動させるガジェットとガベージ値5つをプッシュしてパディングを作成しています。これは、私が遭遇した奇妙なスタックの問題を修正するためのハッキーな解決策です。おそらくこれが、コールスタックが見苦しくなる理由でもありますが、他にどう対処すればよいのかわかりません。
これを拡張して実際に役立つものにしようとすると、(少なくとも私の環境では) 奇妙なスタックのゴチャゴチャがたくさん発生するでしょう。また、私が見つけたROPガジェットがすべてのバージョンのWindowsに存在するとは保証できません(開発はServer 2016で行っていました)。
Kudaes — ROPのアイデアの元となった RustChain を作成
C5pider — Ekko を作成し、スリープ暗号化の理解を助けてくれた
x86matthew — 奇妙なスタックの問題のトラブルシューティングを手伝ってくれた
NinjaParanoid — Tp APIに関する ブログ記事 を提供