乐于分享
好东西不私藏

人类对iOS快捷指令的开发不足1%:“安全模式”

人类对iOS快捷指令的开发不足1%:“安全模式”

你拿到了朋友的苹果平板,正想开始乱玩,结果每打开一个软件,立即返回主屏幕,并弹出弹窗。这,是可以通过快捷指令实现的,而且它的安全性至少用来防普通人完全足够。

首先,进入设置,新建一个专注模式,名字随便定(比如“安全模式”)。它将作为你的“安全模式”的开关。

随后,打开快捷指令。选择“自动化”,新建自动化->个人自动化,条件选择“App”,然后在app选择界面,把你要保护的所有app全都选上,随后触发条件选择“已打开”

剩下来的代码比较简单,可以直接抄

你以为到这里就结束了吗?当然不是!现在的“安全模式”本质上是一个勿扰模式啊,谁都可以关掉它,安全性还是太低了。所以我们还需要通过快捷指令在你关闭“安全模式”时进行验证

巧了,快捷指令的“自动化”功能又允许我们监听某个勿扰模式被关闭的事件

这样就简单了,当安全模式关闭时,用“请求输入”要求用户输入自己设定的密码,如果密码对,那么不做任何事,否则则重新开启安全模式

嗯……设计不错,但问题是,“请求输入”运行时,用户可以直接点击周围的空白区域,来直接结束这个快捷指令啊。安全性还是很低

那么能不能换个思路:当“安全模式”关闭时,打开“安全模式”,随后当用户密码输入正确时再关掉,否则保持不动,相当于把原来的逻辑反了一下

嗯……不错,安全多了。但问题又来了,“关闭'安全模式'”这个操作,又会导致自动化被运行,重新打开“安全模式”啊。

现在的问题其实就相当于:程序如何验证自己是被谁调用的

这简单。自动化里允许程序获取是哪个app调用了自己。然而真的尝试的话,会发现由于调用的直接原因是“安全模式”被关闭,所以调用者都是快捷指令app,无法进行判断

这时候,必须得用点邪修

我们从app store下载“捷径拓展”app,然后临时创建一个快捷指令,用捷径拓展的“随机文本”功能,生成一个随机的32(或者其他位也行)位文本。(或者你能通过其他方式获取随机文本也行)

然后,在监听“安全模式”被关闭的快捷指令最开头,加几行代码

然后,我们在用户密码输入正确的逻辑里,在“关闭'安全模式'”前面加几行代码

(我这里不是传统的密码验证,而是用了捷径拓展的其他功能,稍后会讲)

上下两张图的文本都是你生成的那个随机文本

谁跟你说剪贴板只能用来复制粘贴了,剪贴板甚至能让快捷指令之间互相传输消息(我理解的,开关“安全模式”是极低频操作,一个月最多也就一两次,剪贴板没就没了吧)

这里剪贴板的作用就是告诉程序,你是怎么被调用的。从而巧妙地避免了递归的出现。python中,我们一般用全局变量,或者直接函数调用时传参解决。

接下来,程序的基本功能已经搞定了,我们要让它稍微方便一点。捷径拓展里提供了功能,获取移动设备当前的屏幕朝向,如上图,可以获取屏幕朝向后,判断是否为某一特定朝向,若是,则解锁,若不是,则不解锁,此处逻辑与密码相近,要改动的代码只有“请求输入”部分,不再赘述

到这一步,没有任何人能在不动快捷指令,不重启,不知道密码或者操作的情况下,解开你的安全模式了。
但是,万一你的朋友(比如我)是个快捷指令高手,一看这个弹窗就知道是你设置的快捷指令,该怎么办?
很遗憾,快捷指令无法设置一个自动化,监听“快捷指令”被打开/关闭,因为这会带来大量的安全问题。这是iOS系统的限制,如果你不是古老的越狱党,那么没法破除这个限制。不过,我们可以稍微再耍点小花招(邪修党又上线了哈)
我们可以用屏幕使用时间,把快捷指令这个app直接禁用掉(每天一分钟的使用时间,再用自动化设置凌晨零点打开快捷指令app,零点零二分返回主屏幕)(如果你并不常使用快捷指令的话)。这样别人就打不开了,没法关掉你设置的自动化了。但是快捷指令的自动化却还能运行!(至少在iOS16系统上)我觉得这应该算个bug,不过有好处的bug,那不就是特性吗[doge]
(忽略限额是因为我要测试,没有启用屏幕使用时间密码)
自动化还能工作!
除非对方丧心病狂地把你快捷指令直接删了,或者是重启ipad了,否则这个“安全模式”没有任何普通人能破掉。
好了,这个是我今天拍毕业照时莫名其妙想到的想法。基于快捷指令的安全模式,当然了,引导式访问其实也能达到类似的效果,而且更简单,但是少了整蛊朋友的乐趣好吧