Advertisement
Guest User

Untitled

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