Advertisement
Guest User

Untitled

a guest
May 9th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.59 KB | None | 0 0
  1. //////////////////// CTextSprite.h ////////////////////////////////////
  2.  
  3. struct CTextSprite  // sizeof=0x3C
  4. {
  5.     int     type;
  6.     char    field_4;
  7.     char    field_5;
  8.     short   textureID;
  9.     float   cornerA_X;
  10.     float   cornerA_Y;
  11.     float   cornerB_X;
  12.     float   cornerB_Y;
  13.     float   angle;
  14.     int     transparentColor;
  15.     char    gxt[8];
  16.     int     field_28;
  17.     int     field_2C;
  18.     int     field_30;
  19.     int     field_34;
  20.     char    textboxStyle;
  21.     char    field_39[3];
  22. };
  23.  
  24.  
  25. ///////////////////// INJECTOR.H ////////////////////////////
  26.  
  27. #include <Windows.h>
  28.  
  29.  
  30. void WriteMemory(void* Address, int size, DWORD value, bool vp = false)
  31. {
  32.     DWORD oldProtect;
  33.     if(vp)
  34.         VirtualProtect(Address, size, PAGE_EXECUTE_READWRITE, &oldProtect);
  35.  
  36.     memcpy(Address, &value, size);
  37.  
  38.     if(vp)
  39.         VirtualProtect(Address, size, oldProtect, &oldProtect);
  40. }
  41.  
  42. #define GV_UNK      -1
  43. #define GV_US10     1
  44. #define GV_EU10     2
  45. #define GV_EU101    3
  46.  
  47.  
  48. DWORD GetGameVersion(void)
  49. {
  50.     return
  51.             (*(DWORD*)0x8A6168 == 0x8523A0)? GV_EU101:      //1.01 eu
  52.             (*(DWORD*)0x8A4004 == 0x8339CA)? GV_US10:       //1.0 us
  53.             (*(DWORD*)0x8A4004 == 0x833A0A)? GV_EU10:       //1.0 eu
  54.             GV_UNK;                                         //other
  55. }
  56.  
  57.  
  58.  
  59. struct
  60. {
  61.     void LoadAddresses(DWORD GV)
  62.     {
  63.         switch(GV)
  64.         {
  65.             case GV_US10:
  66.                 sub_464980  = 0x464980; // sub_ADDRESS based in 1.0US
  67.                 sub_465A40  = 0x465A40;
  68.                 sub_84A7B0  = 0x84A7B0;
  69.                 sub_856170  = 0x856170;
  70.                 loadScm     = 0x468D50;
  71.                 opcode_038F = 0x484075;
  72.             break;
  73.  
  74.  
  75.  
  76.  
  77.         }
  78.  
  79.  
  80.  
  81.     }
  82.  
  83.  
  84.     DWORD sub_464980;
  85.     DWORD sub_465A40;
  86.     DWORD sub_84A7B0;
  87.     DWORD sub_856170;
  88.     DWORD loadScm;
  89.     DWORD opcode_038F;
  90.  
  91. } Address;
  92.  
  93. /////////////////////////// dllmain.cpp /////////////////////////////////
  94.  
  95. #include <Windows.h>
  96. #include <stdio.h>
  97. #include "CTextSprite.h"
  98. #include "Injector.h"
  99.  
  100. #define     NEW_SIZE    1024    // old is 128
  101.  
  102. CTextSprite textSprites[NEW_SIZE];
  103. DWORD*      textures;//[NEW_SIZE];
  104.  
  105.  
  106. void Inject_textSprites(void);
  107. void Inject_textures(void);
  108.  
  109.  
  110.  
  111.  
  112. BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
  113. {
  114.     DWORD GameVersion;
  115.  
  116.     switch (ul_reason_for_call)
  117.     {
  118.         case DLL_PROCESS_ATTACH:
  119.             Address.LoadAddresses(GetGameVersion());
  120.  
  121.             Inject_textSprites();
  122.             Inject_textures();
  123.             break;
  124.  
  125.         case DLL_THREAD_ATTACH:
  126.         case DLL_THREAD_DETACH:
  127.         case DLL_PROCESS_DETACH:
  128.             break;
  129.     }
  130.     return TRUE;
  131. }
  132.  
  133.  
  134. void Inject_textSprites(void)
  135. {
  136.     /*
  137.     .text:0046498A 054                 mov     esi, offset _textSprites ; used for mini-games
  138.     .text:00469175 024                 cmp     esi, (offset _textSprites.cornerA_X+2) ; used for mini-games
  139.     .text:004691A2 024                 mov     esi, (offset _textSprites.transparentColor+2) ; used for mini-games
  140.     .text:0046A196 020                 mov     eax, offset _textSprites.field_4 ; used for mini-games
  141.     .text:0046E5B2 0D4                 mov     dword ptr _textSprites.type[eax], 5 ; used for mini-games
  142.     .text:0046E5BD 0D4                 mov     _textSprites.textureID[eax], dx ; used for mini-games
  143.     .text:0046E5CC 0D4                 fstp    _textSprites.cornerA_X[eax] ; used for mini-games
  144.     .text:0046E5FC 0D4                 fstp    _textSprites.cornerA_Y[eax] ; used for mini-games
  145.     .text:0046E608 0D4                 fstp    _textSprites.cornerB_X[eax] ; used for mini-games
  146.     .text:0046E61A 0D4                 fstp    _textSprites.cornerB_Y[eax] ; used for mini-games
  147.     .text:0046E630 0D4                 fstp    _textSprites.angle[eax] ; used for mini-games
  148.     .text:0046E655 0D8                 lea     ecx, _textSprites.transparentColor[esi] ; used for mini-games
  149.     .text:0046E667 0D4                 mov     _textSprites.gxt[esi], 0 ; used for mini-games
  150.  
  151.     .text:004770A7 090                 mov     dword ptr _textSprites.type[eax], 2 ; used for mini-games
  152.     .text:004770B1 090                 mov     _textSprites.textureID[eax], 0FFFFh ; used for mini-games
  153.     .text:004770C5 094                 fstp    _textSprites.cornerA_X[eax] ; used for mini-games
  154.     .text:004770EF 0A0                 fstp    _textSprites.cornerA_Y[eax] ; used for mini-games
  155.     .text:004770FB 0A0                 fstp    _textSprites.cornerB_X[eax] ; used for mini-games
  156.     .text:00477105 0A0                 fstp    _textSprites.cornerB_Y[eax] ; used for mini-games
  157.     .text:0047710B 0A0                 mov     _textSprites.angle[eax], 0 ; used for mini-games
  158.     .text:0047711B 094                 lea     ecx, _textSprites.transparentColor[edi] ; used for mini-games
  159.     .text:00477133 090                 lea     edx, _textSprites.gxt[esi] ; used for mini-games
  160.     .text:00477151 090                 mov     byte ptr (_textSprites.field_28+2)[edi], cl ; used for mini-games
  161.     .text:00477157 090                 mov     _textSprites.field_34[edi], 1 ; used for mini-games
  162.     .text:00477161 090                 mov     dword ptr _textSprites.textboxStyle[edi], ebx ; used for mini-games
  163.  
  164.  
  165.     .text:00483ED4 168                 mov     dword ptr _textSprites.type[eax], 4 ; used for mini-games
  166.     .text:00483EDF 168                 mov     _textSprites.textureID[eax], dx ; used for mini-games
  167.     .text:00483EEE 168                 fstp    _textSprites.cornerA_X[eax] ; used for mini-games
  168.     .text:00483F1E 168                 fstp    _textSprites.cornerA_Y[eax] ; used for mini-games
  169.     .text:00483F2A 168                 fstp    _textSprites.cornerB_X[eax] ; used for mini-games
  170.     .text:00483F3C 168                 fstp    _textSprites.cornerB_Y[eax] ; used for mini-games
  171.     .text:00483F42 168                 mov     _textSprites.angle[eax], 0 ; used for mini-games
  172.     .text:00483F6F 16C                 lea     ecx, _textSprites.transparentColor[esi] ; used for mini-games
  173.     .text:00483F81 168                 mov     _textSprites.gxt[esi], 0 ; used for mini-games
  174.  
  175.  
  176.     .text:00483FDB 168                 mov     dword ptr _textSprites.type[eax], 3 ; used for mini-games
  177.     .text:00483FE7 168                 mov     _textSprites.textureID[eax], 0FFFFh ; used for mini-games
  178.     .text:00483FF8 168                 fstp    _textSprites.cornerA_X[eax] ; used for mini-games
  179.     .text:00484028 168                 fstp    _textSprites.cornerA_Y[eax] ; used for mini-games
  180.     .text:00484036 170                 fstp    _textSprites.cornerB_X[eax] ; used for mini-games
  181.     .text:00484048 170                 fstp    _textSprites.cornerB_Y[eax] ; used for mini-games
  182.     .text:0048404E 170                 mov     _textSprites.angle[eax], 0 ; used for mini-games
  183.  
  184.     .text:004840DA 16C                 lea     ecx, (_textSprites.textboxStyle+1DC4h)[ecx*4] ; used for mini-games
  185.  
  186.     .text:00485590 168                 mov     _textSprites.field_4[ecx], 1 ; used for mini-games
  187.     .text:004855A8 168                 mov     _textSprites.field_4[edx], 0 ; used for mini-games
  188.  
  189.     .text:0084A791 010                 push    offset _textSprites ; objects
  190.  
  191.     .text:008561BC 00C                 push    offset _textSprites ; objects
  192.  
  193.     */
  194.  
  195. }
  196.  
  197.  
  198.  
  199.  
  200. void Inject_textures(void)
  201. {
  202.     textures = new DWORD[NEW_SIZE];
  203.    
  204.     DWORD atextures = (DWORD) textures;
  205.    
  206. /////// DEBUG TEXT /////////////////////////////////////
  207.     char atxt[12];
  208.     sprintf(atxt, "%X", atextures);
  209.     MessageBoxA(NULL, atxt, "Caption", MB_OK);
  210. ///////////////////////////////////////////////////////
  211.  
  212.     //0x036A2F50
  213.     WriteMemory((void*)(Address.sub_464980 + 0xFA + 0x3), 4, atextures, true);      // if remove it works
  214.     WriteMemory((void*)(Address.sub_464980 + 0x1ED + 0x3), 4, atextures, true);     // -
  215.  
  216.     WriteMemory((void*)(Address.opcode_038F + 0x65 + 0x3), 4, atextures, true);
  217.    
  218.     //////////////////
  219.     //WriteMemory((void*)(Address.sub_465A40 + 0x2), 1, 0xBE, true);  // (mov esi, ...), HOODLUM shit.
  220.     //WriteMemory((void*)(Address.sub_465A40 + 0x2 + 0x1), 4, atextures, true);
  221.     //////////////////
  222.  
  223.     WriteMemory((void*)(0x0401554 + 0x1), 4, atextures, true);
  224.  
  225.     //WriteMemory((void*)(Address.loadScm + 0x4B7 + 0x2), 4, atextures+0x1E, true);     // I SHOULD SET IT WHEN I DO THE SPRITES
  226.     WriteMemory((void*)(Address.loadScm + 0x4C6 + 0x1), 4, atextures, true);
  227.  
  228.     WriteMemory((void*)(Address.sub_84A7B0 + 0x11 + 0x1), 4, atextures, true);
  229.  
  230.     WriteMemory((void*)(Address.sub_856170 + 0xC + 0x1), 4, atextures, true);
  231.  
  232.  
  233.  
  234. /*
  235.     .text:00464A7A 05C                 lea     ecx, _textures[ecx*4]
  236.     .text:00464B6D 078                 lea     ecx, _textures[ecx*4]
  237.  
  238.     .text:00465A42 008                 mov     esi, offset _textures
  239.     .text:00469207 024                 cmp     esi, (offset _textures+1Eh)
  240.     .text:00469216 024                 mov     esi, offset _textures
  241.  
  242.     .text:0084A7C1 010                 push    offset _textures ; objects
  243.    
  244.     .text:0085617C 00C                 push    offset _textures ; objects
  245.  
  246.     .text:004840DA 16C                 lea     ecx, (_textSprites.textboxStyle+1DC4h)[ecx*4] ; used for mini-games
  247. */
  248.  
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement