游戏名称:5ZWG6YGT6auY5omL
学了那么久逆向了 也是准备进军手游逆向 对于发送包的逻辑我大致上是了解了很多 但是对于接收包的逆向 我感觉还是缺了点经验 这一篇文章对我逆向这款游戏就当一次记录 游戏并没有检测以及保护 所有还是比较适合我这样的小菜的 如果一个游戏看到了易盾 tprt 那我应该直接放弃了 逆向时间一共三天 那么废话不多说 直接开干
前置知识以及工具 root的手机(建议pixel4) frida ida suuny抓包工具 frida-il2cpp-bridge 没了~~~ 至于frida-il2cpp-bridge github下载即可~~~
额 可能是我的知识储备有限 不知道该怎么称呼 也可以说这游戏是啥开发吧 我一般来说比较喜欢看so文件 ,用mt管理器把游戏安装包提取出来 /lib/arm64-v8a/这个路径下就是so文件(一顿乱点)

哟西 这不是我们的老朋友il2cpp.so还会libunity吗 嘿嘿 那就知道了这个是unity开发的 至于lua 应该没有 ,先打开il2cpp.so查看他的16进制

感谢天感谢地 文件并没有被加密 熵值没有那么高 头部也没问题 是正常的elf文件 7F 45 4C 46 接下来 在/assets/bin/Data/Managed/Metadata/拿到我们的global-meta文件

AF 1B B1 FA也是正常的魔术头 那我们就不需要在内存里dump了(庆幸)
那行 拿出我们的frida-il2cpp-bridge直接把游戏逻辑给dump出来吧 我刚开始学unity逆向的时候也是这么懵逼的 为啥还要dump出来 不能直接在il2cpp.so看吗 后来我才知道 il2cpp的都是subxxx开头的方法 和真实的名字匹配不上~~~(愚蠢) 扯远了 直接dump吧

双击我框出来的exe文件 第一个选择il2cpp.so 第二个选中global-metadata 然后dump完毕后直接回车 ok 你会看到一个dump.cs 我图上有是因为我之前dump过了 其中dump.cs里面都是游戏的逻辑 但不能说的那么绝对 因为一些游戏的逻辑会在lua里面
不好意思 忘记抓包了 先抓个包吧(笑哭) 哈哈 如果dump失败了我绝对先去抓包了 这不影响我们操作 来吧 打开suny抓包工具 sunny会提供一个sunnynet的软件

在里面填入地址即可 这个地址填写自己的 每个人都不一样 然后呢保存电脑和手机同一个网络 在电脑也打开抓包工具 至于这些不会的 可以看sunny的文档或者去联系下开发人员 在Bilibilli这些地方都能找到

好简单介绍了下游戏 我们要准备抓包了 这个游戏没有vpn检测 如果有的话 直接把他hook掉即可 因为 没有 我这里就不贴图了

这个就是tcp包 以后发的包都会在这里 因为方便调试 我们拿这个游戏的喊话来介绍 喊话内容123 ps:等级没到是发不出去的 但是会发送包 这点大家不用担心
这是第一次发包
BC9988AA2D0032E64D5E16BBA23BAD1EBC1B1020D02DA01FBA481925847BF54EE04E1F758E76A61DE2421C768620F11CBE457014F046C82FC9
这是第二次发包
BC9988AA2D0032E673602885A23BAD1E821B1020D02DA01F84481925847BF54EDE4E1F758E76A61DDC421C768620F11C80457014F046C82FF7
这俩包完全是不一样的 但是我们明明发的同一个内容啊?还是说有随机值?于是我又重新发送了一遍

发现并没有效果 这很正常 游戏防你重发包(没给我掉线已经是很大的仁慈了 嘻嘻) 来吧 分析游戏的发包逻辑了
因为他是tcp游戏 我们打开dump.cs之后可以搜索关键词 send net client encrypt 等等 其实我认为大部分都是靠猜

我搜索的是send 一共302个结果 其中public void SendData(byte[] oriData, int index, int count) { }这个我感觉就是发包的逻辑(剧透下 走狗屎运了 一猜就猜到了) 为啥感觉是他 一个是因为他是个方法 其次他的class是在
这个netclient之下(就算不在我也会尝试 嘻嘻)
好找到方法之后 拿出frida 开始构造函数了 一顿乱找发现assembly在Utility里面(可以自己动手找一下 图就不贴了 因为代码找不到了)
frida-il2cpp-bridge的具体用法可以查看bilibilli
我把hook代码先贴出来
发现senddata的结果就是我们想要的 可见senddata这个方法就是发送数据的方法 当然肯定是加密了之后的
至于我为啥要重新输出入参 因为有些返回值他会以入参的形式返回 这个记住就行
然后直接trace utility这个assembly 看看有谁在调用
看trace结果
il2cpp:
0x00b8af00 ┌─Utility.HttpHelper::Update
0x00b8b194 │ ┌─Utility.HttpSession::get_IsDone
0x00b85290 │ │ ┌─Net.LuaConnect::Send
0x00b84d6c │ │ │ ┌─Net.GameConnect::allocGamePacket
0x00b889b0 │ │ │ │ ┌─Net.SendDataPacket::Clear
0x00b889b0 │ │ │ │ └─Net.SendDataPacket::Clear
0x00b8495c │ │ │ │ ┌─Net.SendDataPacket::SetMessage
0x00b8495c │ │ │ │ └─Net.SendDataPacket::SetMessage
0x00b84d6c │ │ │ └─Net.GameConnect::allocGamePacket
0x00b85364 │ │ │ ┌─Net.SendDataPacket::WriteBuffer
0x00b8211c │ │ │ │ ┌─Net.DataPacket::Reverse
0x00b8211c │ │ │ │ └─Net.DataPacket::Reverse
0x00b85364 │ │ │ └─Net.SendDataPacket::WriteBuffer
0x00b8232c │ │ │ ┌─Net.GameConnect::get_Instance
0x00b8232c │ │ │ └─Net.GameConnect::get_Instance
0x00b84f14 │ │ │ ┌─Net.GameConnect::flushPacket
0x00b83994 │ │ │ │ ┌─Net.GameConnect::getPacketIndex
0x00b83994 │ │ │ │ └─Net.GameConnect::getPacketIndex
0x00b84b84 │ │ │ │ ┌─Net.SendDataPacket::completePacket
0x00b88728 │ │ │ │ │ ┌─Net.NetProtocol::calcPacketDataVerify
0x00b88728 │ │ │ │ │ └─Net.NetProtocol::calcPacketDataVerify
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-11-27 21:10
被mb_vhwdzyqo编辑
,原因: