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: