wxr1224 发表于 5 天前

棋牌游戏详细分析---存银子Call

这个游戏存银子Call,从银子数量变化去找已经晚了,使用之前搜索字符串,或者模块间调用Call,全部下断,然后不停地取消断点,逐步逼近,就会找到ClientCo.PropCore::CPropClient::SendMsg_SaveMoney, 这个函数就很明显,你可以直接到DLL导出函数查到这里下断,你会发现这个就是点击存银子时候就会立即被断下来mov   eax, dword ptr push    eax这里eax就是你要存的银子数量,很简单但是还有个参数就是ecx是由edi得到的,mov   ecx, edi这个就相当麻烦了鼠标点击0046A068发现提示所以我们跟踪跳转发现来到了函数头这里下断然后再点击存银子按钮,发现断下后,是由MFC71U调用的所以这里就比较麻烦了,只能一步一步跟踪,看EDI的值到底是怎么来的单步运行你会发现,进入这个Call的时候,ECX已经被赋值跟踪到下图就会发现所以存银子Call的ECX是由EDI得到,而EDI是由上图mov   edi, dword ptr add   edi, 534所以ecx = + 534 (注意这里是地址)
所以关键是要找到函数头那里的ECX的来源在函数头下断被断下来的寄存器如下发现这里找ECX的来源用OD也好,用CE也好,根本无法获得具体来源,最终只好在数据窗口来到ECX值的内存下硬件写入DWORD,看这个值是如何写入到030E0A10的经过半天测试,发现点击时候会断下在堆栈里返回上第二层Call来到这个函数往上翻,找到函数头下断,关掉保险箱窗体,重新点击,断到函数头,看堆栈发现还是MFC71U调用此函数此时寄存器为上图中间,ECX会赋值给ESI,发现这个ECX为0308BD88眼熟之前找坐下Call也会出现这个所以上面红色标记的0308BD88应该就是牛牛大厅的主窗体对象指针了,而存银子窗体应该是大厅主窗体的子窗体。单步运行到下图运行到00441D1A时候出现mov   ecx, dword ptr 此时ECX正好就是上面要找的030E0A10而下面的mov   dword ptr , edi也会把窗体指针保存在mov   dword ptr 里面所以由此可知道存银子Call的那个Ecx参数如下注意参数是地址,而不是值哦发现游戏必须先创建一次存银子窗体,这个存银子Call参数Ecx才有效,不然直接调用游戏崩溃附上我找的CE表
Dd 00467EB8    8B86 感谢楼主~~支持下下   mov eax,dword ptr ds:00467EBE    50            push eax00467EBF    8BCF            mov ecx,edi00467EC1    90            nop00467EC2    E8 19B67F02   call ClientCo.PropCore::CPropClient::Sen>


例:Push 钱Mov ecx,0x0call 02C634E0=234e0+client的基址

大椿 发表于 5 天前

看不懂是什么用???????

linxiansen 发表于 5 天前

PYG有你更精彩!

sunboyzh 发表于 4 天前

是边锋棋牌?怎么用的啊?

shiqiangge 发表于 3 天前

用金山游侠可否?
页: [1]
查看完整版本: 棋牌游戏详细分析---存银子Call