Apple公司全線在mac
os與ios兩個操作系統上內置了FaceTime與iMessage兩個應用。完美替代運營商的短信與電話。並且FaceTime與iMessage的帳號不僅僅與Apple
ID 綁定,同時也與使用這Apple ID的手機號碼綁定,這樣的漏洞自然給無孔不入的中國的群發垃圾信息商們提供了後門。
這樣iPhone的iMessage時不時就能收到以郵件為發送者的垃圾iMessage,尤其是嘀嗒打車群發的最多,聽說是廈門壹家公司操刀的。針對iMessage的群發實現,新聞稿上說是花幾分鐘寫個腳本就可以了。可惜我花時間研究了好幾次,也沒有實現大批量群發的實現,倒是把自己的Apple
ID搞的電腦與手機不同步了。
我研究怎麽實現iMessage群發先是從XMPP協議開始的,因為Apple
MAC
os上的ichat是XMPP客戶端,可以連接iMessage服務器,同時也可連接gtalk與weibo私信。但後面發現iMessage的服務器驗證是加密,沒辦法實現非ichat
XMPP客戶端連接iMeesage服務器,那就自然沒辦法實現程序控制往iMeesage服務器批量發送信息。
只能通過MAC
OS或者iOS自帶的程序往iMeesage服務器發送信息,那要實現群發,自然只能想辦法去調用自帶的這ichat客戶端,在MAC
OS系統上Apple公司提供壹種叫Apple script的腳本來自動實現任務。可能通過tell
application "Messages"就可以激活iMessage客戶端自動發送信息。這樣實現的群發的思路就很清楚了
1.通過AppleScript實現批量註冊itune帳號
2.通過AppleScript實現自動取壹個itune帳號群發100個APPle
ID的iMessage
set EMAIL to "EMAIL_DEL_DESTINATARI" -- el destinatari ha de tenir l'iMessage activat
set MSG to "COS_DEL_MISSATGE"
set N to the 1000 -- nombre de vegades que s'enviarà el missatge
set APPLE_ID to "E:" -- la teva Apple ID que ha de tenir iMessage activat
repeat N times
tell application "Messages"
send MSG to buddy EMAIL of service APPLE_ID
end tell
end repeat
看來新聞稿沒有說錯,實現iMessage群發確實只要幾分鐘寫腳本。但懂用使用iMessage的用戶顯然不是買iPhone裝逼用的用戶,妳群發的iMessage除騷擾又能帶來什麽樣的效果喲。
後面在網上搜索到壹個更詳細的博客說明,轉載如下:
iMessage介紹
iMessage是蘋果設備(iPad、iPhone、iPod
touch)自帶的免費信息發送應用。它的信息通過網絡發送,不同於運營商短信。目前iMessage日活躍用戶1.9億,日發送約20億條。
iMessage優勢
iMessage與傳統短信不同,具有以下優勢:
目標人群明確,均為蘋果用戶,消費能力較強
文字數量不限,同時還可以添加表情和圖片
可以添加網址、下載鏈接等,用戶可以直接通過手機訪問
不會被手機安全衛士攔截
轉發就像手機短信壹樣方便
無發送成本
送達終端的概率極高
iMessage推送技術實現
群發iMessage主要需要攻破兩個技術難點,壹個是iMessage賬號的獲取,另壹個是群發iMessage。
iMessage賬號獲取
iMessage賬號目前獲取的方法主要是掃描手機號碼。掃描手機號碼可以通過代碼自動掃描,也可以通過人工篩選。通過代碼自動掃描本人暫未發現很好的方法,建議大家可以從以下兩方面著手:
1.編寫AppleScript腳本控制Mac
OS自帶的iMessage客戶端進行驗證,類似於群發iMessage。發送壹條iMessage之後,如果捕獲到發送失敗的異常則不是iMessage賬號
2.研究iOS系統中Message
framework中的私有api,通過私有api進行驗證
要進行人工篩選,也可以通過Mac
OS自帶的iMessage客戶端。方法是編寫程序,將要驗證的號碼輸出到文件中,以逗號分隔。再將文件中的號碼粘貼到iMessage客戶端的地址欄,iMessage客戶端會自動逐個檢驗該號碼是否為iMessage賬號,檢驗速度視網速而定。其中紅色表示不是iMessage賬號,藍色表示iMessage賬號以及未檢驗的賬號。如圖:
檢驗過程中有可能會出現停止的現象,可以全選所有號碼後,剪切再粘貼即可繼續檢驗。
iMessage群發
檢驗完所有賬號後,可以從中選取出iMessage賬號進行群發。群發有兩個方法,壹個還是通過iMessage客戶端,另壹個是通過AppleScript腳本控制iMessage客戶端發送。
通過iMessage客戶端發送,可直接將號碼粘貼至地址欄,填寫內容,發送即可。
通過ApplseScript控制iMessage客戶端的腳本如下:
tell application "Messages"
set csvData to read "/Users/xxxx/Desktop/test.csv"
set csvEntries to paragraphs of csvData
repeat with i from 1 to count csvEntries
set phone to (csvEntries's item i)'s text
set myid to get id of first service
set theBuddy to buddy phone of service id myid
send "今天北京晴,氣溫13到27度;周二晴,氣溫11到26度,北風3-4級;周三晴,氣溫11到24度,微風<3" to theBuddy
end repeat
end tell
以上代碼可從壹個csv文件中讀取出iMessage賬號,並通過iMessage客戶端逐個發送iMessage消息。
需要註意如下問題:
1.由於該腳本是控制iMessage客戶端進行發送,所以必須在MacOS
10.8以上(10.7系統中的iMessage Beta版本已無法使用)的系統中運行,同時開啟iMessage程序。
2.該腳本在發送iMessage時並不是後臺發送,所以當發送量很大時,會導致iMessage客戶端運行緩慢,甚至無法開啟。可通過清空所有已發送的iMessage或註銷賬號解決。
3.通過腳本發送的iMessage賬號必須是在當前iMessage客戶端中檢驗過的,否則會報“不能獲得“buddy
id "C0B35E7F-A0FB-49E1-BDD7-C867BC06D920:+86136xxxx0000"”。
從上面轉載的博文上可以看出來,這哥們主要是做了簡單少數號碼的嘗試,沒有真正大量群發過,但他在最後也提出了真正群發會遇到問題,三個問題解決方案如下:
第壹個問題用mac
os系統或者黑蘋果裝10.8操作系統,會自帶messages程序,這程序系統自帶,千萬不會發現打不開去刪除Messages程序,刪除就只能重裝系統了。並且是先打開Messages程序,再啟動apple
script腳本,不然運行不正常。
第二個問題,在發送過程中加入同步刪除的代碼,但同步壹條壹條刪除時有時會失敗,所以再增加發壹定量後再批量刪除壹次的操作,正常的流程應該是打開Messages程序->循環號碼庫->讀取壹個號碼->發送壹條信息->等待1秒->刪除此條信息->判斷是否未刪除的超過100條,是批量刪除->循環號碼庫。這樣就可以保證Messages程序不會去占百分壹百多的CPU或者幾個G的內存。
tell application "Messages"
set csvData to read "/Users/xxxx/Desktop/test.csv"
set csvEntries to paragraphs of csvData
repeat with i from 1 to count csvEntries
set phone to (csvEntries's item i)'s text
set myid to get id of first service
set theBuddy to buddy phone of service id myid
send "今天北京晴,氣溫13到27度;周二晴,氣溫11到26度,北風3-4級;周三晴,氣溫11到24度,微風<3" to theBuddy
delay 1 -延時壹秒,不然取不到已發達的內容
set FailNum to (get count chat)
if FailNum>100 then
repeat with j from 1 to FailNum
set phone to (get name of chat (FailNum-j))
set DelMsg to "iMessage;-;" & phone
if exists (text chat id DelMsg) then
delete text chat id DelMsg
end if
end repeat
end if
end repeat
end tell
第三個問題,在messages程序的imessage帳號中設置用來群發的imessage帳號。就沒有問題了。