iMessage 群發


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賬號以及未檢驗的賬號。如圖:
image
檢驗過程中有可能會出現停止的現象,可以全選所有號碼后,剪切再粘貼即可繼續檢驗。

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帳號。就沒有問題了。

 

https://blog.csdn.net/zhaoxy_thu/article/details/9255165

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM