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

相关文章
相关标签/搜索