前言
我们什么时候进行过抓包。“每时每刻都抓”,这个观点我本人是比较欣赏的,虽然自己也没有做到。
当我们在测试或者调试时,可以习惯性的开启抓包,虽然可能一天的内容都不需要。
有一个场景,你拉着开发同学说,“XXX,错误了,为什么?”。他说,“你再跑次,[ 我抓个包 | 打下日志 | 定个断点 ]”。这种表现就一般了。如果他可以说“好的,我看下日志”。这种答复能让你觉得他掌握了一切。
是的,问题复现可以,但是可能会错失很多。所以时刻保持记录是非常好的。说多了,我们进入正题。
通过之前的《移动抓包基础篇》,大家都希望有更多使用方面的说明。今天就用Charles聊一些个人的使用习惯。
一、普通消息分析
1. 找到你要看的消息
在工作中有看到过很多同学,都是在Structure模式下查看包。谈不上诧异,但是我觉得这会影响效率。所以需要灵活使用Structure和Sequence。
1.1 Structure模式
Structure会把消息归类展示,对于初步观察消息有很好的作用。
比如你想看http://web.youni.im/的某条消息,在Structure下能够很好的找到,

1.2 Sequence模式
既然Structure下那么方便找到消息,为什么还要Sequence。
Sequence是细致分析消息。比如多个消息之间的关系,调用先后顺序。例如:是ABB还是BAB只有在Sequence下分析了。
在该模式下,消息泛滥,刚使用的用户肯定是瞬间崩溃。这时可以通过Filter留下那些自己关心的。好了,你的世界又清净了。

1.3 总的来说
不熟悉消息的情况下,可以先用Structure定位到消息。习惯之后,在通过Sequence分析消息。
2. 消息来了,我们看些什么
2.1 在Overview的选项卡中有很多信息
个人习惯关注以下内容:(其实,在实际过程中,我都很少看Overview了)
- URL:简单看看,是不是我们要看的那个请求;
- Response Code:重点;
- Method:瞟一眼;
- Duration:有时候分析问题非常有用。

2.2 Contents下有更多实际东西
根据个人习惯可以切换不同的选项卡进行查看。如果是JSON消息,那么Text、JSON Text、Raw都可以看到较多信息。这里用Raw举例:
- 上方是Request,下方是Response;
- 无论是Req还是Rsp,都包含header、body部分。有同学会问,为什么图中的Rsp没有看到body?原因很简单,因为服务器就是没有回。O(∩_∩)O哈哈~
- 这里充满了各种内容:
URL、Method、User-Agent、Cookie、Statuts Code、Req Body、Rsp Body等,这些都是我们常规分析需要关注的。

好了,你已经看到了有效的HTTP包头、包体的相关数据。其实看抓包还有个好处,能够帮助你进一步了解HTTP协议。
二、Protobuf消息解析
Charles集成了PB消息的解析功能。如果简单看看,其实也够了,缺点是他的展现方式比较老土。下面就介绍下可用的解析方式。
1. Charles解析PB
Charles关于PB的介绍,内容挺多,有兴趣可以看看。传送门
1.1 生成desc文件
首先我们需要获取到待显示的消息的desc文件。该文件是由对应消息的proto文件生成。你问我proto是什么?既生亮何生……
此处运行命令:起~~
1 | protoc -oXXX.desc YYY.proto |

目标已经获得,打完收工!
1.2 设置消息的显示规则
- 找到对应的消息,
右键=>View Request As=>Protocol Buffers...

- 对话框中选择
Open Descriptor Registry

- 增加已经生成的desc

- 选择有效的消息类型

- 惊喜出现,
Contents的显示选项中多了2个PB相关的。Go ahead,试试看。

设置了请求,响应的设置方法亦然。
之前的显示关系单个请求的。如果全局可以在
Viewer Mappings中设置,自己找。
1.3 消息分析
从之前的图片可以看出,Charles显示PB有2个已知问题:
- 容错比较差。一旦有必要字段缺失,就会报错。这个错误是不是影响解析,我不太清楚。
- 信息展示以序号为key。这个太致命了,消息数据多了就基本不能看。(不知道是不是生成DESC文件的原因)
2. 自定义程序解析
其实Charles能直接解析PB也是后来才发现的。一开始对于这个烦人的问题,LZ就写了个简单的程序去解读。
在这简单介绍下功能,代码就不贴了。如果有需要可以线下联系我获取代码(go写的200多行)或者可执行程序。
2.1 获取消息的Hex信息,全选Copy

2.2 粘贴到文件中,命名data.txt

2.3 执行程序

是不是看上去爽多了。还能适配直接导出的消息体,功能还行,不一一描述了。
三、其他补充
为什么我已经安装了证书,但是还不能抓HTTPS包呢?
这里有2个可能:
- 应用校验了证书。因为你安装的证书是Charles的,应用一看,不对,就错误了;
- 消息METHOD。HTTP有很多方法,其中
GET、POST最常见,他们可以被抓包。现在CONNECT型的消息也很多 ,这类HTTPS消息不能被抓包解析。
不会看包怎么办?
可以先学习HTTP协议。再最简单,可以了解下HTTP的响应码,然后看看包里是不是有200。
我在Charles里面右键选中的消息,怎么没有菜单弹出?
左移鼠标到有文字的地方,再来。有木有,一般人我不告诉他。
结束语
关于抓包已经写了2篇,不过还是说的不多。感谢大家的阅读,有问题、需要,可留言,可线下直接找我。
3Q,88