Advertisement
INeverDevelop

4@Q$@QB$QB$

Oct 7th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1.  
  2. typedef int(RSkidState);
  3.  
  4. #define LUA_GLOBALSKID -10002
  5. #define SKID_globalSkId(l,g) Rlua::SKID_getSkId(l, LUA_GLOBALSKID, g)
  6.  
  7. DWORD SkidCheck(DWORD SkIdr)
  8. {
  9. BYTE* tSkId = (BYTE *)SkIdr;
  10.  
  11. do {
  12. tSkId += 0x10;
  13. } while (!(tSkId[0] == 0x55 && tSkId[1] == 0x8B && tSkId[2] == 0xEC));
  14.  
  15. DWORD SkIdSz = tSkId - (BYTE*)SkIdr;
  16.  
  17. PVOID nSkId = VirtualAlloc(NULL, SkIdSz, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  18. if (nSkId == NULL)
  19. return SkIdr;
  20.  
  21. memcpy(nSkId, (void*)SkIdr, SkIdSz);
  22.  
  23. DWORD poSkId = (DWORD)nSkId;
  24. BOOL vSkId = false;
  25. do {
  26. if (*(BYTE*)poSkId == 0x72 && *(BYTE*)(poSkId + 0x2) == 0xA1 && (*(BYTE*)(poSkId + 0x7)) == 0x8B) {
  27. memcpy((void*)poSkId, "\xEB", 1);
  28.  
  29. DWORD cnSkId = (DWORD)nSkId;
  30. do {
  31. if (*(BYTE*)cnSkId == 0xE8)
  32. {
  33. DWORD tFSkId = SkIdr + (cnSkId - (DWORD)nSkId);
  34. DWORD oSkId = (tFSkId + *(DWORD*)(tFSkId + 1)) + 5;
  35.  
  36. if (oSkId % 16 == 0)
  37. {
  38. DWORD realSkId = oSkId - cnSkId - 5;
  39. *(DWORD*)(cnSkId + 1) = realSkId;
  40. }
  41. cnSkId += 5;
  42. }
  43. else
  44. cnSkId += 1;
  45. } while (cnSkId - (DWORD)nSkId < SkIdSz);
  46.  
  47. vSkId = true;
  48. }
  49. poSkId += 1;
  50. } while (poSkId < (DWORD)nSkId + SkIdSz);
  51.  
  52. if (!vSkId) {
  53. VirtualFree(nSkId, SkIdSz, MEM_RELEASE);
  54. return SkIdr;
  55. }
  56.  
  57. return (DWORD)nSkId;
  58. }
  59.  
  60. namespace Rlua {
  61. //getfield
  62. typedef void(__cdecl *Lua_getSkId)(RSkidState lst, int index, const char *k);
  63. Lua_getSkId SKID_getSkId = (Lua_getSkId)SkidCheck(SKID(0x802760));
  64. //settop
  65. typedef void(__cdecl *Lua_SkIdtop)(RSkidState lst, int index);
  66. Lua_SkIdtop SKID_SkIdtop = (Lua_SkIdtop)SkidCheck(SKID(0x804910));
  67. //pushstring
  68. typedef void(__cdecl *Lua_pushSkId)(RSkidState lst, const char *s);
  69. Lua_pushSkId SKID_pushSkId = (Lua_pushSkId)SKID(0x803A90);
  70. //pushvalue
  71. typedef void(__cdecl *Lua_SkIdvalue)(RSkidState lst, int index);
  72. Lua_SkIdvalue SKID_SkIdvalue = (Lua_SkIdvalue)SkidCheck(SKID(0x803B50));
  73. //call
  74. typedef int(__cdecl *Lua_SkId)(RSkidState lst, int nargs, int nresults);
  75. Lua_SkId SKID_SkId = (Lua_SkId)SkidCheck(SKID(0x8034D0));
  76. //setfield
  77. typedef void(__cdecl *Lua_setSkId)(RSkidState lst, int index, const char *k);
  78. Lua_setSkId SKID_setSkId = (Lua_setSkId)SkidCheck(SKID(0x8044D0));
  79. //pushnumber
  80. typedef void(__cdecl *Lua_hOwMaNySkIdS)(RSkidState lst, double n);
  81. Lua_hOwMaNySkIdS SKID_hOwMaNySkIdS = (Lua_hOwMaNySkIdS)SkidCheck(SKID(0x803a00));
  82. //contextlevel/identity
  83. typedef int*(__cdecl *SKIDLeVEL)();
  84. SKIDLeVEL SKIDLeVeL = (SKIDLeVEL)SKID(0x68754+427860+01503524+0b01101000011101010100);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement