MacOS High Sierra KEXT加载-是否有取消用户批准的方法?

MacOS High Sierra KEXT加载-是否有取消用户批准的方法?,macos,macos-high-sierra,kernel-extension,Macos,Macos High Sierra,Kernel Extension,正如某些MacOS开发者所知,苹果实现了 用户可以通过单击安全和隐私中的批准按钮来批准第三方KEXT。 但是,一旦KEXT获得批准,是否有取消批准的方法 想象一下,使用KEXT加载测试应用程序的情况,等等 如果除了干净的安装之外别无选择,测试应用程序是非常困难的。有关批准的信息存储在sqlite3数据库中: /var/db/SystemPolicyConfiguration/KextPolicy 您感兴趣的表有:kext\u policy和kext\u load\u history\u v3。

正如某些MacOS开发者所知,苹果实现了

用户可以通过单击
安全和隐私
中的
批准
按钮来批准第三方KEXT。 但是,一旦KEXT获得批准,是否有取消批准的方法

想象一下,使用KEXT加载测试应用程序的情况,等等


如果除了干净的安装之外别无选择,测试应用程序是非常困难的。

有关批准的信息存储在
sqlite3
数据库中:

/var/db/SystemPolicyConfiguration/KextPolicy
您感兴趣的表有:
kext\u policy
kext\u load\u history\u v3
。例如,以下是查看数据和表架构的方法:

sqlite3 /var/db/SystemPolicyConfiguration/KextPolicy

sqlite> select * from kext_policy;
54GTJ2AU36|com.joshuawise.kexts.HoRNDIS|1|Joshua Wise|1

sqlite> .schema kext_policy
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );
由于系统完整性保护不允许您修改数据库,因此删除批准是一个棘手的问题。因此,您需要重新启动到恢复分区或其他MacOS安装中,然后将cd放入卷的根目录中,并运行以下命令(替换为您的团队id,或使用其他条件):


为了回应人们在评论中所说的话,我发现被接受的解决方案不起作用。我还不得不重新设置婴儿车

工作步骤:

  • 在文件系统的某个地方创建以下脚本(您将从恢复模式运行此脚本,因此无法在该模式下复制和粘贴)。您需要将
    TEAMID1234
    替换为要撤销同意的kext的团队ID。请注意,恢复模式下需要指向
    /Volumes/Macintosh\HD
    的完整路径

    我调用脚本
    /Users/me/revoke\u kext\u approve.sh
    ,然后运行
    chmod+x/Users/me/revoke\u kext\u approve.sh

  • 重新启动到(使用Cmd-R启动)

  • 打开终端,运行上面的脚本(
    /Volumes/Macintosh\HD/Users/me/revoke\u kext\u approve.sh

  • 重新启动并重新启动(使用Cmd-Opt-p-R启动)


  • 我发现的最简单的方法是使用macOS 10.13设置一个新的VM并拍摄快照。测试您需要的内容,包括批准kext,然后在完成后回滚到快照。不幸的是,这对无法传递到VM的设备的驱动程序没有帮助!不幸的是,我的KEXT可以与USB设备一起工作……我不确定这与黑客有什么关系?VMWare Fusion可以将许多USB设备从主机Mac传送到来宾VM。它不适用于所有类型的硬件,但也适用于某些类型的硬件。时间机器可以恢复KEXTs的权限状态。@Hirofumitasori你找到一种有效的方法了吗?被接受的答案并不是一个好的答案,除非大多数人不知道什么是“团队ID”。可能是由
    select*from kext\u policy
    查询显示的列列表(不随查询一起输出)?谢谢哦,欢迎来到堆栈溢出。到目前为止,你的三个答案中有两个对我很有用;一天之内就很好了。坚持下去!谢谢现在我负责的工作不依赖于MacOS-p然而,这项技术总有一天会有用的。最重要的是,你的把戏很有趣;与time Machine案例相比,它可以节省大量时间。在10.13.6年款上,在执行所述步骤后,扩展仍会加载。还有一个名为kext_policy_mdm的附加表,但是从该表中删除相关记录也没有帮助——只是它们停止写入kext_load_history_v3。但它们仍然加载,并由kextstat列出。还有一个旧的平台缓存,它暗示了某种迁移。我猜不出它的记录与扩展有什么关系。关于迁移的提示通过名为“settings”的表和单个记录“migrationPerformed | YES”得到了加强。我的一些用户批准的KEXT甚至没有在此数据库中列出。它必须存在于其他地方
    usr/bin/sqlite3 var/db/SystemPolicyConfiguration/KextPolicy
    delete from kext_load_history_v3 where team_id='54GTJ2AU36';
    delete from kext_policy where team_id='54GTJ2AU36';
    .quit 
    
    #!/bin/sh -e
    /Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_policy where team_id="TEAMID1234";'
    /Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_load_history_v3 where team_id="TEAMID1234";'