先抓包一个小程序进程的返回数据 pkg 大概如下格式 17 //协议状态位 03 03 //协议类型 小程序 07 99 //content 长度 BB 81 24 B3 67 12 D2 34 F9 31 F4 95 46 D9 83 C1 9D E3 7C 5B B6 6F B2 E6 F0 AC 1A FE 9E 02 CD B6 67 EA E9 2D 5B C3 7A 26 7C 34 B5 EF 8D B2 30 C3 BA 90 BB 8E 81 BB A7 A9 58 A3 C9 A7 62 14 4D 14 39 EF 8D 17 FB B9 AB 02 CB 85 8F 9A 84 15 94 40 21 15 DB 40 18 82 2F 83 D2 6A 2D 8F 2C 28 FC 67 FC 88 32 D6 6D A1 27 95 36 76 C2 84 3D 26 20 48 66 CC 88 53 88 38 3E 95 F0 32 F6 2A 53 A3 28 DD 26 5A 82 2A C8 88 03 5F FB F9 FC 7C 95 AB AB F0 71 3A 99 C5 7A 30 A0 BC 81 9D 7B E9 D3 99 2E 7E 7C D2 50 2B AC E0 64 6A 8B 48 00 36 70 13 10 AC EF CB 2E AB 23 AA AD D3 9D 5B 88 //content
其中第一个字节是状态位 分别有 14 15 16 17这几种 16 17 是业务正常数据。15应该是失败。 小程序第一次会读取pkg的前5个字节。并从中读取后两位作为下一次读取时的参数(content长度) 读取到content数据后。会从中读取前8位作为head处理。剩余数据作为body处理。
BB 81 24 B3 67 12 D2 34 //head F9 31 F4 95 46 D9 83 C1 9D E3 7C 5B B6 6F B2 E6 F0 AC 1A FE 9E 02 CD B6 67 EA E9 2D 5B C3 7A 26 7C 34 B5 EF 8D B2 30 C3 BA 90 BB 8E 81 BB A7 A9 58 A3 C9 A7 62 14 4D 14 39 EF 8D 17 FB B9 AB 02 CB 85 8F 9A 84 15 94 40 21 15 DB 40 18 82 2F 83 D2 6A 2D 8F 2C 28 FC 67 FC 88 32 D6 6D A1 27 95 36 76 C2 84 3D 26 20 48 66 CC 88 53 88 38 3E 95 F0 32 F6 2A 53 A3 28 DD 26 5A 82 2A C8 88 03 5F FB F9 FC 7C 95 AB AB F0 71 3A 99 C5 7A 30 A0 BC 81 9D 7B E9 D3 99 2E 7E 7C D2 50 2B AC E0 64 6A 8B 48 00 36 70 13 10 AC EF CB 2E AB 23 AA AD D3 9D 5B 88 //body
对body进行一次解密后得到response数据。解密参数有iv和aad 解密后的数据长度为body长度-0x10. 解密后的数据如下,我将其分为了两部分。第一部分为协议头。第二部分为response.
00 00 31 01 04 00 00 00 0F 88 61 96 D0 7A BE 94 03 AA 69 3F 75 04 01 09 40 82 E3 6C DC 10 54 C5 A3 7F 5F 96 1D 75 D0 62 0D 26 3D 4C 74 41 EA FB 24 E3 B1 05 4C 1C 37 E1 59 EF 00 07 3E 00 00 00 00 00 0F 7B 22 72 65 74 5F 6D 6F 64 75 6C 65 22 3A 7B 22 63 6F 75 6E 74 22 3A ... //response
其中response的数据可以直接转文本就是明文字符了。
{"ret_module":{"count":50,"data":[{"slot_num":7,"device_id":100031366,"order_id":31359415,"name":"千惠便利店","coins":3,"create_time":"2022-08-09 09:52:36","stack_id":26507501,"status":1,"refundCoins":null},{"order_id":28234418,"slot_num":7,"device_id":100031366,"name":"千惠便利店","coins":2,"s...略
注意:如果小程序走的HTTP协议的话。解密后的数据则大概如下 其中包含协议头和raw。
48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D 0A 53 65 72 76 65 72 3A 20 6E 67 69 6E 78 0D 0A 44 61 74 65 3A 20 4D 6F 6E 2C 20 30 37 20 4E 6F 76 20 32 30 32 32 20 31 31 3A 32 38 3A 31 32 20 47 4D 54 0D 0A 43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A 20 61 70 70 6C 69 63 61 74 69 6F 6E 2F 6A 73 6F 6E 0D 0A 54 72 61 6E 73 66 65 72 2D 45 6E 63 6F 64 69 6E 67 3A 20 63 68 75 6E 6B 65 64 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 6B 65 65 70 2D 61 6C 69 76 65 0D 0A 58 2D 50 65 72 6D 69 74 74 65 64 2D 43 72 6F 73 73 2D 44 6F 6D 61 69 6E 2D 50 6F 6C 69 63 69 65 73 3A 20 61 6C 6C 0D 0A 58 2D 44 6F 77 6E 6C 6F 61 64 2D 4F 70 74 69 6F 6E 73 3A 20 76 61 6C 75 65 0D 0A 58 2D 46 72 61 6D 65 2D 4F 70 74 69 6F 6E 73 3A 20 53 41 4D 45 4F 52 49 47 49 4E 0D 0A 58 2D 43 6F 6E 74 65 6E 74 2D 54 79 70 65 2D 4F 70 74 69 6F 6E 73 3A 20 6E 6F 73 6E 69 66 66 0D 0A 58 2D 58 53 53 2D 50 72 6F 74 65 63 74 69 6F 6E 3A 20 31 0D 0A 43 6F 6E 74 65 6E 74 2D 53 65 63 75 72 69 74 79 2D 50 6F 6C 69 63 79 3A 20 75 70 67 72 61 64 65 2D 69 6E 73 65 63 75 72 65 2D 72 65 71 75 65 73 74 73 3B 63 6F 6E 74 65 6E 74 20 2A 0D 0A 53 74 72 69 63 74 2D 54 72 61 6E 73 70 6F 72 74 2D 53 65 63 75 72 69 74 79 3A 20 6D 61 78 2D 61 67 65 3D 36 33 30 37 32 30 30 30 3B 20 69 6E 63 6C 75 64 65 53 75 62 64 6F 6D 61 69 6E 73 3B 20 70 72 65 6C 6F 61 64 0D 0A 52 65 66 65 72 72 65 72 2D 50 6F 6C 69 63 79 3A 20 6F 72 69 67 69 6E 2D 77 68 65 6E 2D 63 72 6F 73 73 6F 72 69 67 69 6E 0D 0A 0D 0A 36 31 0D 0A 7B 22 63 6F 64 65 22 3A 22 32 30 30 22 2C 22 6D 73 67 22 3A 22 E6 93 8D E4 BD 9C E6 88 90 E5 8A 9F 22 2C 22 64 61 74 61 22 3A 22 76 34 6E 50 62 75 33 62 55 70 71 6C 77 71 6D 64 7A 58 2B 36 74 51 3D 3D 22 2C 22 74 69 6D 65 53 74 61 6D 70 22 3A 22 31 36 36 37 38 32 30 34 39 32 31 32 37 22 7D
转字符串后如下: HTTP/1.1 200 OK Server: nginx Date: Mon, 07 Nov 2022 11:28:12 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive X-Permitted-Cross-Domain-Policies: all X-Download-Options: value X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1 Content-Security-Policy: upgrade-insecure-requests;content * Strict-Transport-Security: max-age=63072000; includeSubdomains; preload Referrer-Policy: origin-when-crossorigin 61 {"code":"200","msg":"操作成功","data":"v4nPbu3bUpqlwqmdzX+6tQ==","timeStamp":"1667820492127"} 0
发送的过程差不多。区别是发送走的 DoPayloadWrite 。接收是 DoPayloadRead
数据拦截代码
' 第一步 先将这里面的所有文件/文件夹删除 ' C:\Users\Administrator\AppData\Roaming\Tencent\WeChat
' 第二步 登录 3.7.0.x版微信 随便找一个小程序 进去后 会提示下载资源。点是
' 第三步 找到窗口名称与APPID对应名称的进程. WeChatAppEx.exe 是进程名 填写PID 点拦截
' 注意: WeChatAppEx.exe 文件版本应为 1.9.4648.2
|