乐趣区

关于macos:Mac-自动填充验证码的探索

背景

智能手机倒退到 2022 年了,不论应用的是 Android 还是 iOS,当咱们收到短信验证码之后,手机会主动提取出其中的验证码并复制进去,如果给的权限够多,它甚至能够帮你主动填充到你正要输出的中央,只是不同零碎之间会有些许差异。

这是咱们都已知且习惯的操作。

当然,验证码作为以后越来越重要的一种平安验证工具,容许软件如此自在获取到验证码是一件十分危险的事件,所以最好不要容许零碎外的第三方后盾联网输入法来读取它。

然而,如果你应用的是桌面设施,那如何将手机收到的验证码主动在桌面设施上填充呢?

摸索

家喻户晓,如果恰好同时应用了 Mac 与 iPhone,这个操作 Apple 也曾经为你做好了(局部)。

参考将 iPhone 中的短信 / 彩信转发到 iPad、iPod touch 或 Mac。

当手机收到短信时将会主动同步到同一个 Apple ID 登录的 Mac 下面。

如果你应用的正好是 Mac 自带的 Safari 浏览器来填充验证码,祝贺你,你不必做任何操作,你将能够在 Safari 下面点一下间接填充手机收到的验证码。

延长

因为 Apple 的隐衷限度,在 Safari 之外比方 Chrome 等 Apple 生态外的软件内咱们是无奈如此不便地填充验证码的。

咋办,有人和我一样懒吗?

有人用 ohtipi 计划,然而如同免费而且仅仅限度在浏览器内。

也有其余脚本计划的。

Bokun 的计划 是做定时器每分钟跑一次,这种不高频的操作做定时器后盾始终跑,感觉有点过了,我参考做了个适宜我的手动计划。

大抵原理

Mac 收到的信息内容会存储在 /Users/${Your Name}/Library/Messages/chat.db 这个文件内,通过脚本读取最近 60 秒的一条信息内容,如果有验证码信息,通过正则筛选出其中的验证码,并复制到剪贴板,胜利与否都给出一条零碎告诉。

步骤

  1. 在你喜爱的中央新建一个 shell 脚本文件(比方 /Users/${Your Name}/Shells/AutoCheckCode.sh,文件内容在文末),给此文件授予以后用户读与写的权限(选中文件 ⌘+I)。
  2. 测试一下此脚本是否正确,应用零碎自带终端或者 iTerm,cd 到寄存上一步文件的目录内,执行 ./AutoCheckCode.sh,胜利与否都将收到一条提醒。到这一步,前面只须要思考如何以最疾速的形式执行这个脚本。

    须要留神无论应用自带终端、快捷指令、主动操作、或者 iTerm 等执行此脚本,都须要到零碎偏好设置 - 平安与隐衷 - 隐衷 - 齐全磁盘拜访权限,关上对应软件的权限。

  3. Mac 上疾速执行脚本有很多形式,我也都进行了尝试。

    • 思考应用 Mac 新版本的快捷指令,运行 Shell 脚本,报错放弃。👎🏻
    • 应用 Mac 的主动操作编写一个疾速操作,而后到零碎偏好设置 - 键盘 - 快捷键 - 服务 - 通用,将刚刚写的操作配置一个快捷键,看起来完满。可是运行发现必须要主动操作这个 APP 在前台能力胜利,放弃。👎🏻
    • 应用主动操作创立一个应用程序,程序内抉择运行 shell 脚本,脚本内容为 sh /Users/${Your Name}/Shells/AutoCheckCode.sh,保留此利用至 Mac 的应用程序目录之内,名称看集体喜爱,比方「复制验证码.app」。同时记得给这个利用齐全磁盘拜访权限。👍🏻
  4. 此时相当于你曾经开发打包并装置了一个 Mac 的应用程序,尽管它很简略。
  5. 触发这个程序的形式那就更多了,Alfred、HapiGo、Raycast,甚至手动点击一下也是能够的,当 Mac 收到短信的时候,执行一下利用即可。

脚本内容

#!/bin/bash

echo "starting to check code";
  # 门路中的 dufu 记得改成本人电脑的名字
  # 通过 Sqlite3 查 1 条 iMessage 最近 60 秒收到音讯(iMessage 收到音讯的工夫可能有提早,这里理论冗余多了 2 秒)#! /Users/dufu/Library/Messages/chat.db
  #!这个 DB 文件和目录记得给开权限,默认是不给读的。result=$(sqlite3 /Users/dufu/Library/Messages/chat.db 'SELECT text FROM message WHERE datetime(date/1000000000 + 978307200,"unixepoch","localtime") > datetime("now","localtime","-60 second") ORDER BY date DESC LIMIT 1;')

  name="验证码";

  # 看下最近有没有收到音讯
  if [! $result]; then
      echo "latest not receive code messsages";
      osascript -e "display notification \" 最近 60 秒未收到验证码!\"with title \" 提醒 \" ";
      return
  fi

#   如果短信中蕴含验证码则取前 4-6 个数字
  if [["$result" =~ "$name"]]; then
      code=`echo $result | grep -o "[0-9]\{4,6\}"`;
      echo "code is $code";
      # 将获取到的数字输入到剪贴板
      echo "$code" | pbcopy;

      # 发个零碎告诉,展现内容,同时揭示你能够 Command + v 粘贴了。osascript -e "display notification \"$code\"with title \" 验证码已复制 \"";
  fi

题外

另外也能够应用 Mac 的脚本编辑器,输出以下 AppleScript(我应用了 iTerm), 保留时文件格式抉择应用程序

tell application "iTerm"
    activate
    create window with default profile command "sh /Users/dufu/Shells/AutoCheckCode.sh"
end tell

如果感觉创立的这个 APP 图标不难看,能够复制一张图片,在访达里选中这个利用,按 ⌘+I,选中利用图标 ⌘+V,将你的利用图标替换。

补充:除了我这种将脚本打包成 APP 手动执行计划,Bokun 的每分钟执行一次计划,有其余平台的用户提供了另外一条思路,通过 launchctl 服务(WatchPaths)监看 chat.db 文件是否发生变化,如果发生变化,则执行指定的脚本。
他没有写具体的实现办法,感兴趣的能够本人钻研一下。

退出移动版