Advertisement
Guest User

Untitled

a guest
Jun 10th, 2012
727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4. DWORD   GObjObjects_offset      = 0x01500FB8;
  5. DWORD   Names_offset            = 0x014BECA8;
  6. DWORD   Offset_Name             = 0x2C;
  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     [ 0x2C ];   // unknowed data
  18.     DWORD   NameIndex;              // struct FName
  19. };
  20.  
  21. struct FNameEntry
  22. {
  23.     UCHAR   Unknown     [ 0x10 ];   // unknowed data
  24.     char    Name        [ 1 ];      // name
  25. };
  26.  
  27. // Objects and Names arrays
  28. TArray< UObject* >*     GObjObjects = ( TArray< UObject* >* )       GObjObjects_offset;     // global objects
  29. TArray< FNameEntry* >*  Names       = ( TArray< FNameEntry* >* )    Names_offset;           // global names
  30.  
  31. // funcs
  32. PCHAR GetName ( UObject* Object )
  33. {
  34.     DWORD NameIndex = *(PDWORD) ( (DWORD) Object + Offset_Name );
  35.  
  36.     //DWORD NameIndexFix = NameIndex * 3;
  37.  
  38.     if ( NameIndex < 0 || NameIndex > Names->Num )
  39.     {
  40.         static char ret[256];
  41.         sprintf_s ( ret, "INVALID NAME INDEX : %i > %i", NameIndex, Names->Num );
  42.         return ret;
  43.     }
  44.     else
  45.     {
  46.         //return Names->Data[ NameIndexFix ]->Name;
  47.         return Names->Data[ NameIndex ]->Name;
  48.     }
  49. }
  50.  
  51. void ObjectDump()
  52. {
  53.     // log file
  54.     FILE* Log = NULL;  
  55.     fopen_s ( &Log, "ObjectDump.txt", "w+" );
  56.    
  57.     for ( DWORD i = 0x0; i < GObjObjects->Num; i++ )
  58.     {
  59.         // check if it's a valid object
  60.         if ( ! GObjObjects->Data[ i ] ) { continue; }
  61.        
  62.         // log the object
  63.         fprintf ( Log, "UObject[%06i] %-50s 0x%X\n", i, GetName ( GObjObjects->Data[ i ] ), GObjObjects->Data[ i ] );
  64.     }
  65.  
  66.     // close log
  67.     fclose ( Log );
  68. }
  69.  
  70. void NameDump()
  71. {
  72.     // log file
  73.     FILE* Log = NULL;  
  74.     fopen_s ( &Log, "NameDump.txt", "w+" );
  75.    
  76.     //for ( DWORD i = 0x0; i < Names->Num; i += 0x3 )
  77.     for ( DWORD i = 0x0; i < Names->Num; i++ )
  78.     {
  79.         // check if it's a valid object
  80.         if ( ! Names->Data[ i ] ) { continue; }
  81.        
  82.         // log the object
  83.         fprintf ( Log, "Name[%06i] %s\n", i, Names->Data[ i ]->Name );
  84.     }
  85.  
  86.     // close log
  87.     fclose ( Log );
  88. }
  89.  
  90. void onAttach()
  91. {  
  92.     //Sleep ( 60000 );
  93.  
  94.     NameDump();
  95.     ObjectDump();
  96. }
  97.  
  98. // entry point
  99. BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
  100. {
  101.     switch ( dwReason )
  102.     {
  103.         case DLL_PROCESS_ATTACH:
  104.             DisableThreadLibraryCalls ( hModule );
  105.             CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
  106.             return true;
  107.         break;
  108.  
  109.         case DLL_PROCESS_DETACH:
  110.             return true;
  111.         break;
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement