1。从RegisterClass 找到窗口回调函数处理地址。
2。从WM_COMMAND消息分支中找到菜单ID,比如“开局”ID=9C45,


3。代码利用显示底牌效果图


4。原来的循环代码,显示底牌代码直接拼接利用。
    在spider .text 上找一片空地,即搜索一大片"00 00.."
我找的是010021C1。

原代码:发44张牌,不亮底牌。
01005B7E       mov dword ptr ss:[ebp+8],ebx
01005B81       mov dword ptr ss:[ebp-8],ebx
01005B84       mov dword ptr ss:[ebp-4],ebx
01005B87       cmp dword ptr ss:[ebp-8],4  ;最后4张牌。
01005B8B       jnz short spider.01005B93
01005B8D       cmp dword ptr ss:[ebp-4],3
01005B91       jg short spider.01005BB9
01005B93       mov ecx,dword ptr ds:[esi+4]
01005B96       call spider.01007545
01005B9B       mov ecx,dword ptr ds:[esi+4]
01005B9E       push ebx        ;ebx=0,不亮底牌
01005B9F       push dword ptr ss:[ebp+8]  
01005BA2       call spider.01007400
01005BA7       mov ecx,dword ptr ds:[esi+8]
01005BAA       push ebx
01005BAB       push dword ptr ss:[ebp+8]
01005BAE       push dword ptr ss:[ebp-4]
01005BB1       call spider.01008069
01005BB6       inc dword ptr ss:[ebp+8]
01005BB9       inc dword ptr ss:[ebp-4]
01005BBC       cmp dword ptr ss:[ebp-4],0A  ;内循环10次
01005BC0       jl short spider.01005B87
01005BC2       inc dword ptr ss:[ebp-8]
01005BC5       cmp dword ptr ss:[ebp-8],5  ;外循环5次。
01005BC9       jl short spider.01005B84

原来代码:初始发牌的最后10张扑克是亮牌的。即第44-54张是明牌
01005C0F       xor eax,eax
01005C11       cmp edi,4
01005C14       setl al
01005C17       mov ecx,esi
01005C19       add eax,4    ;第5行,or 第6行
01005C1C       push eax      ;行
01005C1D       push edi      ;列
01005C1E       call spider.01005115    ;亮牌。


改进后的代码:
01005B9E   E9 1EC6FFFF  jmp spider.010021C1;修改成jmp 10021C1               
01005BA3   90      nop

在10021C1写入利用代码:
010021C1           6A 01        push 1
010021C3           FF75 08      push dword ptr ss:[ebp+8]
010021C6           E8 35520000  call spider.01007400
010021CB           8B4E 08      mov ecx,dword ptr ds:[esi+8]
010021CE           6A 01        push 1
010021D0           FF75 08      push dword ptr ss:[ebp+8]
010021D3           FF75 FC      push dword ptr ss:[ebp-4]
010021D6           E8 8E5E0000  call spider.01008069
010021DB           FF75 08      push dword ptr ss:[ebp+8];行
010021DE           FF75 FC      push dword ptr ss:[ebp-4];列
010021E1           8BCE         mov ecx,esi
010021E3           E8 2D2F0000  call spider.01005115 ;亮1张底牌
010021E8           E9 C9390000  jmp spider.01005BB6 ;跳回

10021C1:二进制代码
6A 01 FF 75 08 E8 35 52 00 00 8B 4E 08 6A 01 FF 75 08 FF 75 FC E8 8E 5E 00 00 FF 75 08 FF 75 FC 8B CE E8 2D 2F 00 00 E9 C9 39 00 00

5。剩下的50张牌也能看,但我不知道该放在原程序的什么位置显示,就算了。
   修改后的蜘蛛纸牌就像是没有颜色限制的高级空当接龙了:)

6。蜘蛛纸牌辅助工具 
spider_fix.exe

void Getit()
{
  ULONG *q=NULL,*p=NULL;
  unsigned char patch1[]={0xE9,0x1E,0xC6,0xFF,0xFF};
  unsigned char patch2[]={0x6A,0x01,0xFF,0x75,0x08,0xE8,0x35,0x52,0x00,0x00,0x8B,0x4E,0x08,0x6A,0x01,0xFF,0x75,0x08,0xFF,0x75,0xFC,0xE8,0x8E,0x5E,0x00,0x00,0xFF,0x75,0x08,0xFF,0x75,0xFC,0x8B,0xCE,0xE8,0x2D,0x2F,0x00,0x00,0xE9,0xC9,0x39,0x00,0x00};
  
  
  HWND hwnd=FindWindow("蜘蛛","蜘蛛");
  if(!hwnd)
  {
    MessageBoxA(NULL,"蜘蛛纸牌没打开!","information",NULL);
    return ;
  }
  DWORD dwProcessID;
  GetWindowThreadProcessId(hwnd,&dwProcessID);
  HANDLE hProcess=OpenProcess(PROCESS_VM_READ | PROCESS_CREATE_THREAD | PROCESS_VM_WRITE | PROCESS_VM_OPERATION,FALSE,dwProcessID);
  if (!hProcess  )
    return ;
  WriteProcessMemory(hProcess,(LPBYTE)0x1005B9E,patch1,sizeof(patch1),p);  
  WriteProcessMemory(hProcess,(LPBYTE)0x10021C1,patch2,sizeof(patch2),p);
  
  MessageBoxA(NULL,"ok","information",NULL);
  CloseHandle(hProcess);  
  
}

各位下载试用的请报一下在Vista or win7下有没有问题,我的机器老,只能跑XP,谢谢.
Spider_fix.rar