Drugi element AppleScript, który klika przycisk „Zezwól”, który uruchamia pierwszy skrypt podczas odczytywania elementu z KeyChain.
[Edycja: lipiec 2016 r.] Zostało to zaktualizowane do notatki 10.11.5, ponieważ niektórzy zgłosili blokowanie swojego komputera Mac z opóźnieniem 0,2, ograniczyłem skrypt do przetwarzania tylko 200 wyników na raz, więc jeśli masz 1050 elementów pęku kluczy , musisz uruchomić ten skrypt 6 razy w ScriptEditor, musisz także zezwolić na włączenie ScriptEditor w sekcji Dostępność w preferencjach bezpieczeństwa w:
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
Następnie powyższa aktualizacja linku / yosemite zawiera również krok konwersji ruby z pliku tekstowego do CSV, powodzenia!
ShreevatsaR wskazuje w komentarzach, że ta konwersja ruby obejmuje tylko „hasła internetowe”, a nie „hasła aplikacji”. Wynika to z tego, że celem skryptu jest wyeksportowanie „haseł internetowych” do aplikacji 1Password.
Aby umożliwić AppleScript interakcję z oknem dialogowym Preferencje systemowe -> Preferencje bezpieczeństwa i prywatności -> Karta Prywatność, opcja dostępności musi mieć włączoną opcję „Script Editor.app”
dziękuję bardzo! To działa dobrze. Po prostu nie wiem, dlaczego nie mogę wyeksportować mojego pliku System.keychain. Ale większość pęku kluczy znajduje się również na login.keychain.
Maïeul
Zobacz aktualizację ścieżki tego elementu pęku kluczy, ale może poprosić o nazwę użytkownika i hasło dla każdego elementu, którym może być skrypt Zezwól, który można zmodyfikować.
MichaelStoner,
Myśli. Nie mam kompetencji w AppleScript. Mam tylko kilka haseł w tym pęku kluczy, więc będę wpisywać moje hasło główne wiele razy.
Maïeul
Jeśli nie otrzymasz danych wyjściowych, spróbuj uruchomić komendę w tym samym katalogu, co pęku kluczy.
Rok Strniša
6
AppleScript nie działał dla mnie w systemie OS X 10.10.3 Yosemite, twierdząc, że „W zdarzeniach systemowych wystąpił błąd: nie można uzyskać grupy 1 okna 1 procesu \„ SecurityAgent \ ”. Niepoprawny indeks”.
Marcel Waldvogel
8
Napisałem skrypt Pythona, który konwertuje zrzut pęku kluczy do pliku Excela i pomyślałem, że podzielę się nim z tobą. Wybieram Excela zamiast CSV lub TSV, ponieważ wiele osób go zainstalowało i działa po prostu klikając dwukrotnie plik. Możesz oczywiście zmodyfikować skrypt, aby wydrukować dowolny inny format. Zrobiłem to na systemie OS X 10.11 El Capitan, ale powinno działać również na starszych systemach operacyjnych.
Ponieważ nie lubię przechowywać tekstu hasła w postaci zwykłego tekstu na dysku twardym, utworzyłem zaszyfrowany kontener za pomocą aplikacji Disk Utility. Po prostu otwórz Narzędzie dyskowe (naciśnij cmd+ Space, wpisz „dysk”). W aplikacji naciśnij cmd+, Naby wyświetlić nowy obraz, zmień nazwę na SEC, zmień szyfrowanie na 256-bitowy AES i zapisz go pod SEC w wybranym katalogu. Następnie podłącz wolumin, klikając dwukrotnie plik (lub używając Narzędzia dyskowego).
Utwórz nowy plik o nazwie keychain.py w bezpiecznym kontenerze i wklej poniższy kod.
Teraz otwórz Terminal.app i zmień katalog na zamontowany zaszyfrowany wolumin: cd /Volumes/SEC
Potrzebujemy menedżera pakietów python do zainstalowania modułu Excel (pojawi się monit o podanie hasła): sudo easy_install pip
Teraz wyeksportuj hasła, używając jednej z pozostałych odpowiedzi na to pytanie. Właśnie to zrobiłem security dump-keychain -d > keychain.txti spam kliknąłem przycisk Zezwól, trzymając drugą rękę myszy.
Ostatnim krokiem jest przekonwertowanie pliku txt na czytelny arkusz Excel za pomocą skryptu 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])
Wow, wygląda to naprawdę dokładnie. Postaram się spróbować, ale wciąż potrzebuję rozwiązania dla bezpiecznych notatek i haseł do aplikacji ... :( To powinno dać mi długą drogę.
Teraz muszę tylko dowiedzieć się, jak utworzyć eksport RTFD, który zawiera osadzony obraz. Mam kilka notatek z hasłami w wielkich literach.
hepcat72
Niesamowity dodatek do tego, plus jeden i dzięki
ehime
5
Począwszy od OSX 10.10.3 istnieje nowy sposób automatycznego akceptowania (napotkałem problemy podczas ścieżki aktualizacji)
Funkcje Bash (dodane do jednego .profilelub .bash_rcplików)
## 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...'
}
I użyj tego skryptu, aby zrzucić swój brelok ( 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
To jest świetne! Kiedy go uruchomiłem, znalazłem się execution error: System Events got an error: osascript is not allowed assistive access.w linii poleceń. Najłatwiejszym sposobem, aby sobie z tym poradzić, było wklejenie kodu AppleScript do aplikacji Script Editor i uruchomienie go stamtąd.
Evan
Skrypty AppleScript nie działają w dniu 10.10.5
Oarfish
1
Działa to dla mnie w systemie OS X El Capitan 10.11.6. Pamiętaj, aby nie kopiować ostatniego znaku (backtick) ze skryptu. osascript is not allowed assistive accessBłędów można uniknąć poprzez umożliwienie swoją aplikację Terminal w oknie Preferencje systemowe => Bezpieczeństwo i prywatność => Ułatwienia dostępu.
neon1 1
To nie działa w Mojave. AcceptWithCreds po prostu kończy, nie robiąc nic.
Oarfish
4
@ Odpowiedź MichaelStonera to dobry początek, ale zawodzi w OS X 10.10.3 Yosemite, z raportowaniem kodu AppleScript System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index.
Po krótkiej zabawie zadziałało dla mnie następujące rozwiązanie:
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
keystroke " "
end tell
delay 1
end repeat
end tell
Po uruchomieniu tej opcji będziesz musiał kliknąć okno dialogowe „Zezwalaj”. Ten kod zajmie trochę czasu, ale odradzam zmniejszanie opóźnienia („opóźnienie 0,2” zmusiło mnie do wyłączenia komputera Mac). Po prostu napij się kawy.
Spacja -> naciśnięcie klawisza ”” działa tylko wtedy, gdy masz Preferencje systemowe -> Preferencje klawiatury -> zakładka Skróty, dolna opcja „Pełny dostęp z klawiatury”, a następnie wybrana „Wszystkie elementy sterujące”
MichaelStoner
3
Funkcja eksportu pęku kluczy dotyczy POZYCJI, a nie całego pęku kluczy. Nie pozwoli również na eksport większości przedmiotów - wtedy zobaczysz wyszarzoną funkcję eksportu.
Aby skopiować pęku kluczy z jednego komputera Mac na inny, użyj aplikacji Migration Assistant .
Lub zrób to ręcznie, kopiując plik łańcucha kluczy znajdujący się w folderze ~ / Library / Keychains /.
Otwórz aplikację Keychain Access na nowym komputerze i wybierz File> Add Keychain….
dzięki, ale powiedziałem „do innego systemu operacyjnego” ... Chcę opuścić OS X ...
Maïeul
Dzięki za edycję i przejrzystość. Drugi system operacyjny wprowadzał w błąd. Więc chcesz go jako plik tekstowy (CSV)?
Ruskes
1
tak, csv, podczas gdy być w porządku ...
Maïeul
1
Plik securitybinarny będzie pobierał elementy z pęku kluczy z wiersza poleceń, aby można było to zrobić w Pythonie, aby systematycznie zrzucać zawartość. To naprawdę zależy od tego, jaki format danych chcesz i jak będziesz ich używać w przyszłości.
Kopiuj / wklej to również przyzwoita opcja, jeśli wiesz, jak długo chcesz wdrożyć nowe rozwiązanie i czy musisz nauczyć się / wyszukać istniejący program lub bibliotekę, która zrzuci zawartość do wybranego formatu.
Menu pozycji eksportu służy do eksportu klucza publicznego i / lub prywatnego, dla którego istnieją standardowe w branży formaty plików do kodowania i ochrony danych odpowiednio, gdy są przechowywane w systemie plików w celu wymiany i transportu. Ta funkcja jest krótko udokumentowana w pomocy dla Keychain Assistant.
Jeśli możesz edytować swój post, aby określić, jaki nowy system operacyjny i że cvs jest formatem, który lubisz, prawdopodobnie miałbym dla ciebie więcej pomysłów. Jak zapytano, jest to bardzo niejasne ...
Aby wyodrębnić hasło / konto / płatność / bezpieczną notatkę / klucz publiczny / klucz prywatny / klucz symetryczny / certyfikat i tak dalej z pęku kluczy w ciszy.
Nie należy wstawiać linków, które wymagają utworzenia konta przez użytkownika w celu przeglądania treści. Byłoby lepiej, gdybyś sformułował treść linku.
Odpowiedzi:
Chodzi o to, jak to zrobiłem wiele lat temu, to jest aktualizacja skryptu dla Yosemite 10.11.5 - ale go nie przetestowałem.
Skrypt zapisujący każdy element w pęku kluczy do tekstu:
Drugi element AppleScript, który klika przycisk „Zezwól”, który uruchamia pierwszy skrypt podczas odczytywania elementu z KeyChain.
[Edycja: lipiec 2016 r.] Zostało to zaktualizowane do notatki 10.11.5, ponieważ niektórzy zgłosili blokowanie swojego komputera Mac z opóźnieniem 0,2, ograniczyłem skrypt do przetwarzania tylko 200 wyników na raz, więc jeśli masz 1050 elementów pęku kluczy , musisz uruchomić ten skrypt 6 razy w ScriptEditor, musisz także zezwolić na włączenie ScriptEditor w sekcji Dostępność w preferencjach bezpieczeństwa w:
Następnie powyższa aktualizacja linku / yosemite zawiera również krok konwersji ruby z pliku tekstowego do CSV, powodzenia!
ShreevatsaR wskazuje w komentarzach, że ta konwersja ruby obejmuje tylko „hasła internetowe”, a nie „hasła aplikacji”. Wynika to z tego, że celem skryptu jest wyeksportowanie „haseł internetowych” do aplikacji
1Password
.A oto pytanie o przepełnienie stosu i odpowiedź na te same pytania
System.keychain jest tutaj:
Aby umożliwić AppleScript interakcję z oknem dialogowym Preferencje systemowe -> Preferencje bezpieczeństwa i prywatności -> Karta Prywatność, opcja dostępności musi mieć włączoną opcję „Script Editor.app”
źródło
Napisałem skrypt Pythona, który konwertuje zrzut pęku kluczy do pliku Excela i pomyślałem, że podzielę się nim z tobą. Wybieram Excela zamiast CSV lub TSV, ponieważ wiele osób go zainstalowało i działa po prostu klikając dwukrotnie plik. Możesz oczywiście zmodyfikować skrypt, aby wydrukować dowolny inny format. Zrobiłem to na systemie OS X 10.11 El Capitan, ale powinno działać również na starszych systemach operacyjnych.
Ponieważ nie lubię przechowywać tekstu hasła w postaci zwykłego tekstu na dysku twardym, utworzyłem zaszyfrowany kontener za pomocą aplikacji Disk Utility. Po prostu otwórz Narzędzie dyskowe (naciśnij cmd+ Space, wpisz „dysk”). W aplikacji naciśnij cmd+, Naby wyświetlić nowy obraz, zmień nazwę na SEC, zmień szyfrowanie na 256-bitowy AES i zapisz go pod SEC w wybranym katalogu. Następnie podłącz wolumin, klikając dwukrotnie plik (lub używając Narzędzia dyskowego).
Utwórz nowy plik o nazwie keychain.py w bezpiecznym kontenerze i wklej poniższy kod.
Teraz otwórz Terminal.app i zmień katalog na zamontowany zaszyfrowany wolumin:
cd /Volumes/SEC
Potrzebujemy menedżera pakietów python do zainstalowania modułu Excel (pojawi się monit o podanie hasła):
sudo easy_install pip
Musimy zainstalować moduł Python Excel:
sudo pip install xlwt
Teraz wyeksportuj hasła, używając jednej z pozostałych odpowiedzi na to pytanie. Właśnie to zrobiłem
security dump-keychain -d > keychain.txt
i spam kliknąłem przycisk Zezwól, trzymając drugą rękę myszy.Ostatnim krokiem jest przekonwertowanie pliku txt na czytelny arkusz Excel za pomocą skryptu python:
python keychain.py keychain.txt keychain.xls
.
źródło
Począwszy od OSX 10.10.3 istnieje nowy sposób automatycznego akceptowania (napotkałem problemy podczas ścieżki aktualizacji)
Funkcje Bash (dodane do jednego
.profile
lub.bash_rc
plików)I użyj tego skryptu, aby zrzucić swój brelok (
sudo ./dump.sh
)źródło
execution error: System Events got an error: osascript is not allowed assistive access.
w linii poleceń. Najłatwiejszym sposobem, aby sobie z tym poradzić, było wklejenie kodu AppleScript do aplikacji Script Editor i uruchomienie go stamtąd.osascript is not allowed assistive access
Błędów można uniknąć poprzez umożliwienie swoją aplikację Terminal w oknie Preferencje systemowe => Bezpieczeństwo i prywatność => Ułatwienia dostępu.@ Odpowiedź MichaelStonera to dobry początek, ale zawodzi w OS X 10.10.3 Yosemite, z raportowaniem kodu AppleScript
System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index
.Po krótkiej zabawie zadziałało dla mnie następujące rozwiązanie:
Po uruchomieniu tej opcji będziesz musiał kliknąć okno dialogowe „Zezwalaj”. Ten kod zajmie trochę czasu, ale odradzam zmniejszanie opóźnienia („opóźnienie 0,2” zmusiło mnie do wyłączenia komputera Mac). Po prostu napij się kawy.
źródło
Funkcja eksportu pęku kluczy dotyczy POZYCJI, a nie całego pęku kluczy. Nie pozwoli również na eksport większości przedmiotów - wtedy zobaczysz wyszarzoną funkcję eksportu.
Aby skopiować pęku kluczy z jednego komputera Mac na inny, użyj aplikacji Migration Assistant .
Lub zrób to ręcznie, kopiując plik łańcucha kluczy znajdujący się w folderze ~ / Library / Keychains /.
Otwórz aplikację Keychain Access na nowym komputerze i wybierz
File
>Add Keychain…
.źródło
Plik
security
binarny będzie pobierał elementy z pęku kluczy z wiersza poleceń, aby można było to zrobić w Pythonie, aby systematycznie zrzucać zawartość. To naprawdę zależy od tego, jaki format danych chcesz i jak będziesz ich używać w przyszłości.Kopiuj / wklej to również przyzwoita opcja, jeśli wiesz, jak długo chcesz wdrożyć nowe rozwiązanie i czy musisz nauczyć się / wyszukać istniejący program lub bibliotekę, która zrzuci zawartość do wybranego formatu.
Menu pozycji eksportu służy do eksportu klucza publicznego i / lub prywatnego, dla którego istnieją standardowe w branży formaty plików do kodowania i ochrony danych odpowiednio, gdy są przechowywane w systemie plików w celu wymiany i transportu. Ta funkcja jest krótko udokumentowana w pomocy dla Keychain Assistant.
źródło
Istnieje wywołanie narzędzia KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 .
Aby wyodrębnić hasło / konto / płatność / bezpieczną notatkę / klucz publiczny / klucz prywatny / klucz symetryczny / certyfikat i tak dalej z pęku kluczy w ciszy.
źródło