是否有一种快速简便的方法来转储MacOS X钥匙串的内容?

时间:2009-04-04 13:37:49

标签: macos applescript keychain

我正在寻找一种方法将OS X钥匙串的内容转储(导出)到我可以轻松处理的文件中,例如制表符分隔的明文或类似的东西。

钥匙串访问应用程序不提供任何此类功能,并且获取密钥的数据涉及依次打开每个密钥,并且必须每次都输入密钥链的密码以查看密钥存储的密码。

经过一番挖掘,我找到了一个人的解决方案,使用AppleScript和Keychain Scripting应用程序访问钥匙链(无法链接到单个帖子;向下滚动约三分之二到页面末尾):

http://discussions.apple.com/thread.jspa?threadID=1398759

使用Keychain脚本,您可以访问所有密钥的所有数据字段 - 包括明文密码! - 将这些数据转储到文本文件等中相当容易。我已经对它进行了测试,效果很好。

但是,此解决方案仍然需要通过单击对话框上的“确定”来确认对每个键的访问权限。这比每次输入钥匙串的密码要好得多,但它仍然令人生气。此外,您必须为每个密钥确认两次访问权限;一次用于脚本编辑器(或脚本本身,如果它作为应用程序运行),一次用于Keychain脚本。因此,如果您使用100个键处理钥匙串,则必须在200个对话框中手动单击“确定”。

我现在正在寻找解决方案来解决这个问题。我意识到,因为密钥链的目的是保护敏感数据并防止我正在尝试做的事情,所以任何这样的解决方案都可能涉及某种黑客攻击。

我对你的想法非常感兴趣!

5 个答案:

答案 0 :(得分:33)

好吧,我很蠢。有一个名为security的命令行工具可以做到这一点(以及许多其他关键链上的操作)。

示例用法:

security dump-keychain -d login.keychain

这会将login.keychain中的所有数据(用户的默认钥匙串)转储为纯文本,包括密码。你仍然必须确认访问权限,但每个密钥只需要一次,并且使用AppleScript比使用AppleScript要快得多(并且在尝试访问某些字段时不会产生奇怪的错误)。而且这不是黑客攻击。

如果没有-d选项,它将转储除密码以外的所有字段。

密钥的转储数据如下所示(对于互联网密钥;程序密钥和证书具有其他字段,但格式相同):

keychain: "/Users/<username>/Library/Keychains/login.keychain"
class: "inet"
attributes:
    0x00000007 <blob>="tech.slashdot.org (<username for this web login>)"
    0x00000008 <blob>=<NULL>
    "acct"<blob>="<username for this web login>"
    "atyp"<blob>="form"
    "cdat"<timedate>=0x32303038303432333038323730355A00  "20080423082705Z\000"
    "crtr"<uint32>=<NULL>
    "cusi"<sint32>=<NULL>
    "desc"<blob>="Kennwort des Web-Formulars"
    "icmt"<blob>="default"
    "invi"<sint32>=<NULL>
    "mdat"<timedate>=0x32303038303432333038323730355A00  "20080423082705Z\000"
    "nega"<sint32>=<NULL>
    "path"<blob>=<NULL>
    "port"<uint32>=0x00000000 
    "prot"<blob>=<NULL>
    "ptcl"<uint32>="http"
    "scrp"<sint32>=<NULL>
    "sdmn"<blob>=<NULL>
    "srvr"<blob>="tech.slashdot.org"
    "type"<uint32>=<NULL>
data:
"<the plaintext password for this key>"

答案 1 :(得分:14)

请阅读此内容: https://gist.github.com/rmondello/b933231b1fcc83a7db0b

忽略:-----

我在每个键的“始终允许”对话框中找到了溶剂!

只需使用sudo运行上一个命令。

sudo security dump-keychain -d login.keychain

这样您只需输入两次密码即可。一个在终端上sudo和另一个解锁钥匙串! ;)

度过美好的一天!

答案 2 :(得分:0)

更新,现在有一个工具可以很好地完成这个任务:

  

Keychaindump是一种概念验证工具,用于以root身份读取OS X钥匙串密码。它搜索位于安全进程的内存空间中的未锁定钥匙串主密钥,并使用它们来解密密钥链文件。

来源:org.apache.http.client.HttpClient

答案 3 :(得分:0)

实际上我只是在寻找相同的东西: 来自github的修改过的applescript有人发布。要在ScriptEditor中运行,并且必须在“首选项和安全性”中允许。

<base href="/FIN360">

必须分别单击每个窗口才能激活它们。为此,我使用了多年前从runescape得知的工具“ murgaa auto clicker”(http://www.murgaa.com/auto-clicker-mac/似乎仍然处于活动状态)。您只需设置自动点击的快捷方式(例如Command + R)并将计时器设置为10ms,就可以像超级按钮一样工作。

答案 4 :(得分:-2)

我找到了多次不点击“允许”的解决方案

sudo su
security dump-keychain -d /Users/YourUsername/Library/Keychains/login.keychain