Closed itzuimao closed 2 years ago
你的问题描述很模糊,信息不全,APP版本、测试样本、命令都没有。
我测试在转换proto、proto转py上都是没有问题的,如图
测试的APP版本是6.51.0 (release-b7076571)
frida-server版本是14.2.18
使用的命令如下
python -m frida_protobuf.main -n tv.danmaku.bili --use-default-any --keywords-expected "bili"
python -m frida_protobuf.generate --proto com.bapis.bilibili.app.playurl.v1.PlayViewReply
python -m frida_protobuf.proto2py --proto com.bapis.bilibili.app.playurl.v1.PlayViewReply
对目标链接抓包
然后对抓包结果进行解析,代码如下,可以正常解析
import gzip
import struct
from io import BytesIO
from pathlib import Path
from google.protobuf.json_format import MessageToDict
from pyproto.com.bapis.bilibili.app.playurl.v1.PlayViewReply_pb2 import PlayViewReply
def gzip_decompress(msg: bytes):
compressed = gzip.GzipFile(fileobj=BytesIO(msg))
return compressed.read()
def slice_message(msg: bytes):
byteorder, length = struct.unpack("!bl", msg[:5])
if byteorder == 0x01:
return gzip_decompress(msg[5:5 + length])
return msg[5:5+length]
resp = Path(r'bili/response_body.bin').read_bytes()
resp = slice_message(resp)
popular_reply = PlayViewReply()
popular_reply.ParseFromString(resp)
print(MessageToDict(popular_reply))
内部类处理确实存在问题,暂时只能手动处理下,或者自行编写脚本从frida_protobuf/configs
读取配置转换处理
double和float的问题我已经自行处理,修改frida-protobuf\agent\src\google\generate.ts第113行,加入double和float的转换规则
let TypeConfig: tsMap = { "int": "int32", "long": "int64", "String": "string", "boolean": "bool", "Boolean": "bool", "double":"double", "float":"float" }
匿名内部类建议将类地址中的$替换为.,目前我是手动处理的
这是目前使用中出现的两个问题,希望尽快修复。 可以在哔哩哔哩的com.bapis.bilibili.app.playurl.v1.PlayViewReply和com.bapis.bilibili.main.community.reply.v1.DetailListReply两个类中复现此bug