⚙️ 一、基础准备:环境与工具
1. 抓包工具选择
封包监听工具:专为模拟器设计(支持逍遥/MuMu/夜神),可监听指定进程的封包(如 `MEmuHeadless.exe`)。
WPE + CCProxy + ProxyDroid:
雷电模拟器安装 `ProxyDroid`(需Root权限),配置代理指向电脑的 `CCProxy`(端口9898)。
使用WPE监听 `CCProxy.exe` 进程,过滤发送/接收包。
tcpdump:当常规工具失效时,通过ADB命令抓取底层TCP数据(`tcpdump -p -vv -s 0 -w /sdcard/capture.pcap`)。
2. 游戏定位
目标手游通常为 `libMyGame.so`(Cocos2d-x引擎),逆向分析重点在 `SendMsg`、`Encode6BitBuf` 等函数。
二、抓包与解密实战
1. 拦截关键封包
操作触发:在游戏中执行特定动作(如使用回城石),观察抓包结果。
过滤技巧:
筛选发送包(`Send`类型)且目标IP为游戏服务器(非本机IP)。
在WPE中通过重发测试验证功能(如重发包后角色回城即成功)。
2. 解密算法分析
函数定位:
通过IDA逆向 `libMyGame.so`,追踪调用栈:`SendMsg → SendNetMessage → Encode6BitBuf → send`。
Hook `SendMsg` 函数获取明文数据(参数6为数据指针,参数7为长度)。
Lua脚本解密:
Cocos2d-x使用 XXTEA算法,通过Frida hook `luaL_loadbuffer` 导出解密后脚本。
⚡ 三、发送封包:重发与修改
1. 工具重发
在封包监听工具或WPE中,右键目标封包 → “重发”,可测试功能(如刷物品、瞬移)。
示例:拦截传奇回城封包,重发后角色立即回城。
2. 代码级发送(Frida Hook)
javascript
function hookSend {
var SendMsg = Module.getExportByName("libMyGame.so", "_ZN20LuaNetworkController7SendMsgEiiiiiPKcj");
Interceptor.attach(SendMsg, {
onEnter: function (args) {
// args[6]: 封包数据指针, args[7]: 长度
console.log("封包内容:", hexdump(args[6], { length: args[7].toInt32 }));
// 修改数据示例:args[6].writeUtf8String("修改后的数据");
});
通过Hook修改参数后调用原函数,实现自定义封包发送。
️ 四、常见问题解决
1. 抓包失败
关闭其他代理工具(如Charles),避免端口冲突。
雷电模拟器选 `VBoxNetNAT.exe` 进程(需关闭“只显示模拟器进程”选项)。
2. 封包监听工具Bug
避免频繁点击“清除”按钮,改用停止→重新开始抓包防止崩溃。
3. HTTPS/加密流量
启用Fiddler的HTTPS抓包功能(Tools → Options → HTTPS),安装证书。
五、学习资源推荐
视频教程:
[《WPE 游戏封包教程》]:基础到进阶封包操作(19小时)。
[《传奇封包思路》]:漏洞利用与秒杀修改(24分钟)。
逆向案例:
刷材料/元宝:通过封包重发或内存修改实现资源叠加。
⚠️ 注意事项
法律风险:封包修改仅限学习与安全测试,禁止用于作弊或破坏游戏平衡。
环境隔离:建议在单机版或私服测试,避免官方封号。
建议从单动作封包(如回城)开始练习,逐步深入复杂功能分析。遇到加密协议时,重点突破 `libMyGame.so` 的加密函数,结合Frida动态调试可事半功倍。