Advertisement
Guest User

Untitled

a guest
Feb 17th, 2015
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. __declspec(naked)
  2. VOID
  3. CreateGuildAsm(
  4.     VOID
  5.     )
  6. {
  7.     __asm {
  8.         push    ebp
  9.         mov     ebp,esp
  10.         sub     esp,18h
  11.         push    esi
  12.  
  13. ;
  14. ; Initialize CDataStore structure
  15. ;
  16.         xor     esi,esi
  17.         mov     [ebp-14h],esi                   ; m_data
  18.         mov     [ebp-10h],esi                   ; m_base
  19.         mov     [ebp-0Ch],esi                   ; m_alloc
  20.         mov     [ebp-8],esi                     ; m_size
  21.         mov     dword ptr [ebp-4],0FFFFFFFFh    ; m_read
  22.         mov     dword ptr [ebp-18h],007FF9E4h   ; CDataStore___vftable_
  23.  
  24. ;
  25. ; Put CMSG_GUILD_CREATE opcode
  26. ;
  27.         push    81h                             ; CMSG_GUILD_CREATE
  28.         lea     ecx,[ebp-18h]
  29.         mov     eax,00418190h
  30.         call    eax                             ; CDataStore__PutInt32
  31.  
  32. ;
  33. ; Put the guild name
  34. ;
  35.         mov     eax,[ebp+8]
  36.         push    eax                             ; Guild name
  37.         lea     ecx,[ebp-18h]
  38.         mov     eax,00418430h
  39.         call    eax                             ; CDataStore__PutInt32
  40.  
  41. ;
  42. ; Send the packet
  43. ;
  44.         lea     ecx,[ebp-18h]
  45.         mov     [ebp-4],esi
  46.         mov     eax,005AB630h
  47.         call    eax                             ; ClientServices_Send
  48.  
  49. ;
  50. ; CleanUp
  51. ;
  52.         cmp     dword ptr [ebp-0Ch],0FFFFFFFFh
  53.         mov     dword ptr [ebp-18h],007FF9E4h   ; CDataStore___vftable_
  54.         jz      Exit
  55.  
  56.         lea     eax,[ebp-0Ch]
  57.         push    eax
  58.         lea     ecx,[ebp-10h]
  59.         push    ecx
  60.         lea     edx,[ebp-14h]
  61.         push    edx
  62.         lea     ecx,[ebp-18h]
  63.         mov     eax,007FF9E8h
  64.         call    [eax]                           ; CDataStore__Release
  65.  
  66. Exit:
  67.         pop     esi
  68.         mov     esp,ebp
  69.         pop     ebp
  70.         ret     4
  71.     }
  72. }
  73.  
  74. BOOL
  75. CreateGuild(
  76.     PCHAR GuildName
  77.     )
  78. {
  79.     INJDATA InjData;
  80.     PVOID   CodeBase;
  81.     BYTE    CreateGuildAsmParam[] =
  82.     {
  83.         0x83, 0xC2, 0x0C,   // add edx,0Ch
  84.         0x52                // push edx
  85.     };
  86.  
  87.     RtlZeroMemory(&InjData, sizeof(INJDATA));
  88.  
  89.     CodeBase = AllocateVirtualMemory((DWORD_PTR)NULL, SizeOfProc(CreateGuildAsm), MEM_COMMIT | MEM_RESERVE);
  90.     if (CodeBase == NULL) {
  91.         return FALSE;
  92.     }
  93.     WriteBuffer((DWORD_PTR)CodeBase, CreateGuildAsm, SizeOfProc(CreateGuildAsm));
  94.  
  95.     SuspendThread(hGameThread);
  96.  
  97.     if (!InjectHooking()) {
  98.         ResumeThread(hGameThread);
  99.         return FALSE;
  100.     }
  101.  
  102.     InjData.JumpPointer = pEndScene;
  103.     StringCchCopyA((STRSAFE_LPSTR)InjData.Command, sizeof(InjData.Command) / sizeof(CHAR), (STRSAFE_LPSTR)GuildName);
  104.  
  105.     WriteBuffer((DWORD_PTR)EndSceneHook_Parameters, &InjData, sizeof(INJDATA));
  106.  
  107.     WriteDword((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_PARAMS, (DWORD)EndSceneHook_Parameters);
  108.  
  109.     WriteBuffer((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION, CreateGuildAsmParam, ARRAYSIZE(CreateGuildAsmParam));
  110.     WriteByte((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION + ARRAYSIZE(CreateGuildAsmParam), 0xE8);
  111.     WriteDword((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION + ARRAYSIZE(CreateGuildAsmParam) + 1,
  112.         ((DWORD_PTR)CodeBase - ((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION)) - 9);
  113.  
  114.     ResumeThread(hGameThread);
  115.  
  116.     Sleep(50);
  117.  
  118.     FreeVirtualMemory((DWORD_PTR)CodeBase, 0, MEM_RELEASE);
  119.  
  120.     return TRUE;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement