苹果系统下Applescript实现iMessage数据筛选,无痕检测iMessage服务
一、实现iMessage数据检测的两种方式:
1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。
2.编写程序控制Mac os/iphone上自带的iMessage应用进行验证(自动无痕迹检测,无需人工干预),将数据自动填充到号码框之后,如果捕获到失败则不是iMessage账号,捕获到成功则把数据保存下来。
二、iMessage数据检测协议分析
/* 注意:检测不同国家手机号需要在手机号的前缀 +国家代码即可,自动检测导入的txt数据,蓝号数据自动保存,升级版参考相关文章: https://www.cnblogs.com */
无痕检测数据是否开通imessge功能代码如下:
-- 全自动无痕检测手机号或邮箱数据是否开启iMessage服务
startApp()
-- 执行iMessage蓝号检测主程序
on startApp()
tell application "Finder" to activate
tell application "Finder"
set chosenfile to (choose file)
end tell
tell application "Messages"
tell application "Messages" to activate
set phoneData to read chosenfile
set cards to paragraphs of phoneData
repeat with phone in cards
--set msgText to (my AppendFace(" "))
-- 假如字符串大于0,则草率判定是手机号
set num to the length of phone
if (num > 0) then
--执行检测
my sendMsg(phone)
delay 1
end if
end repeat
display dialog "恭喜,数据已全部检测完毕!"
end tell
end startApp
# 开始检测
on sendMsg(phone)
tell application "Messages" to activate
tell application "System Events"
tell process "Messages"
tell window 1
--核心代码,省略.........
if static text of sheet 1 of window "信息" of application process "Messages" of application "System Events" exists then
--对未启用imessage的手机号码进行记录
my WritePhone(phone, "未开启im的数据.txt")
else
--对已启用imessage的手机号码进行记录
my WritePhone(phone, "已开启im的数据.txt")
end if
delay 0.2
key code 76
end tell
end tell
end tell
end sendMsg
-- 记录有效手机号
on WritePhone(the_phone, file_name)
set num to the length of the_phone
if (num > 0) then
set fileName to date string of (current date)
set logFilePath to my current_folder_path() & "send/" & file_name
set this_file to (POSIX file logFilePath as string)
set this_story to the_phone & "
"
try
set fp to open for access this_file
set myText to read fp
if (myText does not contain the_phone) then
my write_to_file(this_story, this_file, true, true)
end if
on error
my write_to_file(this_story, this_file, true, true)
end try
end if
end WritePhone
-- 写入文件
on write_to_file(this_data, target_file, append_data, append_end)
try
set the target_file to the target_file as text
set the open_target_file to ¬
open for access file target_file with write permission
if append_data is false then
set eof of the open_target_file to 0
write this_data to the open_target_file starting at eof
else if append_end is false then
try
set fp to open for access target_file
set myText to read fp
set eof of the open_target_file to 0
write this_data to the open_target_file starting at eof
write myText to the open_target_file starting at eof
on error
write this_data to the open_target_file starting at eof
end try
else
write this_data to the open_target_file starting at eof
end if
close access the open_target_file
return target_file
on error
try
close access file target_file
end try
return false
end try
end write_to_file
-- 获取当前文件的父文件夹路径
on current_folder_path()
set UnixPath to POSIX path of ((path to me as text) & "::")
return UnixPath
end current_folder_path