苹果系统下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

 

posted @ 2024-07-24 15:24  沉雪's  阅读(54)  评论(0编辑  收藏  举报