Original
https://blog.899988.xyz/reverse/378.html (转载时请注明本文出处及文章链接)
无聊玩了下一笔画红包,发现点开一笔画红包后,QQ打开了网页,不同于其他红包,QQ一笔画红包实际上是一个Web页面,于是Fiddler代理模拟器调试一波。
前排提示!篇幅较长,图文并茂。十分钟成就你的黑阔梦(开玩笑)。本文仅限学习交流,请勿违反网络安全法律法规。
connects
数组对象里有两对坐标点[{"x1":125,"y1":125,"x2":375,"y2":125}]
,vertexes
数组对象里也是同样的两对坐标点。这应该就是一笔画的连接路径点了。[{"x1":125,"y1":125,"x2":375,"y2":125}]
下发了,也就是不管多么复杂的一笔画,服务器都会把他的正确的连接路径点发下来,当然,单纯给我们这些点如果一个个去对比连接,显然不是程序猿应该做的事,继续往下分析。
在Fiddler中将这个包的request部分调整到TextView视图
这个数据包的request body部分的TextView视图,这个视图只显示request body提交的内容,我们可以专心分析这个部分,也就是当点击“开”之后,用户提交给服务器的数据,很明显的看到,这是个json请求体(数据已脱敏)
{"feedSid":"uin=3*******7&gameId=1************9&i=10","preCode":"771*********************647","oneStrokeId":16**********,"oneStrokeHbOrbit":[{"x1":125,"y1":125,"x2":375,"y2":125}],"sendUin":"3*******7","grapUin":"3*******7","hbListId":"1************************00","strokeType":1}
其中oneStrokeHbOrbit
数组对象属性值[{"x1":125,"y1":125,"x2":375,"y2":125}]
就是提交给服务器的路径点集合。那么现在回到之前从聊天框点击一笔画红包的时候,当点击一笔画红包,服务器会直接把红包的正确路径点通过response下发,也就是这个数组。
[{"x1":125,"y1":125,"x2":375,"y2":125}]
非常眼熟,用户通过连接一笔画,产生的路径点集合数组提交给服务器的数据,就是之前点击一笔画红包后服务器下发的一笔画路径点。
// 服务器下发的路径点
[{"x1":125,"y1":125,"x2":375,"y2":125}]
// 用户连接产生的路径点
[{"x1":125,"y1":125,"x2":375,"y2":125}]
原数据(数据已脱敏)
{"ret":0,"data":{"connects":"[{\"x1\":75,\"y1\":75,\"x2\":225,\"y2\":75},{\"x1\":225,\"y1\":75,\"x2\":375,\"y2\":75},{\"x1\":375,\"y1\":75,\"x2\":225,\"y2\":375},{\"x1\":225,\"y1\":375,\"x2\":225,\"y2\":225},{\"x1\":225,\"y1\":225,\"x2\":375,\"y2\":375},{\"x1\":375,\"y1\":375,\"x2\":75,\"y2\":375},{\"x1\":75,\"y1\":375,\"x2\":225,\"y2\":675},{\"x1\":225,\"y1\":675,\"x2\":375,\"y2\":225},{\"x1\":375,\"y1\":225,\"x2\":225,\"y2\":225},{\"x1\":225,\"y1\":225,\"x2\":525,\"y2\":375},{\"x1\":525,\"y1\":375,\"x2\":375,\"y2\":375},{\"x1\":375,\"y1\":375,\"x2\":525,\"y2\":525},{\"x1\":525,\"y1\":525,\"x2\":675,\"y2\":375},{\"x1\":675,\"y1\":375,\"x2\":525,\"y2\":75},{\"x1\":525,\"y1\":75,\"x2\":225,\"y2\":225},{\"x1\":225,\"y1\":225,\"x2\":675,\"y2\":75},{\"x1\":675,\"y1\":75,\"x2\":525,\"y2\":375},{\"x1\":525,\"y1\":375,\"x2\":375,\"y2\":525},{\"x1\":375,\"y1\":525,\"x2\":75,\"y2\":225},{\"x1\":75,\"y1\":225,\"x2\":75,\"y2\":375},{\"x1\":75,\"y1\":375,\"x2\":525,\"y2\":525},{\"x1\":525,\"y1\":525,\"x2\":675,\"y2\":75},{\"x1\":675,\"y1\":75,\"x2\":375,\"y2\":525},{\"x1\":375,\"y1\":525,\"x2\":375,\"y2\":225},{\"x1\":375,\"y1\":225,\"x2\":375,\"y2\":75},{\"x1\":375,\"y1\":75,\"x2\":525,\"y2\":225},{\"x1\":525,\"y1\":225,\"x2\":525,\"y2\":75},{\"x1\":525,\"y1\":75,\"x2\":525,\"y2\":525},{\"x1\":525,\"y1\":525,\"x2\":525,\"y2\":675},{\"x1\":525,\"y1\":675,\"x2\":675,\"y2\":375},{\"x1\":675,\"y1\":375,\"x2\":225,\"y2\":675},{\"x1\":225,\"y1\":675,\"x2\":75,\"y2\":675},{\"x1\":75,\"y1\":675,\"x2\":225,\"y2\":525},{\"x1\":225,\"y1\":525,\"x2\":675,\"y2\":375},{\"x1\":675,\"y1\":375,\"x2\":75,\"y2\":375},{\"x1\":75,\"y1\":375,\"x2\":675,\"y2\":525},{\"x1\":675,\"y1\":525,\"x2\":375,\"y2\":525},{\"x1\":375,\"y1\":525,\"x2\":225,\"y2\":225},{\"x1\":225,\"y1\":225,\"x2\":75,\"y2\":525},{\"x1\":75,\"y1\":525,\"x2\":675,\"y2\":525},{\"x1\":675,\"y1\":525,\"x2\":675,\"y2\":675},{\"x1\":675,\"y1\":675,\"x2\":525,\"y2\":675}]","vertexes":"[{\"x\":75,\"y\":75},{\"x\":225,\"y\":75},{\"x\":375,\"y\":75},{\"x\":225,\"y\":375},{\"x\":225,\"y\":225},{\"x\":375,\"y\":375},{\"x\":75,\"y\":375},{\"x\":225,\"y\":675},{\"x\":375,\"y\":225},{\"x\":525,\"y\":375},{\"x\":525,\"y\":525},{\"x\":675,\"y\":375},{\"x\":525,\"y\":75},{\"x\":675,\"y\":75},{\"x\":375,\"y\":525},{\"x\":75,\"y\":225},{\"x\":525,\"y\":225},{\"x\":525,\"y\":675},{\"x\":75,\"y\":675},{\"x\":225,\"y\":525},{\"x\":675,\"y\":525},{\"x\":75,\"y\":525},{\"x\":675,\"y\":675}]","vertexCount":"23","img":{},"imgUrl":"https://qpay-onestroke-redpack-1251316161.cos.ap-*********.*********.com/*******/oneStrokeSubject/16********.png","id":"16**********"}}
处理后的数据(将connects
和vertexCount
数组对象属性删减到只剩两对坐标点)
{"ret":0,"data":{"connects":"[{\"x1\":75,\"y1\":75,\"x2\":225,\"y2\":75}]","vertexes":"[{\"x\":75,\"y\":75},{\"x\":225,\"y\":75}]","vertexCount":"23","img":{},"imgUrl":"https://qpay-onestroke-redpack-1251316161.cos.ap-*********.*********.com/*******/oneStrokeSubject/16********.png","id":"16**********"}}
Run to Compoletio
,将响应放行到QQ。Wow,QQ里的一笔画,现在竟然是一条线了。oneStrokeHbOrbit
数组对象的值。此处内容作者设置了 回复 可见
点击下方小红心↓ 表示你已成功变身黑阔。
dalao