首页 > 其他分享 >x86游戏逆向之实战游戏线程发包与普通发包的逆向

x86游戏逆向之实战游戏线程发包与普通发包的逆向

时间:2023-05-27 12:33:21浏览次数:48  
标签:逆向 gt 游戏 ...... 发包 线程 断点

网游找Call的过程中难免会遇到不方便通过数据来找的或者仅仅查找数据根本找不到的东西,但是网游中一般的工程肯定要发给服务器,比如你打怪,如果都是在本地处理的话就特别容易产生变态功能,而且不方便与其他玩家通信,所以找到了游戏发包的地方,再找功能就易如反掌了。

 

在游戏逆向过程中,通常会遇到下面几种情况的发包。

1.在主线程直接发包

 

游戏某功能-->组包-->加密-->发送

2.在线程中发包

 

Thread1:游戏某功能-->组包-->加密-->写缓冲区

 

Thread1:死循环->读缓冲区是否有内容->发送

主线程发包的话伪代码大致如下:


bool GameFunc(...)

{

if(xxx)

{

......

......

......

send(x,x,x,x);

}

}


 

 

线程发包大致伪代码如下:


char g_szBuf[4096]={0};

bool GameFunc(...)

{

if(xxx)

{

......

......

......

//打开互斥

WriteProcessMemory(...,g_szBuf......);

}

}

 

DWORD WINAPI ThreadProc(LPVOID lpParameter)

{

char szTmpBuf[4096]={0};

while(1)

{

//打开互斥

if(strlen(g_szBuf)!=0)

{


memcpy(szTmpBuf,g_szBuf);

ZeroMemony(g_szBuf);

}

//关闭互斥

send(....,szTmpBuf....);

ZeroMemony(szTmpBuf);

Sleep(10);

}

 

}


 

当然。。以上代码肯定有错误,大概就是表达个意思,就是一个是直接组好包就发 一个是在线程里面发

1.主线程发包

 

在游戏里面如何分辨是不是主线程发包?

首先肯定是跳转到3大发包函数,send , sendto ,WSASend 分别下段。 如果下断点马上就断下,那么基本就是线程发包了。除此之外,是主线程发包的可能性比较大了。

这种情况下,bp ws2_32.send下好断点后,只要Crtr+f9多跳几层,每层都打好断点就很容易判断出功能函数了

 

2.线程发包

 

那么线程发包是什么情况呢?

就是在发包函数上下断点马上就断下,而且断的非常的频繁,基本就可以确定是线程发包了。

 

找线程发包的主要步骤如下:

找到真正的发包函数, 找到包内容的位置。 再跟包内容的写入位置,基本就可以找到正确的明文包了。

 

接下来具体分析线程发包,跳出线程发包有两种方法,如果游戏发包不频繁,建议使用第一种方法,如果游戏发包异常多,建议使用第二种方法

 

下面的演示以天龙八部私服和官服分别演示,因为天龙八部私服发包不频繁所以用来演示第一种方法,具体操作就是 进游戏有下send断点,然后对数据包下硬件访问断点,我们去游戏选怪,硬件断点断下后,删除我们下的断点,然后Ctrl+f9一层一层返回,每次返回的CALL都下个断点,然后让游戏跑起来,跑起来后我们再选怪,对断下的地方进行分析

19_34_16_93479

进游戏后 使用bp ws2_32.send下段,然后选怪,可以看到,立马就断下来了

19_34_24_31539

断下来后,我们右键data参数,跳转到内存窗口https://bpsend.net/thread-99.htm

19_34_37_71331

在内存窗口对这个内存首地址下断点,然后去游戏里面选怪

19_34_47_27572

选怪后游戏立马又断下来,这时候我们跳到上一层,下断,再跳再下断,多下几个。然后让游戏跑起来,再选怪

19_34_59_59882

然后断下来了,这就是选怪Call了。EAX就是怪物的ID,其他参数都可以获取到。这个Call就找到了

 

 

 

 

接下来是第二种方法:

为什么会产生这种方法呢?因为有的游戏发包太频繁了,你下好硬件断点后根本来不及操作就被游戏断点断下来了,所以不得已使用这种方法。

 

前面都是一样,下send断,然后对send的data参数下硬件断,这里会发现它一直断,不管你有没有做动作都一直断

19_44_30_97768

这就有点烦,不好继续找,不要着急,我们来看看上面说的线程发包的流程

Thread1:游戏某功能-->组包-->加密-->写缓冲区

 

Thread1:死循环->读缓冲区是否有内容->发送

比方说你是游戏的程序员,你要实现组包,或者加密的时候如果是以下代码:


......

......

......

组包\加密

......

......

......


 

你是会把它们封装成一个函数还是把这段代码到处复制?应该是封装一个函数方便一点吧?

既然是这样,那就说明,你往数据缓冲区写包数据的时候之前肯定会调用某个公共函数,那我们只要分析硬件断点断下来的时候堆栈里面有没有公共函数就行了,然后我们去最外层的公共函数分析。我们下好硬件断点,然后分析一下有没有公共调用。

 

19_50_33_77885

19_50_41_77510

010ee852这个地址2个不同的包都调用了,说明这个有可能是公共函数。我们去这个函数下个断试试。

19_56_17_59293

这个地址断是断下来了,可是比较频繁,但是根据观察 esp+8的值一直都在变动,我们下条件断点,过滤掉我们没有做动作就断下来的

20_03_06_33955

设置好条件断点后 去游戏选怪,发现立马断下来了

20_03_34_78177

然后我们Ctrl+f9往上一层跟,没跟几层发现一个似曾相识的函数

20_04_17_49815

 

怎么样 简单吧!

标签:逆向,gt,游戏,......,发包,线程,断点
From: https://www.cnblogs.com/weiyuanzhang/p/17436560.html

相关文章

  • 使用 Rust 开发一个微型游戏
    使用Rust构建微型游戏--用于理解游戏开发一、创建游戏Agenda建立项目实现Gameloop不同的游戏模式添加玩家添加障碍和计分汇总理解Gameloop为了让游戏流畅、顺滑的运行,需要使用GameloopGameloop:初始化窗口、图形和其它资源每当屏幕刷新(通常是每秒30......
  • [Android 逆向]旅行青蛙破解
    1.旅行青蛙V1.0,4apk安装到手机,可以运行2.jadx打开apk存在这两个dll,说明是unity开发的3.导出Assembly-CSharp.dll,使用DnSpy打开Ctrl+Shift+K全局搜索clover(四叶草的意思)ps:这里的5000是我修改的,选中408行,邮件编辑IL指令,直接改C#编译后的代码4.......
  • win10电脑游戏全屏占不满整个屏幕解决方法
    win10电脑游戏全屏占不满整个屏幕解决方法 工具/原料华为MateBookWindows10win10电脑游戏全屏占不满整个屏幕解决方法1按win+r打开并运行,输入regedit,然后按Enter进入注册表编辑器页面;2依次展开以下路径:HEKY_LOCAL_MACHINE/SYSTEM/C......
  • JS逆向 -- 分析被加密的响应数据
    一、当抓到一个数据包的时候,发现响应数据被加密了,这时没有关键字供我们搜索。二、这时就要从url入手,一般js里面会对对响应的加密数据进行解密,我们搜索url中的路径“/dataservice/query/comp/list”三、只搜到一个js文件,进去下断,并查看参数,发现正好是这个数据包提交的参数四、因为要......
  • M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒
    2023年Q1中国移动游戏市场整体表现不及预期,实际销售收入为486.94亿元,同比下降19.42%。虽整体有所下滑,但新鲜血液依然迸发强劲。3月22日,一款玩法轻松、新颖的种田类手游《桃源深处有人家》正式上线,玩家纷纷投入其中,化身萝萝山的村民,共同建设美丽新农村。而4月26日备受关注的米哈游新......
  • JS逆向实战14——猿人学第二题动态cookie
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标网站https://match.yuanrenxue.cn/match/2网站分析首先已经告诉了我们这个网站是动态cookie,所以......
  • 跳跃游戏系列
    55.跳跃游戏这种方法所依据的核心特性:如果一个位置能够到达,那么这个位置左侧所有位置都能到达。想到这一点,解法就呼之欲出了~classSolution{publicbooleancanJump(int[]nums){//这种方法所依据的核心特性:如果一个位置能够到达,那么这个位置左侧所有位置......
  • 游戏逆向-D3D9绘制
    做游戏逆向期间通常会用到绘制技术,比如FPS游戏逆向矩形透视,骨骼等。接下来几章内容主要介绍几种比较常见的绘制技术:如D3Dx绘制,Imgui绘制,D3D9HOOK绘制,DWM绘制 GDI绘制与D3Dx绘制的区别通用性的区别:1、GDI渲染方式则是我们熟知的采用GDI进行图像绘制,其优势就是通用性强,只要是目......
  • 安卓逆向——frida安装及简单接口开发
    1.Frida安装在github下载,github.com/frida/frida/releases然后addpush(解压后得到的文件,单文件,重命名为frida-server)frida-server/data/local/tmpaddshellcd/data/local/tmpchmod777frida-server开启服务./frida-server另外开启一个cmd窗口,进入虚拟环境frida-ps-U验证是......
  • 直播源码技术之如何实现游戏组队功能
    随着直播行业的发展,直播间的功能技术也在迅速发展,直播间内的游戏功能就是其发展的产物,在观看直播的同时也能去玩游戏,那如果是和几个朋友一起去看直播玩直播间游戏那应该怎么办那,这就要应用到一个功能:直播源码技术游戏组队功能。一、直播源码技术游戏组队功能的意义在这个独生子女居......