Експорт брелоків


23

щоб перейти на Ubutun, я хотів би експортувати весь свій пароль, наприклад, у файл CSV.

У Keychain Access я знайшов меню експорту, але його завжди вимкнено, навіть коли доступ розблокований.

Що я повинен зробити?


Дивіться також це питання / відповідь: apple.stackexchange.com/a/185980/129823
Marcel Waldvogel

Відповіді:


18

Це якраз про те, як я це робив багато років тому, це оновлення сценарію для Yosemite 10.11.5 - але я не перевіряв його.

  1. Сценарій, який зберігає кожен елемент у брелоку до тексту:

    security dump-keychain -d login.keychain > keychain.txt
    
  2. Другий елемент AppleScript, який натискає кнопку "Дозволити", яку запускає 1-й скрипт, коли читає елемент із KeyChain.

    [Редагувати: липень 2016] Це було оновлено до примітки 10.11.5, оскільки деякі повідомили про блокування свого Mac із затримкою 0,2, я обмежив сценарій обробляти лише 200 результатів одночасно, таким чином, якщо у вас є 1050 елементів брелока , вам потрібно буде запустити цей сценарій 6 разів у ScriptEditor, вам також доведеться дозволити включення ScriptEditor у розділі «Доступність» у налаштуваннях безпеки в:

    tell application "System Events"
        set maxAttemptsToClick to 200
        repeat while exists (processes where name is "SecurityAgent")
            if maxAttemptsToClick = 0 then exit repeat
            set maxAttemptsToClick to maxAttemptsToClick - 1
            tell process "SecurityAgent"
                try
                    click button 2 of window 1
                on error
                    keystroke " "
            end try
        end tell
        delay 0.2
      end repeat
    end tell
    

Тоді посилання / оновлення йосеміту вище також має крок перетворення рубіну з текстового файлу в CSV, удачі!

ShreevatsaR вказує в коментарях, що це рубінове перетворення охоплює лише "паролі в Інтернеті", а не "паролі програми". Це пов’язано з метою сценарію - експортувати «паролі Інтернету» в додаток 1Password.

І ось запитання та відповіді щодо переповнення стека у цьому ж рядку

System.keychain знаходиться тут:

security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt

Щоб увімкнути AppleScript у діалоговому вікні Налаштування системи -> Налаштування безпеки та конфіденційності -> Вкладка конфіденційності, Параметр доступності повинен бути включений "Script Editor.app" Налаштування системи -> Налаштування безпеки та конфіденційності -> Вкладка конфіденційності, опція доступності


дуже тобі вдячний! Це добре працює. Я просто не знаю, чому я не можу експортувати свій System.keychain. Але більшість брелоків є і на login.keychain.
Maïeul

Дивіться оновлення для цього шляху елемента ключового ланцюга, але воно може запитати ім'я користувача та пароль для кожного елемента, який може бути змінено сценарієм Дозволити.
MichaelStoner

Думає. Я не маю компетенції в AppleScript. У мене в цьому брелоку небагато паролів, тому я буду друкувати свій основний пароль багато разів.
Maïeul

Якщо у вас немає результату, спробуйте запустити команду в тому ж каталозі, що і брелок.
Рок Стрішні

6
AppleScript не працював для мене в OS X 10.10.3 Yosemite, стверджуючи, що "Системні події отримали помилку: не вдається отримати групу 1 вікна 1 процесу \" SecurityAgent \ ". Недійсний індекс".
Марсель Вальдвогель

8

Я написав сценарій python, який перетворює дамп брелоків у файл Excel і думав, що я ним поділюся з вами. Я вибираю Excel над CSV або TSV, оскільки багато людей його встановили, і він працює просто, двічі клацнувши по файлу. Звичайно, ви можете змінити сценарій для друку будь-якого іншого формату. Я робив це на OS X 10.11 El Capitan, але повинен працювати і на старих ОС.

  1. Оскільки мені не подобається зберігати в простому диску свої паролі на жорсткому диску, я створив зашифрований контейнер за допомогою програми Disk Utility. Просто відкрийте Disk Utility (натисніть cmd+ Space, введіть "диск"). У додатку натисніть cmd+ Nдля нового зображення, змініть ім'я на SEC, змініть шифрування на 256-бітний AES і збережіть його під SEC у вибраному вами каталозі. Потім встановіть гучність, двічі клацнувши по файлу (або за допомогою Disk Utility).

  2. Створіть новий файл з назвою keychain.py у захищеному контейнері та вставте код нижче.

  3. Тепер відкрийте Terminal.app і змініть каталог на змонтований зашифрований том: cd /Volumes/SEC

  4. Нам потрібен менеджер пакунків python для встановлення модуля Excel (вам буде запропоновано ввести пароль): sudo easy_install pip

  5. Нам потрібно встановити модуль Python Excel: sudo pip install xlwt

  6. Тепер експортуйте паролі, використовуючи одну з інших відповідей на це питання. Я щойно зробив security dump-keychain -d > keychain.txtі спам натискав на кнопку Дозволити, тримаючи мишу іншою рукою.

  7. Останнім кроком є ​​перетворення файлу txt у читаний аркуш Excel за допомогою сценарію python: python keychain.py keychain.txt keychain.xls

.

#!/usr/bin/env python

import sys
import os
import re
import xlwt

# Regex to match both generic and internet passwords from a keychain dump
regex = re.compile(
    r"""
    keychain:\s"(?P<kchn>[^"]+)"\n                  # absolute path and file of keychain
    version:\s(\d\d\d)\n                            # version
    class:\s"(?P<clss>(genp|inet))"\n               # generic password or internet password
    attributes:\n
    (\s*?0x00000007\s<blob>=(?P<name>[^\n]+)\n)?    # name
    (\s*?0x00000008\s<blob>=(?P<hex8>[^\n]+)\n)?    # ? only used at certificates
    (\s*?"acct"<blob>=(?P<acct>[^\n]+)\n)?          # account
    (\s*?"atyp"<blob>=(?P<atyp>[^\n]+)\n)?          # account type ("form"), sometimes int
    (\s*?"cdat"<timedate>=[^"]*(?P<cdat>[^\n]+)\n)? # datetime created
    (\s*?"crtr"<uint32>=(?P<crtr>[^\n]+)\n)?        # vendor key with four chars like "aapl"
    (\s*?"cusi"<sint32>=(?P<cusi>[^\n]+)\n)?        # ? always null
    (\s*?"desc"<blob>=(?P<desc>[^\n]+)\n)?          # description
    (\s*?"gena"<blob>=(?P<gena>[^\n]+)\n)?          # ? always null except one rare cases
    (\s*?"icmt"<blob>=(?P<icmt>[^\n]+)\n)?          # ? some sort of description
    (\s*?"invi"<sint32>=(?P<invi>[^\n]+)\n)?        # ? always null
    (\s*?"mdat"<timedate>=[^"]*(?P<mdat>[^\n]+)\n)? # datetime last modified
    (\s*?"nega"<sint32>=(?P<nega>[^\n]+)\n)?        # ? always null
    (\s*?"path"<blob>=(?P<path>[^\n]+)\n)?          # path
    (\s*?"port"<uint32>=(?P<port>[^\n]+)\n)?        # port number in hex
    (\s*?"prot"<blob>=(?P<prot>[^\n]+)\n)?          # ? always null
    (\s*?"ptcl"<uint32>=(?P<ptcl>[^\n]+)\n)?        # protocol but is blob ("http", "https")
    (\s*?"scrp"<sint32>=(?P<scrp>[^\n]+)\n)?        # ? always null except one rare cases
    (\s*?"sdmn"<blob>=(?P<sdmn>[^\n]+)\n)?          # used for htaccess AuthName
    (\s*?"srvr"<blob>=(?P<srvr>[^\n]+)\n)?          # server
    (\s*?"svce"<blob>=(?P<svce>[^\n]+)\n)?          # ? some sort of description
    (\s*?"type"<uint32>=(?P<type>[^\n]+)\n)?        # some blob: "iprf", "note"
    data:\n
    "(?P<data>[^"]*)"                               # password
    """, re.MULTILINE | re.VERBOSE)

# Dictionary used by the clean function (Apple is not always right about the
# types of the field)
field2type = { 
    "name": "blob",
    "hex8": "blob",
    "acct": "blob",
    "atyp": "simple",
    "cdat": "timedate",
    "crtr": "uint32",
    "cusi": "sint32",
    "desc": "blob", 
    "gena": "blob",
    "icmt": "blob",
    "invi": "sint32",
    "mdat": "timedate",
    "nega": "sint32",
    "path": "blob",
    "port": "uint32",
    "prot": "blob",
    "ptcl": "blob",
    "scrp": "sint32",
    "sdmn": "blob",
    "srvr": "blob", 
    "svce": "blob",
    "type": "blob",
    "data": "simple",
    "kchn": "simple",
    "clss": "simple"
}

def clean(field, match):
    value = match.group(field)
    if not value or value == "<NULL>":
        # print null values as empty strings
        return ""
    if field2type[field] == "blob":
        # strip " at beginning and end
        return value[1:-1]
    elif field2type[field] == "timedate":
        # convert timedate to the iso standard
        value = value[1:-1]
        return value[0:4] + "-" + value[4:6] + "-" + value[6:8] + "T" + \
            value[8:10] + ":" + value[10:12] + ":" + value[12:14] + "Z" + value[16:19]
    elif field2type[field] == "uint32":
        # if it really is a hex int, convert it to decimal
        value = value.strip()
        if re.match("^0x[0-9a-fA-F]+$", value):
            return int(value, 16)
        else:
            return value
    else:
        # do nothing, just print it as it is
        return value

def print_help():
    print "Usage: python keychain.py INPUTFILE OUTPUTFILE"
    print "Example: python keychain.py keychain.txt keychain.xls"
    print "  where keychain.txt was created by `security dump-keychain -d > keychain.txt`"
    print "  When dumping the keychain, you have to click 'Allow' for each entry in your"
    print "  keychain. Position you mouse over the button and go clicking like crazy."




print "Keychain 0.1: convert an Apple Keychain dump to an Excel (XLS) spreadsheet."

# Check for correct parameters
if len(sys.argv) != 3:
    print_help()
    sys.exit(1)
elif len(sys.argv) == 3:
    if not os.path.isfile(sys.argv[1]):
        print "Error: no such file '{0}'".format(sys.argv[1])
        print_help()
        exit(1)

# Read keychain file
buffer = open(sys.argv[1], "r").read()
print "Read {0} bytes from '{1}'".format(len(buffer), sys.argv[1])

# Create excel workbook and header
wb = xlwt.Workbook()
ws = wb.add_sheet("Keychain")
ws.write(0, 0, "Name")
ws.write(0, 1, "Account")
ws.write(0, 2, "Password")
ws.write(0, 3, "Protocol")
ws.write(0, 4, "Server")
ws.write(0, 5, "Port")
ws.write(0, 6, "Path")
ws.write(0, 7, "Description")
ws.write(0, 8, "Created")
ws.write(0, 9, "Modified")
ws.write(0, 10, "AuthName")
ws.write(0, 11, "AccountType")
ws.write(0, 12, "Type")
ws.write(0, 13, "Keychain")

# Find passwords and add them to the excel spreadsheet
i = 1
for match in regex.finditer(buffer):
    ws.write(i, 0, clean("name", match))
    ws.write(i, 1, clean("acct", match))
    ws.write(i, 2, clean("data", match))
    ws.write(i, 3, clean("ptcl", match))
    ws.write(i, 4, clean("srvr", match))
    ws.write(i, 5, clean("port", match))
    ws.write(i, 6, clean("path", match))
    ws.write(i, 7, clean("desc", match))
    ws.write(i, 8, clean("cdat", match))
    ws.write(i, 9, clean("mdat", match))
    ws.write(i, 10, clean("sdmn", match))
    ws.write(i, 11, clean("atyp", match))
    ws.write(i, 12, clean("clss", match))
    ws.write(i, 13, clean("kchn", match))
    i += 1
wb.save(sys.argv[2])

print "Saved {0} passwords to '{1}'".format(i-1, sys.argv[2])

Ого, це виглядає дійсно ретельно. Я збираюся його зняти, хоча мені все ж потрібне рішення для захищених нотаток та паролів додатків ... :( Це повинно
перенести

Знайдена це відмінна ломка безпечних нотаток: stackoverflow.com/questions/22370552 / ...
hepcat72

Тепер мені просто потрібно розібратися, як створити експорт rtfd, що включає вбудоване зображення. У мене є кілька приміток із паролями у кришках екрана.
hepcat72

Дивовижне доповнення до цього, плюс один та thx
ehime

5

З OSX 10.10.3 є новий спосіб зробити автоматичне прийняття (я зіткнувся з проблемами під час шляху оновлення)

Функції Bash (додані до файлів .profileабо .bash_rcфайлів)

## At the terminal when you start getting the prompts, type `Accepts` and press enter
function Accepts () {
osascript <<EOF
  tell application "System Events"
    repeat while exists (processes where name is "SecurityAgent")
      tell process "SecurityAgent" to click button "Allow" of window 1
      delay 0.2
    end repeat
  end tell
EOF
}

## At the terminal when you start getting the prompts, type `Accepts YourUsername YourPassword` and press enter
function AcceptWithCreds () {
username="$1"
password="$2"

[ -z "${password}" ] && return 1

osascript 2>/dev/null <<EOF
    set appName to "${username}"
    set appPass to "${password}"
    tell application "System Events"
        repeat while exists (processes where name is "SecurityAgent")
            tell process "SecurityAgent"
                if exists (text field 1 of window 1) then
                    set value of text field 1 of window 1 to appName
                    set value of text field 2 of window 1 to appPass
                end if
            end tell
      tell process "SecurityAgent" to click button "Allow" of window 1
            delay 0.2
        end repeat
    end tell
EOF
echo 'Finished...'
}

І використовуйте цей скрипт, щоб скинути ваш keyring ( sudo ./dump.sh)

#!/bin/bash
# Run above script in another window

security dump-keychain -d login.keychain > keychain-login.txt
security dump-keychain -d /Library/Keychains/System.keychain > keychain-system.txt

Це чудово! Коли я запустив його, я потрапив execution error: System Events got an error: osascript is not allowed assistive access.у командний рядок. Найпростіший спосіб, який я вирішив вирішити це, - це вставити код AppleScript у додаток редактора сценаріїв і запустити його звідти.
Еван

AppleScripts не працює 10.10.5
морська риба

1
Це працювало для мене в ОС X El Capitan 10.11.6. Не слід копіювати останній символ (backtick) зі сценарію. osascript is not allowed assistive accessПомилки можна уникнути, дозволяючи ваш термінал додаток в System Preferences => Безпека і Захист => Доступність.
neon1

Це не працює на Mojave. AcceptWithCreds просто закінчується, нічого не роблячи.
морська риба

4

@ Відповідь МайклаСтонера є гарним початком, але він не вдається для ОС X 10.10.3 Yosemite, з його звітом про код AppleScript System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index.

Трохи погравши, для мене спрацювало таке рішення:

tell application "System Events"
    repeat while exists (processes where name is "SecurityAgent")
        tell process "SecurityAgent"
            keystroke " "
        end tell
        delay 1
    end repeat
end tell

Після цього потрібно буде натиснути на діалогове вікно "Дозволити". Цей код потребує певного часу, але я не рекомендую зменшувати затримку ("затримка 0,2" змусила мене примусити переоцінити свій Mac). Просто дістаньте чашку кави.


1
Простір -> натискання клавіші "" працює лише за наявності системних налаштувань -> Налаштування клавіатури -> вкладки "Ярлики", нижня опція "Повний доступ до клавіатури", а потім вибрано "Усі елементи керування"
MichaelStoner

3

Функція експорту брелка призначена для ITEMS, а не для всього брелока. Він також не дозволить вам експортувати більшість елементів, тобто тоді ви побачите функцію експорту в сірому кольорі.

Щоб скопіювати брелок з одного комп'ютера на інший, використовуйте програму Migration Assistant .

Або зробити це вручну, скопіювавши файл ключових ланцюгів, розташований у папці ~ / Бібліотека / Брелки /.

Відкрийте додаток Keychain Access на новому комп’ютері та виберіть File> Add Keychain….


1
дякую, але я сказав "іншій ОС" ... Я хочу залишити ОС X ...
Maïeul

Дякуємо за редагування та чіткість. Інший ос був оманливим. Отже, ви хочете його як текстовий файл тоді (CSV)?
Ruskes

1
так, csv, поки буде добре ...
Maïeul

1

securityДвійковий буде витягувати елементи з брелка з командного рядка, так що ви могли б сценарій , що в Пітоні , щоб скинути вміст систематично. Це дійсно залежить від того, в якому форматі ви хочете отримати дані та як ви будете використовувати їх уперед.

Копіювати / вставляти - це також гідний варіант, якщо ви знаєте, як довго ви прагнете впровадити нове рішення і чи потрібно вам вивчити / шукати існуючу програму чи бібліотеку, яка скидає вміст у вибраний формат.

Меню елементів експорту призначено для експорту з відкритим та / або приватним ключем, для якого існують стандартні формати файлів, які кодують і захищають дані, якщо потрібно, коли вони зберігаються у файловій системі для обміну та транспорту. Ця функція коротко задокументована у довідці для Keychain Assistant.


Немає іншого способу, крім сценарію? Гаразд, я буду придивлятися до цього бінарного, але ... стільки основної потреби, просто мати щось на кшталт CSV ...
Maïeul

1
Якщо ви можете відредагувати свою публікацію, щоб вказати, яка нова ОС та що відеозапис - це формат, який вам подобається, я, можливо, маю ще кілька ідей для вас. За запитанням, це дуже смутно ...
bmike

0

Існує виклик інструмента KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 .

Для витягу парольної фрази / рахунку / оплати / захищеної примітки / PublicKey / PrivateKey / SymmetricKey / сертифікату тощо від Keychain мовчки.


2
Не слід вставляти посилання, які вимагають від користувача створення облікового запису для перегляду вмісту. Було б краще, якщо ви перефразовували вміст посилання.
Девід Андерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.