Advertisement
xerpi

scetouch userspace hooks

Dec 26th, 2016
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.03 KB | None | 0 0
  1.  
  2.  
  3. static unsigned int nid_table[] = {
  4. 0x012EAE3A,
  5. 0x04440622,
  6. 0x08DD4C7C,
  7. 0x10A2CA25,
  8. 0x13CDFC43,
  9. 0x169A1D58,
  10. 0x1B9C5D14,
  11. 0x26531526,
  12. 0x2CF6D7E2,
  13. 0x2D94EAEA,
  14. 0x39401BEA,
  15. 0x3AD3D0A1,
  16. 0x41194411,
  17. 0x609EA489,
  18. 0x6134DFBE,
  19. 0x93B5635B,
  20. 0x9F0ACAF9,
  21. 0xA3FE877B,
  22. 0xAB364C23,
  23. 0xB18370C2,
  24. 0xBD59D652,
  25. 0xD7889B91,
  26. 0xDC8671EA,
  27. 0xE0C1DB92,
  28. 0xED25DFDC,
  29. 0xF0704CF3,
  30. 0xFF082DF0
  31. };
  32.  
  33. //#define NID_TABLE_SIZE (24)
  34. #define NID_TABLE_SIZE (sizeof(nid_table) / sizeof(*nid_table))
  35.  
  36. static SceUID hook_uids[NID_TABLE_SIZE] = {-1, -1};
  37. static tai_hook_ref_t hook_refs[NID_TABLE_SIZE];
  38.  
  39. #define HOOK_FUNC(nid) \
  40.     int name ## nid ## _hook(int r0, int r1, int r2, int r3, int r4, int r5, int r6, int r7, int r8, int r9, int r10, int r11, int r12) \
  41.     { \
  42.         LOG(# nid "_hook(0x%08X, 0x%08X, 0x%08X, 0x%08X)\n", r0, r1, r2, r3); \
  43.         int i = 0; \
  44.         while (nid_table[i] != nid && i < NID_TABLE_SIZE) \
  45.             i++; \
  46.         return TAI_CONTINUE(int, hook_refs[i], r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12); \
  47.     }
  48.  
  49. HOOK_FUNC(0x012EAE3A)
  50. HOOK_FUNC(0x04440622)
  51. HOOK_FUNC(0x08DD4C7C)
  52. HOOK_FUNC(0x10A2CA25)
  53. HOOK_FUNC(0x13CDFC43)
  54. HOOK_FUNC(0x169A1D58)
  55. HOOK_FUNC(0x1B9C5D14)
  56. HOOK_FUNC(0x26531526)
  57. HOOK_FUNC(0x2CF6D7E2)
  58. HOOK_FUNC(0x2D94EAEA)
  59. HOOK_FUNC(0x39401BEA)
  60. HOOK_FUNC(0x3AD3D0A1)
  61. HOOK_FUNC(0x41194411)
  62. HOOK_FUNC(0x609EA489)
  63. HOOK_FUNC(0x6134DFBE)
  64. HOOK_FUNC(0x93B5635B)
  65. HOOK_FUNC(0x9F0ACAF9)
  66. HOOK_FUNC(0xA3FE877B)
  67. HOOK_FUNC(0xAB364C23)
  68. HOOK_FUNC(0xB18370C2)
  69. HOOK_FUNC(0xBD59D652)
  70. HOOK_FUNC(0xD7889B91)
  71. HOOK_FUNC(0xDC8671EA)
  72. HOOK_FUNC(0xE0C1DB92)
  73. HOOK_FUNC(0xED25DFDC)
  74. HOOK_FUNC(0xF0704CF3)
  75. HOOK_FUNC(0xFF082DF0)
  76.  
  77.  
  78. #define HOOK_FUNC_PTR(nid) \
  79.         &name ## nid ## _hook
  80.  
  81. static void *func_ptr_table[] = {
  82. HOOK_FUNC_PTR(0x012EAE3A),
  83. HOOK_FUNC_PTR(0x04440622),
  84. HOOK_FUNC_PTR(0x08DD4C7C),
  85. HOOK_FUNC_PTR(0x10A2CA25),
  86. HOOK_FUNC_PTR(0x13CDFC43),
  87. HOOK_FUNC_PTR(0x169A1D58),
  88. HOOK_FUNC_PTR(0x1B9C5D14),
  89. HOOK_FUNC_PTR(0x26531526),
  90. HOOK_FUNC_PTR(0x2CF6D7E2),
  91. HOOK_FUNC_PTR(0x2D94EAEA),
  92. HOOK_FUNC_PTR(0x39401BEA),
  93. HOOK_FUNC_PTR(0x3AD3D0A1),
  94. HOOK_FUNC_PTR(0x41194411),
  95. HOOK_FUNC_PTR(0x609EA489),
  96. HOOK_FUNC_PTR(0x6134DFBE),
  97. HOOK_FUNC_PTR(0x93B5635B),
  98. HOOK_FUNC_PTR(0x9F0ACAF9),
  99. HOOK_FUNC_PTR(0xA3FE877B),
  100. HOOK_FUNC_PTR(0xAB364C23),
  101. HOOK_FUNC_PTR(0xB18370C2),
  102. HOOK_FUNC_PTR(0xBD59D652),
  103. HOOK_FUNC_PTR(0xD7889B91),
  104. HOOK_FUNC_PTR(0xDC8671EA),
  105. HOOK_FUNC_PTR(0xE0C1DB92),
  106. HOOK_FUNC_PTR(0xED25DFDC),
  107. HOOK_FUNC_PTR(0xF0704CF3),
  108. HOOK_FUNC_PTR(0xFF082DF0),
  109. };
  110.  
  111. static void hooks_init()
  112. {
  113.     for (int i = 0; i < NID_TABLE_SIZE; i++)
  114.         hook_uids[i] = -1;
  115.  
  116.     for (int i = 0; i < NID_TABLE_SIZE; i++) {
  117.         hook_uids[i] = taiHookFunctionExportForKernel(KERNEL_PID,
  118.                 &hook_refs[i],
  119.                 "SceTouch",
  120.                 TAI_ANY_LIBRARY,
  121.                 nid_table[i],
  122.                 func_ptr_table[i]);
  123.         if (hook_uids[i] < 0) {
  124.             LOG("Error hooking NID 0x%08X: 0x%08X\n",
  125.                 nid_table[i], hook_uids[i]);
  126.         }
  127.  
  128.     }
  129. }
  130.  
  131. static void hooks_deinit()
  132. {
  133.     for (int i = 0; i < NID_TABLE_SIZE; i++) {
  134.         if (hook_uids[i] >= 0)
  135.             taiHookReleaseForKernel(hook_uids[i], hook_refs[i]);
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement