A forum for reverse engineering, OS internals and malware analysis 

All off-topic discussion goes here.
 #1668  by LeChuck
 Mon Jul 26, 2010 5:49 pm
Hi guys,

I don't know if it's right to post it here, but since it's the "offtopic" subforum I guess it's ok.

I'm looking for a developer to make some modifications to the Warcraft 3 game client, maybe someone is interested in a small freelance job :P. The project involves:

1. Expanding AT (Arranged Team) and Tournament-AT invitation limit from 4 to 5 players.
2. Joining a Custom Game without going throw Join-Custom-Game window.
3. Disable/Enable Play-Game and Arranged-Team Buttons.

We need to call #2 and #3 from our own dll, like joingame(name, ip, port) enable(AT)/disable(AT)
If some are not possible, i'm open to suggestions.

I'll provide game files and server access if necessary. For those who never touch Warcraft 3, I am attaching an image that maybe helps understanding what I am talking about.

Image
 #1677  by Not_ice
 Wed Jul 28, 2010 2:36 pm
Well there are a few course's of action here..window automation, message hooking,and the like are all the easiest methods..
what you want is a bit more dificult but still doable, and there are a few methods of doing this as well, but I think automation should be used first if you've got a botting scenerio..ie you can record locations of the mouse clicks and use this in code to get at needs done.. :]

Also if you already have a dll in the client you can you 'direct calling' from within the dll, or you can use indirect calling through RPC and have a controller window..Theres more on RPC mechanism's and usages around the net, but basicly its just a Modified PORT_MESSAGE structure and code in the client that communications with controller and handle's messages similar to this.
Code: Select all
WaitForServer:
		InitializeSinApiMessage(&ApiReplyMessage,sizeof(SIN_API_MESSAGE),LPC_NEW_MESSAGE,SIN_SUSPEND_CLIENT);
		Status = NtRequestWaitReplyPort(PortHandle,(PORT_MESSAGE*)&ApiReplyMessage,(PORT_MESSAGE*)&ApiRecvMessage);
		switch(ApiRecvMessage.Status)
		{
			case 0://do nothing wait for further instruction ...
			{
				goto WaitForServer;
			}							
			case 1://execute Api Mapped into client process by server
			{
				if(ApiRecvMessage.StartAddress == 0)
				{
					goto WaitForServer;
				}
				else
				{
					if(ApiRecvMessage.Data != 0)
					{
						pClientApi = (SinSrvClientApiWithParameter)ApiRecvMessage.StartAddress;
						pClientApi((void*)ApiRecvMessage.Data);
						goto WaitForServer;
					}
					else
					{
						ClientApi = (SinSrvClientApi)ApiRecvMessage.StartAddress;
						ClientApi();
						goto WaitForServer;
					}
				}
			}
		 }
 #1680  by LeChuck
 Thu Jul 29, 2010 12:40 am
Code: Select all
<00023> 0014069E P WM_SYSKEYDOWN nVirtKey:VK_MENU cRepeat:1 ScanCode:38 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
<00024> 0014069E P WM_SYSKEYDOWN nVirtKey:'G' cRepeat:1 ScanCode:22 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
<00025> 0014069E P WM_SYSCHAR chCharCode:'103' (103) cRepeat:1 ScanCode:22 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
<00026> 0014069E S WM_SYSCOMMAND uCmdType:SC_KEYMENU xPos:103 yPos:0 (used mnemonic)
<00027> 0014069E R WM_SYSCOMMAND
<00028> 0014069E P WM_SYSKEYUP nVirtKey:'G' cRepeat:1 ScanCode:22 fExtended:0 fAltDown:1 fRepeat:1 fUp:1
<00029> 0014069E P WM_KEYUP nVirtKey:VK_MENU cRepeat:1 ScanCode:38 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
it's not using messages for changing windows. That's all i see when pressing ALT+G (hotkey for the custom game window)
ATM i'm sending ALT+G from dll but it only works on screens where the custom game button is available. :P