jimmyzang 发表于 2019-11-19 16:51

关于“请在X信客户端打开链接”的分析

本帖最后由 jimmyzang 于 2019-11-20 07:42 编辑

11-20日重新编辑排版
人生总有一些无奈,有的时候是需要把快过期的微课下载到本地,准备以后看看。或者是偷偷地帮自家的孩子投个票,
结果一头撞到““请在x信客户端打开链接”上头破血流。网上查阅了很多很多资料,大多语焉不详,有的说修改UA,
有的说抓包,到底为啥没有人说的清楚。我找了几个很有代表性的例子,给大家分析一下。

遇到这个提示一般是因为在其他浏览器中打开X信中的链接的时候,我这里分析的是在PC上,
分析工具:X信PC端, fiddler, olldebug, IDA。可能分析过程中有疏漏或者错误,请大家斧正。

先搭建环境,简要介绍一下,olldebug启动xxchat PC端电脑登录, fiddler需要配置成可以抓取https模式(具体这里不展开,可以网上查找具体步骤)。
lDA分析 xxchatwin.dll (主要代码逻辑在这个dll中)

目前从我找到的这些例子看起来,一般的流程是:
1:当您在xxchat中点击某网址后,首先xxchat客户端浏览器发送请求到该网址。


2:该网址可能会判断是否有xxchat浏览器发出,如何判断,我这里看到的几个网站都是根据UA来判断。这也就是为什么很多网上教程说修改UA就可以生效。
请注意,有些网站的链接是同时支持PC端和xxchat 客户端,所以如果不修改UA的话,返回的是PC端适配的网页。后续步骤就全部都不同了,需要小心。


3:如果是xxchat浏览器发出,有些网站会多发一个302的重新定向请求(为了区分PC,和xxchat)。


4:这是这个网址的第二个页面,是调用xxchat的服务器API生成,大部分都类似于如下图:



需要注意红色部分,这里面此网站要根据X信给的私钥生成最关键的key。然后好玩的时候来了,有些网站或者是比较早期的时候,
key,pass_ticket(每次登陆唯一标识), uin(用户的唯一身份表示)这三个关键信息是有可能直接跟到Transfer这个网址后面的。
就是我红框的位置, 这样其实就很简单了,直接用就好了。

4:上一步是跳转到https://open.XXXX.XX.com/connect/oauth2/authorize。。。。这个网址,就像是你要访问的服务器已经给xxchat服务器说:
“老板,过一会要来一个客人,头戴草帽(pass_ticket),长得潇洒无比(uin),手拿我的定情信物(key)。 你千万不要拒之门外呀。”
于是乎这里还有两个验证,第一个验证就是地域验证,你是不是xxchat客户端,如果不是我还是照样可能拒绝你,这次可是X信的服务器拒绝你。
所以这里的UA还是要修改。也就是说,向这两个网站发出的UA都必须修改为xxchat客户端的UA,才可能通过。


第二个验证就是UIN,key, pass_ticket。
如果没有或者验证失败,也会出现 “请在X信客户端打开链接”,而且很恶心的是,给出的错误代码和没有配置UA是一样的。
所以很多小伙伴不停的怀疑是不是啥地方写错了,其实根本没错,就是因为UIN,Key,Pass_ticket不对或者不在而已。


第三步的时候,有些网站直接返回了这三个值,那就简单了,啥都不用管,你的系统浏览器自己会跳转的,恭喜你可以到第五步了。


现在需要看一下如果第三步中如果网站上没有给这三个值怎么办呢?(其实另外其他两个值我们可以自己在客户端获取,主要是key拿不到。)
如果没有给这三个字,一般都会带一个#xxchat_redirect字段,这就是你要访问的网站服务器告诉x信客户端,你等我的飞鸽传书吧!

5:简单回顾一下,如果如果第三步中如果网站上给出的是UID,key,xxchat的值,其实所有的工作就是把这三个网址的UA修改为
“Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 Windowsxxchat”,


就可以解决了,但是这样的网站越来越少。我们看一下回复#xxchat_redirect字段,我们打开Olldebug跟踪一下:



本来有个断点在msg 接受那边的,结果怎么都找不到了,给大家断在数据库查找这边也是一样的,可以看到xxchat收到msg以后先存到数据库,
然后从数据库中取出这个url重新发送出去。


也就是带有#xxchatredirect字样的,应该是网站调用xxchat API把具体重定向地址发送给xxchat 服务器,
xxchat服务器发送这个信息给客户端,然后客户端的xxchat浏览器自动重定向到这个网页。这样我们的外部浏览器就真的没办法自动定向了。
因为无法单单依靠浏览器截获到xxchat服务器给xxchat发的消息。


本来想写一个xxchat插件,拦截这个消息的,但是后来想了想其实没有这么麻烦。
直接在fiddler里面抓这个URL就好,这里面都带了这三个参数。写一个插件还要解释插件本身没有病毒,也挺烦的。对于只想打开某个网页几次的同学,
直接用fiddler抓包就好,两个步骤,第一个,先用Fiddler发送第一个包,这个包属于你要看的网站,然后在发送第二个包,这个是给xxchat认证。


一般来说,这样就可以解决90%的问题。


不过有的网站还多一步检查,在第二步返回的页面,有关于对于xxchat的调用检查,真的好烦。。。比如

但是实际上,这个时候我们key拿到,uid拿到,pass_ticket拿到,还有啥好担心的呢?无非就是一些javescript而已,页面调试一下就好。


不过千万注意,这个地方如果出错,也会提示请在X信客户端打开链接。好吧,人间不值得。


那批量的操作应该咋做呢?Fiddler可是可以写插件的。用插件和你的python或者程序沟通,拿到那三个关键的数值,就可以批量抓取了。
需要注意的是这些值有过期时间,根据每个网站不同而言,需要定期重发一下,其中我见到过最严格的是10分钟过期。

基本上经过这么几步,你的PC上的浏览器就可以跑起来了,你也可对那些可怜的羔羊为所欲为了。 此文章只讨论可行性,不提供代码。请不要问我要代码实现啦,谢谢。

jimmyzang 发表于 2019-11-22 06:02

皇帝陛下万岁 发表于 2019-11-20 09:57
请问投票限制次数的,调用了xx 的api查用户,这个是不是没办法饶过了

具体问题具体分析,根据上面的逻辑,我们已经可以脱离x信的浏览器了,他调用api也是xxxbridge之类的,可以根据逻辑给他改一下.
不是没有成功的希望。要看服务器校验有多严格。

jimmyzang 发表于 2019-11-19 17:02

顺便记录一下两个个ollydbg的点,基地址F3F1000。
0FB509A5|.68 94D55D10   push WeChatWi.105DD594                   ;navigateToUrl url:%s firstLoadUrl=%d
弹出网页重定向输出log。
0FB4D621|.68 30D25D10   push WeChatWi.105DD230                   ;GET_A8KEY_SUCCESS_FULL:%s
Get A8 key 成功信息


涛之雨 发表于 2019-11-19 18:18

有没有可能在fd写规则直接拦截后改ua实现?
而且浏览器有改ua的插件。。。是不是可以直接使用?

tzp371326 发表于 2019-11-19 16:59

学习了,今天晚上 就去开始恶补这方面知识

1994Vampire 发表于 2019-11-19 17:06

就喜欢这种及时的回复和深度好文,在吾爱学到很多,】

sm3p666 发表于 2019-11-19 17:10

{:1_911:}haohaohoah

hahayuan 发表于 2019-11-19 17:16

牛叉。大佬发财。。有这技术。。

传说中的五号 发表于 2019-11-19 17:20

pc微信远程调试下就行的吧

SRXHLB 发表于 2019-11-19 17:48

厉害/:strong

Wang17768161991 发表于 2019-11-19 18:15

感谢分享

a87399 发表于 2019-11-19 18:16

头戴草帽(pass_ticket),长得潇洒无比(uin),手拿我的定情信物(key)

以上不同的值不关怎么变,最终告诉网站,这是A用户

网站会记录A用户,然后网站就提醒A用户,不能重复操作
页: [1] 2 3 4 5 6
查看完整版本: 关于“请在X信客户端打开链接”的分析