Conversation

You're writing a leaf function into return address which, by the way, may never call into other functions. Leaf functions' are unwound by considering next word as return address, so this goes on until you end up with a very invalid rip.
1
8
Show replies
Since the outcome is the same, resulting in a fake call stack - what's the deal whether the implementation is similar to the Nighthawk's one or not? Would you rather call it "Call Stack Spoofing" instead?
1
1
no, yours doesn't do that either. Since frame size in x64 unwinding depends on rip as written in documentation i linked, and not rbp, the whole unwinding gets out of track on the very first frame you "spoof" (corrupt)
1
4
Show replies
unwinding breaks after you touch the last return address since it changes how walking works. so what's the point, the rest becomes meaningless stack data as soon as you touch the last one incorrectly
2
We said this in our internal chat but were too polite to point it out in case of more drama. But you’re correct 👍 happy to see the teams work is ppl inspiring tho either way
5