iMessage 羣發

Apple公司全線在mac os與ios兩個操做系統上內置了FaceTime與iMessage兩個應用。完美替代運營商的短信與電話。而且FaceTime與iMessage的賬號不只僅與Apple ID 綁定,同時也與使用這Apple ID的手機號碼綁定,這樣的漏洞天然給無孔不入的中國的羣發垃圾信息商們提供了後門。ios

這樣iPhone的iMessage時不時就能收到以郵件爲發送者的垃圾iMessage,尤爲是嘀嗒打車羣發的最多,據說是廈門一家公司操刀的。針對iMessage的羣發實現,新聞稿上說是花幾分鐘寫個腳本就能夠了。惋惜我花時間研究了好幾回,也沒有實現大批量羣發的實現,卻是把本身的Apple ID搞的電腦與手機不一樣步了。git

我研究怎麼實現iMessage羣發先是從XMPP協議開始的,由於Apple MAC os上的ichat是XMPP客戶端,能夠鏈接iMessage服務器,同時也可鏈接gtalk與weibo私信。但後面發現iMessage的服務器驗證是加密,沒辦法實現非ichat XMPP客戶端鏈接iMeesage服務器,那就天然沒辦法實現程序控制往iMeesage服務器批量發送信息。github

只能經過MAC OS或者iOS自帶的程序往iMeesage服務器發送信息,那要實現羣發,天然只能想辦法去調用自帶的這ichat客戶端,在MAC OS系統上Apple公司提供一種叫Apple script的腳原本自動實現任務。可能經過tell application "Messages"就能夠激活iMessage客戶端自動發送信息。這樣實現的羣發的思路就很清楚了
1.經過AppleScript實現批量註冊itune賬號api

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億條。app

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

相關文章
相關標籤/搜索