首页
社区
课程
招聘
[讨论]献给天下想做魔兽对战平台的人---No3---获取开始游戏时,玩家列表
发表于: 2009-5-12 14:17 9273

[讨论]献给天下想做魔兽对战平台的人---No3---获取开始游戏时,玩家列表

2009-5-12 14:17
9273
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
关注LZ中~
2009-5-12 16:59
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
发了就发了,你删了内容干什么?
2009-5-13 20:16
0
雪    币: 263
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
真搞不懂
老外早都贴过公开的开源的协议和代码了
国人还总是....
2009-5-13 21:17
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
lz 发的东西为什么总是带点广告的性质
2009-5-13 21:47
0
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
都没了啊
2009-5-13 22:23
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哪儿能找到?
我搜到一个关于Bnet的。lan的没怎么看到啊。
2009-5-13 23:18
0
雪    币: 64
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
/************************************************************************
获取开始游戏时,玩家列表(还有其他更好的方法,比如HF的方法就更NB)
作者:MentalDease
地址:http://hi.baidu.com/堕落的神曲
时间:2009-5-12
For War3 1.20E(不保证版本通用性)
这个是很早前写的代码,不怎么好看,大家将就下
***********************************************************************/
#include <windows.h>
#include <stdio.h>
#include <string.h>

char buffer[256];
DWORD JmpAddr,RetAddr590;
DWORD RetAddr578;
BYTE JmpCode590[9]={0xe9,0,0,0,0,0x90,0x90,0x90,0x90}; //前9个字节
BYTE JmpCode578[6]={0xe9,0,0,0,0,0x90};  //前6个字节
DWORD Func590;
DWORD Func578;
DWORD Nameaddr_tmp,Nameaddr = 0;

int player_num;
BOOLEAN  Logged = FALSE;
char PlayersName[30][30] ={0};

void _stdcall GetSth(char * pstr){
   if (strncmp (pstr, "LOADING_LOADING", 0xF) == 0 && Nameaddr &&!Logged)
   {
     player_num = 0;
     DWORD tmp = Nameaddr;
     DWORD OldProtect;
     while (1)
    {
      tmp = Nameaddr + 0x18; //序号偏移

      VirtualProtectEx ((HANDLE)-1,(PVOID)Nameaddr, 0x10, PAGE_READWRITE, &OldProtect);
      if (*(int *)Nameaddr == 0)
      {
        //player_num --;
        VirtualProtectEx ((HANDLE)-1,(PVOID)Nameaddr, 0x10, OldProtect, NULL);
        break;
      }
      memcpy(PlayersName[player_num], (PVOID)Nameaddr, 0x20);
      VirtualProtectEx ((HANDLE)-1,(PVOID)Nameaddr, 0x10, OldProtect, NULL);

      Nameaddr += 0x1d8;  //用户块偏移
      player_num++;

    }
    Logged = TRUE;

   }

}
__declspec(naked) void JmpFunc590(void){
  __asm{
    push eax
    push ebx
    push edx
    mov eax,esp
    add eax,4*4
    mov ebx,[eax]
    mov dl,byte ptr[ebx]
    cmp dl,'L'
    jz  next
    jmp end
next:
    inc ebx
    mov dl,byte ptr[ebx]
    cmp dl,'O'
    jz  good
    jmp end
good: //包含目标字符
    push [eax]
    call GetSth
end:
    pop edx
    pop ebx
    pop eax
    push ebp
    mov ebp,esp
    sub esp,0x400
    jmp dword ptr[RetAddr590]
  }
}

void __stdcall FindNameAddr(char * pstr){
  if (!strncmp(pstr, "%s %u", 5) )
  {
    __asm{
      mov eax,Nameaddr_tmp
      and eax, 0x00000fff;
      xor  eax, 0x00000204;
      cmp eax,0
      jz  GoodAddr
      jmp BadAddr
    }
GoodAddr:
    Nameaddr = Nameaddr_tmp;
    Logged = FALSE;
BadAddr:
    return;
  }
}
__declspec(naked) void JmpFunc578(void){
  __asm{
    pop    ebp
    mov    eax, dword ptr  [esp+0XC]
    push  eax
    mov    eax, dword ptr  [esp+0x1C]
    add    eax,0x174
    mov    Nameaddr_tmp, eax
    call  FindNameAddr
    push  ebp
    mov    ebp, esp
    mov    eax, dword ptr[ebp+0x10]
    push    edi
    mov    edi, dword ptr[ebp+0x8]
    mov    ecx, edi
    jmp    dword ptr [RetAddr578]
  }
}

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
           )
{
  if(ul_reason_for_call==DLL_PROCESS_ATTACH){
    if (!GetModuleHandle("War3.exe"))
    {
      OutputDebugString("I am not in War3.exe");
      return TRUE;
    }
    DWORD dwret;
    HMODULE hDll =LoadLibrary( "Storm.dll" );
    Func590 = ( DWORD )GetProcAddress( hDll, (LPCTSTR)590 ); //钩住这两个函数
    Func578 = ( DWORD )GetProcAddress (hDll, (LPCTSTR)578 );

    // hook func590
    JmpAddr=(DWORD)JmpFunc590-Func590-5;
    RetAddr590=(DWORD)Func590+9;
     memcpy(JmpCode590+1,(char *)&JmpAddr,4);  //生成跳转指令
    WriteProcessMemory((HANDLE)-1,(PVOID)Func590,JmpCode590,9,&dwret);

    // hook func578
    JmpAddr = (DWORD)JmpFunc578-(Func578+6)-5;
    RetAddr578 = (DWORD)Func578+6+6;
    memcpy (JmpCode578+1,(char *)&JmpAddr,4); //生成跳转指令
    WriteProcessMemory((HANDLE)-1,(PVOID)(Func578+6),JmpCode578,6,&dwret);
  }
    return TRUE;
}
2009-5-16 14:19
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=名叫教主;625076]/************************************************************************
获取开始游戏时,玩家列表(还有其他更好的方法,比如HF的方法就更NB)
作者:MentalDease
地址:http://hi.baidu.com...[/QUOTE]

你NB。。你继续
2009-5-16 15:45
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这么快就有fans了
2009-6-25 20:43
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
11
比较有意思的主题,可惜内容少了
2009-7-26 19:05
0
雪    币: 61
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
可惜看到不到了。。。
2009-7-26 19:24
0
游客
登录 | 注册 方可回帖
返回
//