微信最近推出的一個社交工具網站 www.faxinxi.la ,能發投票、活動、文章。
但在微信外的瀏覽器包括PC端和移動端的都無法瀏覽這個網站任何內容,那是通過什么來控制的呢?通過微信內輸出特定JS接口不太可能,那就只能通過Header信息里的User-agent了,實驗后證實沒錯,通過探測可以知道微信內的User-agent信息:
Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 MicroMessenger/5.0.1
就是通過識別MicroMessenger這個關鍵字來確定是否來自微信,通過瀏覽器的user-agent插件就可以輕松繞過這個限制。
接下來就可以輕松獲得www.faxinxi.la的網頁源碼,其實這不是一個微信官方的應用,服務端是用ASP.NET寫的,而且是IIS服務器,有沒有注入漏洞就不知道了,不過注入了也沒什么實際價值,呵呵。
為什么要挖掘他的網頁源碼呢,這才是關鍵。譬如你發一個投票,網址是http://www.faxinxila.com/post/vote, 但你填完所有信息按提交后,網頁地址並沒有發生跳轉,而是ajax提交信息后彈出一個遮罩層,提示你點右上角的分享按鈕,注意,點分享前網址一直保持在/post/vote路徑,但點開分享里的信息已經發生了變化,分享出去后,網址也發生了變化,變成了/vote/3投票實際的展示路徑。 這是怎么做到的呢?
查看faxinxi里唯一js文件,你會發現一個WeixinJSBridge的輸出對象,再對比下通過微信公眾平台發出來的文章源文件,也有WeixinJSBridge對象腳本,問題迎刃而解,微信在內嵌webview里輸出了WeixinJSBridge對象供web端js調用。faxinxi已經將有用的js提取出來了,詳細腳本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
var
dataForWeixin={
appId:
""
,
title:
"input title here"
,
desc:
"input description here"
,
fakeid:
""
,
callback:
function
(){}
};
(
function
(){
var
onBridgeReady=
function
(){
WeixinJSBridge.on(
'menu:share:appmessage'
,
function
(argv){
WeixinJSBridge.invoke(
'sendAppMessage'
,{
"appid"
:dataForWeixin.appId,
"img_url"
:dataForWeixin.MsgImg,
"img_width"
:
"120"
,
"img_height"
:
"120"
,
"link"
:dataForWeixin.url,
"desc"
:dataForWeixin.desc,
"title"
:dataForWeixin.title
},
function
(res){(dataForWeixin.callback)();});
});
WeixinJSBridge.on(
'menu:share:timeline'
,
function
(argv){
(dataForWeixin.callback)();
WeixinJSBridge.invoke(
'shareTimeline'
,{
"img_url"
:dataForWeixin.TLImg,
"img_width"
:
"120"
,
"img_height"
:
"120"
,
"link"
:dataForWeixin.url,
"desc"
:dataForWeixin.desc,
"title"
:dataForWeixin.title
},
function
(res){});
});
WeixinJSBridge.on(
'menu:share:weibo'
,
function
(argv){
WeixinJSBridge.invoke(
'shareWeibo'
,{
"content"
:dataForWeixin.title,
"url"
:dataForWeixin.url
},
function
(res){(dataForWeixin.callback)();});
});
WeixinJSBridge.on(
'menu:share:facebook'
,
function
(argv){
(dataForWeixin.callback)();
WeixinJSBridge.invoke(
'shareFB'
,{
"img_url"
:dataForWeixin.TLImg,
"img_width"
:
"120"
,
"img_height"
:
"120"
,
"link"
:dataForWeixin.url,
"desc"
:dataForWeixin.desc,
"title"
:dataForWeixin.title
},
function
(res){});
});
};
if
(document.addEventListener){
document.addEventListener(
'WeixinJSBridgeReady'
, onBridgeReady,
false
);
}
else
if
(document.attachEvent){
document.attachEvent(
'WeixinJSBridgeReady'
, onBridgeReady);
document.attachEvent(
'onWeixinJSBridgeReady'
, onBridgeReady);
}
})();
|
以上分享腳本已寫入到本文章頁,你可以直接用微信分享本文章,會發現標題變成了“這是一個神奇的分享腳本”,文章地址指向了另外一篇微信接口的文章
這個代碼清晰明了,WeixinJSBridge.on(‘menu:share:timeline’)這段就是分享到朋友圈的作用代碼。PS:在faxinxi.la里還發現此網站有72個別名網址,站長真有米。
faxinxi網站其實也沒有獲得官方進一步的接口支持,譬如直接在微信網頁內獲得用戶的信息,而不需要用戶自己去輸入昵稱,這功能微信其實已經提供支持,但只是沒有開放的高級功能,是通過類似於oAuth方式取得授權就可以獲得用戶信息。
由於faxinxi網站已經被封禁,因此本人另外設置了一個分享腳本的測試地址:
http://wecode.4wer.com/test/weshare.html
頁面腳本請自行查閱,其中用到的分享腳本已封裝成獨立js文件,腳本github地址是:
https://github.com/dodgepudding/wechat-php-sdk/blob/master/wechat.js