dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 48|回复: 0

[C/C++基础] 棋牌游戏详细分析---存银子Call

[复制链接]
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    8

    主题

    336

    帖子

    838

    积分

    技冠群雄

    Rank: 6Rank: 6

    积分
    838

    发表于 3 天前 | 显示全部楼层 |阅读模式
    程序人生
    课程方向: C/C++ 
    课程类型: 项目实战 

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    这个游戏存银子Call,从银子数量变化去找已经晚了,使用之前搜索字符串,或者模块间调用Call,全部下断,然后不停地取消断点,逐步逼近,就会找到
    图片1.jpg
    ClientCo.PropCore::CPropClient::SendMsg_SaveMoney, 这个函数就很明显,你可以直接到DLL导出函数查到
    图片2.jpg

    这里下断,你会发现这个就是点击存银子时候就会立即被断下来
    mov     eax, dword ptr [esi+1334]
    push    eax
    这里eax就是你要存的银子数量,很简单
    但是还有个参数就是ecx是由edi得到的,
    mov     ecx, edi
    这个就相当麻烦了
    鼠标点击0046A068发现提示
    图片3.jpg
    所以我们跟踪跳转
    图片4.jpg
    发现来到了函数头
    图片5.jpg
    这里下断然后再点击存银子按钮,发现断下后,是由MFC71U调用的
    图片6.jpg
    所以这里就比较麻烦了,只能一步一步跟踪,看EDI的值到底是怎么来的
    单步运行
    图片7.jpg

    你会发现,进入这个Call的时候,ECX已经被赋值
    跟踪到下图就会发现
    图片8.jpg
    图片9.jpg
    所以存银子CallECX是由EDI得到,而EDI是由上图
    mov     edi, dword ptr [esi+474]
    add     edi, 534
    所以ecx = [esi + 474] + 534 (注意这里是地址)

    所以关键是要找到函数头那里的ECX的来源
    在函数头下断被断下来的寄存器如下
    图片10.jpg
    发现这里找ECX的来源用OD也好,用CE也好,根本无法获得具体来源,最终只好在数据窗口来到ECX值的内存下硬件写入DWORD,看这个值是如何写入到030E0A10的
    图片11.jpg
    经过半天测试,发现点击 图片21.jpg 时候会断下
    图片12.jpg
    在堆栈里返回上第二层Call
    图片13.jpg
    来到
    图片14.jpg 这个函数往上翻,找到函数头下断,关掉保险箱窗体,重新点击file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml13512/wps16.png,断到函数头,看堆栈发现还是MFC71U调用此函数
    图片15.jpg
    此时寄存器为
    图片16.jpg
    上图中间,ECX会赋值给ESI,发现这个ECX为0308BD88眼熟
    之前找坐下Call也会出现这个
    图片17.jpg
    所以上面红色标记的0308BD88应该就是牛牛大厅的主窗体对象指针了,而存银子窗体应该是大厅主窗体的子窗体。
    单步运行到下图
    图片18.jpg
    运行到00441D1A时候出现mov     ecx, dword ptr [esi+286C]
    此时ECX正好就是上面要找的030E0A10
    而下面的
    mov     dword ptr [esi+286C], edi
    也会把窗体指针保存在mov     dword ptr [esi+286C]里面
    所以由此可知道存银子Call的那个Ecx参数如下
    图片19.jpg
    注意参数是地址,而不是值哦
    图片20.jpg
    发现游戏必须先创建一次存银子窗体,这个存银子Call参数Ecx才有效,不然直接调用游戏崩溃
    附上我找的CE表

    Dd [5030cc]
    00467EB8    8B86 34130000   mov eax,dword ptr ds:[esi+0x1334]
    00467EBE    50              push eax
    00467EBF    8BCF            mov ecx,edi
    00467EC1    90              nop
    00467EC2    E8 19B67F02     call ClientCo.PropCore::CPropClient::Sen>





    例:
    Push 钱
    Mov ecx,0x0
    call 02C634E0
    =
    234e0+client的基址:
    转载说明:以下文章来源于shou8shou.cn







    温馨提示:
    1、本站所有内容均为互联网收集或网友分享或网络购买,本站不破解、不翻录任何视频!
    2、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意!
    3、本站资源仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
    4、本站资源质量虽均经精心审查,但也难保万无一失,若发现资源有问题影响学习请一定及时点此进行问题反馈,我们会第一时间改正!
    5、若发现链接失效了请联系管理员,管理员会在2小时内修复
    6、如果有任何疑问,请加客服QQ:1300822626 2小时内回复你!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2025-7-30 04:21 , Processed in 0.095893 second(s), 13 queries , Redis On.

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表