抓包抓到的数据全是乱码怎么解决,解压、解码、格式化的几种读法

24 阅读6分钟

翻技术群里抓包相关的问题,十次有五六次贴的是同一类截图:响应详情打开一片乱码,配一句"这怎么看?"。真拆开看,乱码的成因就那么几种——压缩没解开、格式没美化、本来就是二进制、或者压根是没解密的自研协议;每种对应不同的读法,多数换个视图就能解决。下面按"你看到的是什么乱码"列张表,逐种展开。

你看到的多半是怎么读
一堆带方块问号的可读性很差的字节gzip / brotli / zstd 压缩没解开自动解压或"自动识别"视图
JSON 挤成一坨、没有换行缩进没开美化切"文本·美化"
字节整整齐齐、有重复规律protobuf 等二进制格式"自动识别"解出字段号与值
本该是图片/视频的位置显示乱码媒体响应体详情里内联预览
整块读不懂的十六进制数据私有协议或未解密的原始流自动识别试解,再进自定义解码

一、先认识"查看为"那排开关

每条请求的详情页,请求和响应两侧各有一排"查看为"开关,独立切换、互不影响。五个视图:结构化(起始行 + 请求头表格 + 智能 body,默认先看它)、文本·美化(JSON、XML、表单自动缩进)、文本·原样(一个字节不改的完整报文)、十六进制(hex 查看器,偏移、hex、ASCII 三列联动,可一键存成二进制文件,超大数据也能流畅翻)、自动识别(交引擎深度解码,压缩套压缩、帧套帧都能逐层展开)。多数乱码问题在第一个和第五个之间来回切一次就有答案。

用顺了会注意到几个细节:请求和响应两侧可以设成不同视图——排查时一侧留结构化看字段、另一侧开十六进制核对原始字节,同屏对照;十六进制视图点某个字节,hex 和 ASCII 联动高亮,想定位"这个字段从第几个字节开始"很直观;数据体量大也不卡,需要留档随时一键导出。

视图是基础,下面的几类乱码按成因逐个说。

二、压缩类的乱码:让工具自己解开

响应头带 Content-Encoding: gzip(或 br、deflate、zstd)时,body 在传输中就是压缩字节,直接看自然一片乱码。正确处理是解开再展示——TraceEagle 里这是默认行为,不用手动指定编码,多层叠加的也照解:gzip, br 这种从外到内逐层还原。对比来看,有的工具只解最外一层,剩下的还是乱的,就得手动上 gunzip 逐层剥;Wireshark 场景更麻烦一些,得先把流 follow 出来存成文件再处理。 解码

还有一种隐蔽的:响应头里没有编码标识,但数据确实是"自定义头 + 压缩流"的信封结构——遥测、统计上报常见这种。自动识别会把信封剥开、还原出真实数据;靠肉眼或者单纯的 gunzip,看到的还是乱码。排查时先看响应头的 Content-Encoding:写了编码却没解开,是工具侧的问题;没写编码还是一堆字节,就往信封结构的方向想——有的接口文档会说明自己的封装规则,对上了就清楚多了。

三、格式类的乱码:JSON、XML、plist 的排版

第二类其实不算乱码,是不好看——JSON 挤成一行、表单参数连成一片。切"文本·美化",按内容类型自动缩进,JSON、XML、x-www-form-urlencoded 各自排版清楚。Charles、Fiddler 的 inspector 里也有类似的格式化,思路一致:展示层的事,不该让人肉看。

表单数据美化后会按参数分行,几十个参数挨个对也不费劲;XML 同理。Apple 生态里还常遇到 plist:二进制、XML 两种形态,还有 NSKeyedArchiver 的归档数据(偏好设置、状态快照这类)。以前这些要靠专门的小工具才能还原,现在切个视图的事——做 iOS 的看到 plist 乱码,直接切自动识别。

四、二进制类的乱码:protobuf、图片、压缩包

protobuf 和 gRPC 是最容易被当成"乱码"的二进制格式:字段没有名字、值挤在一起。自动识别可以在没有 .proto 文件的情况下解出字段号、类型和值——不知道结构定义也能先把内容看个大概。实际排查里这个能力很实用:接口文档没更新、字段对不上时,先解出字段号和值,配合上下文反推结构,比对着二进制发呆强。

图片、视频、音频则不用解:详情里内联预览/播放,标注类型和大小。验证 CDN 上那张图有没有出错、返回的是不是预期资源,一眼的事,省掉"另存为再打开"那一步;zip 这类压缩包会列出内部文件清单,检查包里带了什么也有现成入口。到这一步,标准格式的乱码基本都有解了。

五、拆不开的乱码:私有协议与未解密流

剩下的两类:自研的私有协议帧、以及没解密的原始流。私有帧不少能自动拆——引擎会试出常见的定长前缀边界,把一条裸流拆成一条条消息,不写脚本;常见的长度前缀、分隔符结构还有现成模板,改几个值就能用;结构特殊的再写一小段 JavaScript 解码脚本兜底,内置取字节、进制转换这些辅助。从自动到手动有个平滑的坡度,多数需求停在前两档。未解密的数据先回去解决解密(证书、绑定那几关),解出来再回来看。

还有个细节值得说:确实无法还原的私有加密数据,工具会明确告诉你"解不开",而不是丢一堆乱码让人猜——这比盯着乱码排查半天、才发现是加密数据强。

读到这儿可以自检一下:结构化视图里请求行、请求头、body 各就各位;压缩过的响应打开是可读文本(比如缩进好的 JSON),不是压缩字节;图片视频能直接渲染播放;切到十六进制,偏移、hex、ASCII 三列对齐、点击联动。四条都对上,这条数据就是读明白了。

乱码不神秘:压缩的让它解压、格式的让它美化、二进制的让它识别、私有的交给解码器——四类各归各处理,看不懂的数据大多止步于视图没选对。

顺带一提,"看懂"是这条链的中间站:数据读明白之后,想改一改重发就接请求重放,两条响应哪里不一样就接请求对比,要生成代码和接口文档也都有对应入口。下次再对着乱码发呆,从"自动识别"和"文本·美化"两个按钮开始试——多数问题在 TraceEagle 里两次点击之内就有答案。