Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __declspec(naked)
- VOID
- CreateGuildAsm(
- VOID
- )
- {
- __asm {
- push ebp
- mov ebp,esp
- sub esp,18h
- push esi
- ;
- ; Initialize CDataStore structure
- ;
- xor esi,esi
- mov [ebp-14h],esi ; m_data
- mov [ebp-10h],esi ; m_base
- mov [ebp-0Ch],esi ; m_alloc
- mov [ebp-8],esi ; m_size
- mov dword ptr [ebp-4],0FFFFFFFFh ; m_read
- mov dword ptr [ebp-18h],007FF9E4h ; CDataStore___vftable_
- ;
- ; Put CMSG_GUILD_CREATE opcode
- ;
- push 81h ; CMSG_GUILD_CREATE
- lea ecx,[ebp-18h]
- mov eax,00418190h
- call eax ; CDataStore__PutInt32
- ;
- ; Put the guild name
- ;
- mov eax,[ebp+8]
- push eax ; Guild name
- lea ecx,[ebp-18h]
- mov eax,00418430h
- call eax ; CDataStore__PutInt32
- ;
- ; Send the packet
- ;
- lea ecx,[ebp-18h]
- mov [ebp-4],esi
- mov eax,005AB630h
- call eax ; ClientServices_Send
- ;
- ; CleanUp
- ;
- cmp dword ptr [ebp-0Ch],0FFFFFFFFh
- mov dword ptr [ebp-18h],007FF9E4h ; CDataStore___vftable_
- jz Exit
- lea eax,[ebp-0Ch]
- push eax
- lea ecx,[ebp-10h]
- push ecx
- lea edx,[ebp-14h]
- push edx
- lea ecx,[ebp-18h]
- mov eax,007FF9E8h
- call [eax] ; CDataStore__Release
- Exit:
- pop esi
- mov esp,ebp
- pop ebp
- ret 4
- }
- }
- BOOL
- CreateGuild(
- PCHAR GuildName
- )
- {
- INJDATA InjData;
- PVOID CodeBase;
- BYTE CreateGuildAsmParam[] =
- {
- 0x83, 0xC2, 0x0C, // add edx,0Ch
- 0x52 // push edx
- };
- RtlZeroMemory(&InjData, sizeof(INJDATA));
- CodeBase = AllocateVirtualMemory((DWORD_PTR)NULL, SizeOfProc(CreateGuildAsm), MEM_COMMIT | MEM_RESERVE);
- if (CodeBase == NULL) {
- return FALSE;
- }
- WriteBuffer((DWORD_PTR)CodeBase, CreateGuildAsm, SizeOfProc(CreateGuildAsm));
- SuspendThread(hGameThread);
- if (!InjectHooking()) {
- ResumeThread(hGameThread);
- return FALSE;
- }
- InjData.JumpPointer = pEndScene;
- StringCchCopyA((STRSAFE_LPSTR)InjData.Command, sizeof(InjData.Command) / sizeof(CHAR), (STRSAFE_LPSTR)GuildName);
- WriteBuffer((DWORD_PTR)EndSceneHook_Parameters, &InjData, sizeof(INJDATA));
- WriteDword((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_PARAMS, (DWORD)EndSceneHook_Parameters);
- WriteBuffer((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION, CreateGuildAsmParam, ARRAYSIZE(CreateGuildAsmParam));
- WriteByte((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION + ARRAYSIZE(CreateGuildAsmParam), 0xE8);
- WriteDword((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION + ARRAYSIZE(CreateGuildAsmParam) + 1,
- ((DWORD_PTR)CodeBase - ((DWORD_PTR)EndSceneHook_InjectedCode + OFFSET_ESHOOK_FUNCTION)) - 9);
- ResumeThread(hGameThread);
- Sleep(50);
- FreeVirtualMemory((DWORD_PTR)CodeBase, 0, MEM_RELEASE);
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement