freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

游戏安全丨喊话CALL分析-分析参数
2022-06-23 11:02:45
所属地 辽宁省

文章主要内容是有参CALL如何分析参数,在写汇编时如何把参数写进去以及如何调用。

以喊话CALL为例,喊话CALL是用代码来调用,打印任意的话。

1.打开x86dbg,文件-附加-打开游戏


2.bp send(设置send函数的断点)回车,断点,再运行

3.在游戏中,点击“当前”,输入123456,再运行x86dbg

4.点击调用堆栈,找到断点,复制整个表格

5.新建分析文本,粘贴整个表格,只留下主线程,在第三层74开始分析

6.运行,然后断点禁用或删除

7.Ctrl+G返回到这里,确定

8.返回到是Nop,它的上一层就是调用的call,可以看到有三个参数rdx、r8d(r8的32位)、rcx(在64位类似fastcall,它的前四个参数分别是rcx、rdx、r8、r9)

喊话CALL是会带一个发送的文本,有文本参数,所以先找一下参数。

9.1 点击call的地方下断点,在游戏内-当前-发送文本

9.2来看一下参数,发现其他rax、rsi、r10、r11里有文本,但在r8、r9、rcx、rdx里没有


因此判断不是我们要找的CALL,是底层或上一层call,取消断点

9.3文本参数应该前四个参数里

9.4 Ctrl+G返回到这里,确定

9.5下个断点,走动一下(防止是其他call),再说一句话,回车

9.6断下来,发现r8符合要求

9.7把参数记下来,然后断点运行

9.8复制寄存器,只留通用寄存器

9.9把rcx、rdx、r8、r9参数复制下来,可以确定r8是字符串地址

10.找rdx参数

10.1 Ctrl+G返回到这里,确定

10.2测试rdx,在当前多喊几次话,发现寄存器没有值,所以认为rdx是写死的值-0

10.3再切换主队,发现rdx有变化,所以判定rdx是说话的方式

10.4当前模式是0,组队模式是2,团队模式是12

11.找r9参数

11.1测试r9,多喊几遍,r9没有变化,r9是写死的值-FFFFFFFF

12.找rcx参数

12.1复制rcx,重启游戏并重新打开x86dbg,文件-附加-打开游戏

12.2喊话-断点,发现rcx的值变了,所以需要找一下值


12.3返回调用,发现rcx来自与rbp+620,然后找一下620

使用x64dbg继续调也可以,使用ida看起来更方便

12.4把64位客户端在64ida里打开

12.5 CTRL+G跳转到返回的位置上,发现没有rcx赋值

13.因为很难找到rcx,所以找到另一个突破点

13.1在寄存器里发现rbx和rcx一样,就以rbx为突破点,找到了rbx对rcx的赋值

13.2怀疑没有通过src对rcx赋值,而是通过rbx对rcx赋值之后,通过跳转到参数传递,直接调用喊话CALL

13.3 若是上述情况,需要先找rbx的值

13.3.1发现是变量Var EB0给rbx赋值

13.3.2再寻找变量Var EB0,发现是rax赋值给变量Var EB0

13.3.3 rax值来源于上面的call,call的返回值是rax

13.4 Rcx=那个call的返回值

13.4.1进一层,Rax就是call的返回值+48,然后取值

13.4.2再进去一层,发现一个基址放在rax里

13.4.3 Rcx=[0x基址+0x48]

到此数据分析的四个参数已经都找到了

# 渗透测试 # 内网渗透 # 漏洞分析 # CTF # 网络安全技术
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者