微信6.7.3版本分析总结

微信6.7.3版本分析总结

网络分析

一般为了获取应用的数据,可以首先通过抓包的方式分析其网络协议,如果能够分析清楚所有的网络协议,那么就可以在PC端进行模拟,而没必要去使用手机端爬取数据了。

一般的应用会使用Http/s协议进行数据传输,那么使用常见的网络代理软件(Charles、Fiddler)设置代理,并且在手机端安装代理软件的证书即可,而且需要在手机上设置wifi代理。但是在手机上设置了wifi代理并不意味着应用一定会使用该代理,应用可以设置不使用该wifi代理。那么这时候如果想要查看手机上的网络请求,就可以使用tcpdump工具,可以得到pcap包,然后使用wireshark或者Charles打开pacp包进行分析即可。

Postman模拟请求

使用该软件对请求进行模拟时,需要注意对该软件进行设置,比如去除SSL证书验证等设置。另外该软件对于访问过的域名会保存返回的Cookie,可以点击界面上的Cookies对各个域名的Cookie进行清除或管理。

网络访问模板

  1. 获取公众号最新Cookie:

    request

    https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA4ODQ5MDcwNw==&scene=126&devicetype=android-21&version=26070333&lang=zh_CN&nettype=WIFI&a8scene=3&pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ&wx_header=1 参数:
    • action=home
    • __biz=MzA4ODQ5MDcwNw==(**该参数为公众号唯一标识,可变**)
    • scene=126
    • devicetype=android-21
    • version=26070333
    • lang=zh_CN
    • nettype=WIFI
    • a8scene=3
    • pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ
    • wx_header=1
    Header:
    • Host: mp.weixin.qq.com
    • Connection: keep-alive
    • User-Agent: Mozilla/5.0 (Linux; Android 5.0.2; Lenovo A7600-m Build/LRX21M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044306 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x26070333) NetType/WIFI Language/zh_CN Process/toolsmp
    • x-wechat-key: 799cb18701a7441ff905da2d25b98adec65b40d6f775c4f0d18d371b8ba9e7adec7d711a97eaacf507fe43dc9ef343b4145d11ee580dadc6143f7263aba28c1482c023ee3d347696af8e2462951da32e(该参数也会变,变化方式暂时未知!!!
    • x-wechat-uin: Mzg5OTI5MDk0
    • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,image/wxpic,image/sharpp,image/apng,image/tpg,/;q=0.8
    • Accept-Encoding: gzip, deflate
    • Accept-Language: zh-CN,en-US;q=0.8
    • Cookie: wxuin=389929094; devicetype=android-21; version=26070333; lang=zh_CN; pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ; wap_sid2=CIax97kBElx4UEZlcUVZX1VoQnc4aGVvRWJyUG1WTDBaTGVGOXJvSDN1eUtaMkVvTk9JZ2h6U2RjOWlxbFoxN1dhOVEwTTd1Nmx2N29DQlR2dE8wR0d1RjliZF9mTk1EQUFBfjCtzrXeBTgNQJVO
    • Q-UA2: QV=3&PL=ADR&PR=WX&PP=com.tencent.mm&PPVN=6.7.3&TBSVC=43617&CO=BK&COVC=044306&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= LenovoA7600-m &RL=720*1280&OS=5.0.2&API=21
    • Q-GUID: 22ced77acee5c74a8d86eaef13b788cb
    • Q-Auth: 31045b957cf33acf31e40be2f3e71c5217597676a9729f1b
    其中Cookie:
    • wxuin=389929094
    • devicetype=android-21
    • version=26070333
    • lang=zh-CN
    • pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ
    • wap_sid2=CIax97kBElx4UEZlcUVZX1VoQnc4aGVvRWJyUG1WTDBaTGVGOXJvSDN1eUtaMkVvTk9JZ2h6U2RjOWlxbFoxN1dhOVEwTTd1Nmx2N29DQlR2dE8wR0d1RjliZF9mTk1EQUFBfjCtzrXeBTgNQJVO(该参数需设置为当前最新Cookie中wap_sid2的值

    response

    只需要获得头部的Set-Cookie中的wap_sid2的值作为最新的值并保存,记为latest_wap_sid2。示例:Set-Cookie: wap_sid2=CIax97kBElx4UEZlcUVZX1VoQnc4aGVvRWJyUG1jeEIzWlZDN2JuOElJaUV3ekd5SGc4OGN1aFV6S0hDLVJvUV9NOTgxWHI4M05mM1poc2NkcUxiU05YS3JOMmdFZE1EQUFBfjDD0bXeBTgNQJVO;
  2. 获取公众号历史消息:

    request

    https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzAwNTQ3NDQ5Ng==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ&wxtoken=&appmsg_token=979_Ds%252FMzzoq5Z5ZLxjnVOhVIfEww_Wj_5gl4-YN8w~~&x5=1&f=json 参数:
    • action=getmsg
    • __biz=MzAwNTQ3NDQ5Ng==
    • f=json
    • offset=10
    • count=10
    • is_ok=1
    • scene=126
    • uin=777
    • key=777
    • pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ
    • wxtoken=
    • appmsg_token=979_Ds%252FMzzoq5Z5ZLxjnVOhVIfEww_Wj_5gl4-YN8w~~
    • x5=1
    • f=json
    Header:
    • Host: mp.weixin.qq.com
    • Connection: keep-alive
    • X-Requested-With: XMLHttpRequest
    • User-Agent: Mozilla/5.0 (Linux; Android 5.0.2; Lenovo A7600-m Build/LRX21M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044306 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x26070333) NetType/WIFI Language/zh_CN Process/toolsmp
    • Accept: /
    • Referer: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA4ODQ5MDcwNw==&scene=126&devicetype=android-21&version=26070333&lang=zh_CN&nettype=WIFI&a8scene=3&pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ&wx_header=1
    • Accept-Encoding: gzip, deflate
    • Accept-Language: zh-CN,en-US;q=0.8
    • Cookie: wxuin=389929094; devicetype=android-21; version=26070333; lang=zh_CN; pass_ticket=WPx%2Bo2YN1JAF%2FmL7nV7V%2BfEvdXi%2FZpMDqDKiSLIWGssGQPh9ynzmVAALv%2BGxAiQZ; wap_sid2=CIax97kBElx4UEZlcUVZX1VoQnc4aGVvRWJyUG1jeEIzWlZDN2JuOElJaUV3ekd5SGc4OGN1aFV6S0hDLVJvUV9NOTgxWHI4M05mM1poc2NkcUxiU05YS3JOMmdFZE1EQUFBfjDD0bXeBTgNQJVO
    • Q-UA2: QV=3&PL=ADR&PR=WX&PP=com.tencent.mm&PPVN=6.7.3&TBSVC=43617&CO=BK&COVC=044306&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= LenovoA7600-m &RL=720*1280&OS=5.0.2&API=21
    • Q-GUID: 22ced77acee5c74a8d86eaef13b788cb
    • Q-Auth: 31045b957cf33acf31e40be2f3e71c5217597676a9729f1b
    Cookie中的wap_sid2的值即为上一步中获得的最新值latest_wap_sid2。

逆向分析

静态分析

公众号主页点击全部消息流程初步分析

  1. 公众号主页Activity:com.tencent.mm.plugin.profile.ui.ContactInfoUI
  2. 点击“全部消息”按钮回调函数,ContactInfoUI类中的:public final boolean a(f fVar, Preference preference)
  3. 进而调用接口获取全部历史消息:com.tencent.mm.plugin.profile.ui.newbizinfo.b类中的public final boolean xQ(String str),设置Intent:java Intent intent = new Intent(); intent.putExtra("rawUrl", str2); intent.putExtra("useJs", true); intent.putExtra("vertical_scroll", true); intent.putExtra("geta8key_scene", 3); intent.putExtra("KPublisherId", "brand_profile"); intent.putExtra("prePublishId", "brand_profile"); intent.setClassName("com.tencent.mm", "com.tencent.mm.plugin.webview.ui.tools.WebviewMpUI");
  4. 进而调用接口设置intent传递参数:com.tencent.mm.br.d类中的public static void b(Context context, String str, String str2, Intent intent),实际干活的是private static void b(Context context, final String str="webview", String str2=".ui.tools.WebViewUI", Intent intent, Bundle bundle)
  5. 进而调用接口动态加载插件模块:com.tencent.mm.br.d类中的public static synchronized c a(String str, a aVar, b bVar),aVar是成功的回调函数,bVar是失败的回调函数。
  6. 启动WebView的Activity:com.tencent.mm.plugin.webview.ui.tools.WebviewMpUI,实际干活的是其父类:com.tencent.mm.plugin.webview.ui.tools.WebViewUI

然而发现这样分析效率太低,而且抓不住重点。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

滚动至顶部