Advertisement
Guest User

InstanceLogger

a guest
Aug 18th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4. DWORD GObjObjects_offset = 0x125C423C;
  5. DWORD Names_offset = 0x1255DC00;
  6. DWORD Offset_Name = 0x34;
  7.  
  8. template < class T > struct TArray
  9. {
  10. T* Data;
  11. DWORD Num;
  12. DWORD Max;
  13. };
  14.  
  15. struct UObject
  16. {
  17. UCHAR Unknown [ 0x34 ]; // unknowed data
  18. DWORD NameIndex; // struct FName
  19. UCHAR Unknown2[0x0C]; //added new
  20. };
  21.  
  22. //struct FNameEntry
  23. //{
  24. // UCHAR Unknown [ 0x10 ]; // unknowed data
  25. // char Name [ 1 ]; // name
  26. //};
  27.  
  28. struct FNameEntry
  29. {
  30. DWORD Flags;
  31. UCHAR Unknown[12];
  32.  
  33. union
  34. {
  35. char *NamePtr;
  36. char Name[1024];
  37. };
  38.  
  39. };
  40. // Objects and Names arrays
  41. TArray< UObject* >* GObjObjects = ( TArray< UObject* >* ) GObjObjects_offset; // global objects
  42. TArray< FNameEntry* >* Names = ( TArray< FNameEntry* >* ) Names_offset; // global names
  43.  
  44. // funcs
  45. char* GetName(UObject* Object)
  46. {
  47. DWORD NameIndex = *(PDWORD)((DWORD)Object + Offset_Name);
  48.  
  49. //DWORD NameIndexFix = NameIndex * 3;
  50.  
  51. if (NameIndex < 0 || NameIndex > Names->Num)
  52. {
  53. static char ret[256];
  54. //sprintf_s ( ret, "INVALID NAME INDEX : %i > %i", NameIndex, Names->Num );
  55. return ret;
  56. }
  57. else
  58. {
  59. //return Names->Data[ NameIndexFix ]->Name;
  60. if (Names->Data[NameIndex]->Flags == 0x4000)
  61. return Names->Data[NameIndex]->NamePtr;
  62. else
  63. return Names->Data[NameIndex]->Name;
  64. }
  65. }
  66.  
  67. void ObjectDump()
  68. {
  69. // log file
  70. FILE* Log = NULL;
  71. fopen_s ( &Log, "ObjectDump.txt", "w+" );
  72.  
  73. for ( DWORD i = 0x0; i < GObjObjects->Num; i++ )
  74. {
  75. // check if it's a valid object
  76. if ( ! GObjObjects->Data[ i ] ) { continue; }
  77.  
  78. // log the object
  79. fprintf ( Log, "UObject[%06i] %-50s 0x%X\n", i, GetName ( GObjObjects->Data[ i ] ), GObjObjects->Data[ i ] );
  80. }
  81.  
  82. // close log
  83. fclose ( Log );
  84. }
  85.  
  86. void NameDump()
  87. {
  88. // log file
  89. FILE* Log = NULL;
  90. fopen_s ( &Log, "NameDump.txt", "w+" );
  91.  
  92. //for ( DWORD i = 0x0; i < Names->Num; i += 0x3 )
  93. for ( DWORD i = 0x0; i < Names->Num; i++ )
  94. {
  95. // check if it's a valid object
  96. if ( ! Names->Data[ i ] ) { continue; }
  97.  
  98. if (Names->Data[i]->Flags == 0x4000)
  99. fprintf(Log, "Name[%06i] %s\n", i, Names->Data[i]->NamePtr);
  100. //return Names->Data[i]->NamePtr;
  101. else
  102. fprintf(Log, "Name[%06i] %s\n", i, Names->Data[i]->Name);
  103. //return Names->Data[i]->Name;
  104. // log the object
  105. //fprintf(Log, "Name[%06i] %s\n", i, Names->Data[i]->Name);
  106. }
  107.  
  108. // close log
  109. fclose ( Log );
  110. }
  111.  
  112. void onAttach()
  113. {
  114. //Sleep ( 60000 );
  115.  
  116. NameDump();
  117. ObjectDump();
  118. }
  119.  
  120. // entry point
  121. BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
  122. {
  123. switch ( dwReason )
  124. {
  125. case DLL_PROCESS_ATTACH:
  126. DisableThreadLibraryCalls ( hModule );
  127. CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
  128. return true;
  129. break;
  130.  
  131. case DLL_PROCESS_DETACH:
  132. return true;
  133. break;
  134. }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement