From 74c87547d3e9832de48c58787ec8bb60c72de3dd Mon Sep 17 00:00:00 2001 From: CTurt Date: Sat, 18 Jul 2020 23:27:01 +0100 Subject: [PATCH] 3.03 --- index.html | 2 ++ portingnotes.html | 67 ++++++++++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/index.html b/index.html index f467e83..0c44c85 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,8 @@ diff --git a/portingnotes.html b/portingnotes.html index d6988cd..7107b80 100644 --- a/portingnotes.html +++ b/portingnotes.html @@ -40,7 +40,7 @@ tr:nth-child(even) { getDiscData - + 0x243438 0x23e150 0x23e138 0x25c9f0 @@ -48,7 +48,7 @@ tr:nth-child(even) { getDiscByte - + 0x243368 0x23e068 0x25c920 @@ -56,7 +56,7 @@ tr:nth-child(even) { currentDiscBytePointer - + 0x15f42a4 0x16ceee4 0x1411fe4 @@ -64,7 +64,7 @@ tr:nth-child(even) { endDiscBytePointer - + 0x15f42a8 0x16ceee8 0x1411fe8 @@ -72,7 +72,7 @@ tr:nth-child(even) { 0xff * 3 * 8 overflow - + 0x241d0c 0x23cb04 0x25b3bc @@ -80,7 +80,7 @@ tr:nth-child(even) { fpIndex - + 0x15f4b0a 0x16cf74a 0x141284a @@ -88,7 +88,7 @@ tr:nth-child(even) { fpArray - + 0x923d88 0x95ace8 0x5b9d40 @@ -96,7 +96,7 @@ tr:nth-child(even) { OOB call - + 0x0244E1C 0x23faac 0x25e388 @@ -104,7 +104,7 @@ tr:nth-child(even) { getBufferInternal - + 0x262360 0x261548 @@ -112,7 +112,7 @@ tr:nth-child(even) { pointToIFO - + 0x2432c8 0x23dfc8 @@ -128,7 +128,7 @@ tr:nth-child(even) { SifInitRpc - + 0x2082a0 0x208260 @@ -136,7 +136,7 @@ tr:nth-child(even) { SifExitRpc - + 0x208440 0x208400 @@ -144,7 +144,7 @@ tr:nth-child(even) { SifIopReset - + 0x291fb8 0x291358 @@ -152,7 +152,7 @@ tr:nth-child(even) { SifIopSync - + 0x292138 0x2914d8 @@ -163,7 +163,7 @@ tr:nth-child(even) { Destination of large copy - + 0x15ec890 0x16c8cd4 0x140bdd4 @@ -171,26 +171,18 @@ tr:nth-child(even) { Destination + max size - + 0x176C878 0x1848CBC 0x158BDBC 0x15B51B4 - - Sector buffer (getDiscByteInternal) - - - 0x16cad40 - 0x140de40 - - Exploit values currentDiscBytePointer value at overwrite - + 0x015f1008 0x016ce444 0x01411544 @@ -198,7 +190,7 @@ tr:nth-child(even) { Jump target - + 0x15ea540 0x01800180 0x01500014 @@ -206,7 +198,7 @@ tr:nth-child(even) { Address of jump target - + 0x928D24 0x95CF40 0x5f1f38 @@ -217,7 +209,7 @@ tr:nth-child(even) { currentDiscBytePointer - + 0x1c6c 0x2744 0x2744 @@ -225,7 +217,7 @@ tr:nth-child(even) { fpIndex - + 0x24D2 @@ -233,7 +225,7 @@ tr:nth-child(even) { Payload - + 0x0e8c 0x2d00 0x2bb4 @@ -243,6 +235,21 @@ tr:nth-child(even) {
+

3.03

+

+ 3.03 has a couple of additional tricks going on. There are no jump targets which lie within our controlled range from any buffer overflows, however the jump target 0x15ea540 is very close to the beginning of our IFO file contents (0x15ea620). +

+ +

+ The memory between the jump target and the start of the IFO (0x15ea540 - 0x15ea620) is all zeroes, so that's just a NOP-sled. Then the IFO header "DVDVIDEO-VMG" turns out to decode to a conditional relative branch which not only happens to be taken, but also jumps to fully controlled contents later in the IFO: +

+ +
bnel    s2,a0,pos_015FFF34
+ +
+ +
+

Conflicts

In order to merge 2 exploits into a single ISO there must be either: