Android游戏HTTP请求逆向遇阻:Protobuf与Luac解密求助
针对Android游戏逆向的两个核心问题解决思路
一、Base64解码后无法解析的Protobuf请求体处理
- 内存dump原始Protobuf数据:用Frida hook游戏中Protobuf序列化的关键方法(比如
com.google.protobuf.MessageLite.toByteArray()或游戏自定义的序列化入口),直接dump序列化后的原始字节数组,跳过Base64编码步骤,拿到最原始的Protobuf数据。 - 动态获取Protobuf定义:
- Hook Protobuf的
parseFrom方法,捕获传入的字节流和对应的Message类,结合反编译代码里的类名(比如com.game.proto.XxxProto$XxxRequest),用protoc工具生成对应的.proto文件。 - 如果是自定义Protobuf变种,需对比dump的原始数据和反编译代码中的字段映射关系,手动推导
.proto结构。
- Hook Protobuf的
- 通用Protobuf解析尝试:用
protoc --decode_raw命令直接解析原始字节流,查看字段编号和对应数据类型,再结合游戏逻辑反推字段含义。
二、XXTEA加密的.luac文件解密
- 定位解密密钥与逻辑:
- 用Frida hook游戏加载luac文件的方法(比如Lua虚拟机的
luaL_loadbuffer或自定义解密函数),捕获解密前的加密数据、解密后的原始luac数据,同时dump解密时使用的XXTEA密钥。 - 反编译APK中的Java代码,查找调用XXTEA解密的逻辑,通常会有硬编码密钥或从assets/so文件读取密钥的流程,直接提取密钥。
- 用Frida hook游戏加载luac文件的方法(比如Lua虚拟机的
- 手动解密luac文件:
- 拿到密钥后,用XXTEA解密工具(自行编写Python脚本或用现成实现)处理加密的.luac文件,注意XXTEA的块大小、字节序等参数要与游戏实现一致。
- 解密后用
unluac等工具反编译,得到可读Lua代码。
- 动态加载调试:若解密后直接反编译失败,可能是luac有自定义头部或修改了虚拟机指令集,可通过Frida将解密后的luac数据注入Lua虚拟机执行,动态调试逻辑。
内容的提问来源于stack exchange,提问作者Florent Trust
相关产品推荐
相关产品推荐

