If I understand the principles of an exploit, we need to:
- Push our code into the console's RAM (don't know how)
- Cause the browser to have an unhandled exception so that it freaks out and asks the console "Yo man, I'm having some problems, what do I do?"
- Have the console go "Just run whatever is in the RAM, maybe that will fix it!"
Not quite. First, there are 3 different exploits: webkit (userland), kernel and iosu. It sounds like you are
only describing the webkit exploit. The source is right here:
https://bitbucket.org/Marionumber1/wiiu-userspace/src . All three of the steps you listed are right there.
Step 1 is the heap spray, it happens in javascript. Step 2 you have sort of right, but your narration is inaccurate. The whole point of an unhandled exception is that the console has
no idea there's anything wrong. If it knew that something was wrong, that would be called a handled exception. Step 3 happens because we've sprayed the heap with pointers to our code, and the console carries on like there's nothing wrong at all, but executes our code because we've overwritten what it would normally have done.
Again, these steps only describe the webkit exploit, which means we have access to userspace and can only overwrite memory that userspace is allowed to. These 3 steps you detail are not needed for anyone that has a console system firmware versions 4.0.0 through 5.1.0 because there is already a webkit exploit that does exactly these 3 steps.
The main difference between a webkit (userspace) exploit and a kernel or iosu exploit is what area of memory we can overwrite; a kernel exploit would be an unhandled kernel except that allows overwritting areas of memory that only the kernel has access to, and an iosu exploit would similarly be an unhandled iosu exception that allows overwriting areas of memory that only iosu has access to.
Hope that makes sense.