Open patricia-gallardo opened 2 years ago
Yeah, bad bytes in data is a real problem. You may try more advanced ROP chaining tools. However, I don't know any existing open source ROP compiler that handles bad bytes in data. We actually wrote a paper that specifically handles bad bytes in data [1]. Unfortunately, it's closed source.
Maybe you can start with the rop chain generated by the tool and then update it manually to avoid bad bytes? For example, maybe you can use some gadgets that encode 0x08209064
with bitwise operators (e.g: xor
, etc.).
@JonathanSalwan, that sounds like a great task for training)
Actually I was thinking about something like below but you are right, sounds fun for a training :).
hex(0x19318175 ^ 0x11111111) = 0x8209064
pop reg1 ; ret
0x19318175
pop reg2 ; ret
0x11111111
xor reg1, reg2 ; ret
Btw, i'm pretty sure we can automate this, sounds a good challenge :D
I am not very experienced using this tool, but I have an example in one of my trainings and I can't seem to get it to work.
So rename this to target.cpp (github is not a fan of uploading C++ files it seems) target.txt
Build it like this (added pthread and static to make the binary bigger):
Then try to generate a ropchain with these badbytes:
Generated chain
Which has 0x20 bytes present in addresses that are used for data and padding.
Please let me know if this is just me using it wrong, I would love to get this working.
Thank you so much!