Bir Ubutun'a geçmek için, tüm şifremi, örneğin bir CSV dosyasına vermek istiyorum.
Anahtarlık Erişimi'nde dışa aktarma menüsünü buldum ancak erişimin kilidi açılmış olsa bile, devre dışı bırakılmış durumda.
Ne yapmalıyım?
Bir Ubutun'a geçmek için, tüm şifremi, örneğin bir CSV dosyasına vermek istiyorum.
Anahtarlık Erişimi'nde dışa aktarma menüsünü buldum ancak erişimin kilidi açılmış olsa bile, devre dışı bırakılmış durumda.
Ne yapmalıyım?
Yanıtlar:
Bu, yıllar önce nasıl yaptığımla ilgili , bu Yosemite 10.11.5 için şu komut dosyası güncellemesidir - ama test etmedim.
Anahtarlıktaki her öğeyi metne kaydeden bir komut dosyası:
security dump-keychain -d login.keychain > keychain.txt
İkinci komut dosyasının KeyChain'den öğeyi okurken tetiklediği "İzin Ver" düğmesini tıklatan ikinci bir AppleScript öğesi.
[Düzenleme: Temmuz 2016] Bazıları Mac'lerini 0.2 gecikmeyle kapattığını bildirdiği için bu not 10.11.5'e güncellendi, bu komut dosyasını bir seferde yalnızca 200 sonuç işleme koyacak şekilde sınırlandırdım, böylece 1050 anahtarlık öğeniz varsa , bu komut dosyasını ScriptEditor'da 6 kez çalıştırmanız gerekir; ayrıca güvenlik tercihlerindeki Erişilebilirlik bölümünde ScriptEditor'un etkinleştirilmesine izin vermeniz gerekir:
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
Daha sonra yukarıdaki link / yosemite güncellemesi aynı zamanda metin dosyasından CSV'ye, yakışmışlar!
ShreevatsaR, bu yakut dönüşümünün "uygulama şifrelerini" değil, sadece "internet şifrelerini" kapsadığını belirtti. Bu komut dosyası amacı, "internet şifreleri" uygulamasına ihraç etmektir 1Password
.
Ve burada bir yığın taşması sorusu ve aynı satırlar boyunca cevap
System.keychain burada:
security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt
AppleScript'in iletişim kutusuyla etkileşime girmesini sağlamak için Sistem Tercihleri -> Güvenlik ve Gizlilik Tercihleri -> Gizlilik Sekmesi, Erişilebilirlik Seçeneğinde "Script Editor.app" etkin olmalı
Anahtarlık dökümünü bir Excel dosyasına dönüştüren ve seninle paylaştığımı düşündüğüm bir python betiği yazdım. Excel'i CSV veya TSV üzerinden seçiyorum, çünkü birçok insan yüklüdür ve sadece dosyayı çift tıklatarak çalışır. Elbette, başka bir formatı basmak için betiği değiştirebilirsiniz. Bunu OS X 10.11 El Capitan'da yaptım, ancak eski işletim sistemlerinde de çalışmalıyım.
Şifrelerimi düz metin olarak sabit sürücüme kaydetmeyi sevmediğim için, Disk Utility uygulamasını kullanarak şifreli bir kap oluşturdum. Basitçe Disk Yardımcı Programını açın ( cmd+ tuşlarına basın Space, "disk" yazın). Uygulamada, yeni resim için cmd+ tuşuna basın N, adı SEC olarak değiştirin, şifrelemeyi 256 Bit AES olarak değiştirin ve istediğiniz dizinde SEC altında saklayın. Ardından birimi dosyaya çift tıklayarak (veya Disk Yardımcı Programını kullanarak) bağlayın.
Güvenli kapta keychain.py adlı yeni bir dosya oluşturun ve aşağıdaki kodu yapıştırın.
Şimdi Terminal.app'i açın ve dizini monte edilmiş şifreli birime değiştirin: cd /Volumes/SEC
Excel modülünü kurmak için python paket yöneticisine ihtiyacımız var (şifreniz istenecektir): sudo easy_install pip
Python Excel modülünü kurmamız gerekiyor: sudo pip install xlwt
Şimdi bu sorunun diğer cevaplarından birini kullanarak şifreleri dışa aktarın. Ben sadece yaptım security dump-keychain -d > keychain.txt
ve spam, fareyi diğer elimle tutarken İzin Ver düğmesine tıkladım.
Son adım, txt dosyasını python betiğini kullanarak okunabilir bir Excel sayfasına dönüştürmektir: 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])
OSX 10.10.3'ten itibaren otomatik kabul etmenin yeni bir yolu var (yükseltme yolu sırasında sorunla karşılaştım)
Bash fonksiyonları ( dosyalara .profile
veya .bash_rc
dosyalara eklendi )
## 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...'
}
Ve anahtar kelimenizi atmak için bu betiği kullanın ( 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.
komut satırında oldum . Bununla başa çıkmanın en kolay yolu, AppleScript kodunu Komut Dosyası Düzenleyici uygulamasına yapıştırmak ve oradan çalıştırmaktı.
osascript is not allowed assistive access
Terminal uygulamanızın Sistem Tercihleri => Güvenlik ve Gizlilik => Erişilebilirlik kısmına izin verilmesiyle bu hata önlenebilir.
@ MichaelStoner'ın yanıtı iyi bir başlangıç, ancak AppleScript kod raporlamasıyla OS X 10.10.3 Yosemite'de başarısız oluyor System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index
.
Biraz oynadıktan sonra, aşağıdaki çözüm benim için çalıştı:
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
keystroke " "
end tell
delay 1
end repeat
end tell
Bunu başlattıktan sonra "İzin Ver" iletişim kutusunu tıklamanız gerekecek. Bu kod biraz zaman alacaktır, ancak gecikmeyi azaltmamanı tavsiye ederim ("0.2 gecikme", Mac'imde zorlamamı sağladı). Sadece bir fincan kahve al.
Anahtarlık Dışa Aktarma işlevi, tüm anahtarlığa yönelik değil ITEMS içindir. Ayrıca öğelerin çoğunu dışa aktarmanıza da izin vermez - o zaman grileştirilmiş Dışa Aktar işlevini görürsünüz.
Anahtarlık bir mactan diğerine kopyalamak için Migration Assistant uygulamasını kullanın .
Veya ~ / Library / Keychains / klasöründe bulunan anahtarlık dosyasını kopyalayarak el ile yapın.
Yeni bilgisayardaki Anahtarlık Erişimi uygulamasını açın ve File
> seçeneğini belirleyin Add Keychain…
.
security
İkili, komut satırından keychain'inizden öğeleri alır böylece olabilir komut dosyası piton o sistematik içindekileri dökmek için. Bu gerçekten istediğiniz veri formatına ve onu nasıl kullanacağınıza bağlı.
Kopyala / yapıştır, yeni bir çözüm uygulamak için ne kadar zamana önem verdiğinizi ve içeriği seçtiğiniz biçime aktaracak varolan bir programı veya kitaplığı öğrenmeniz / aramanız gerekip gerekmediğini biliyorsanız iyi bir seçenektir.
İhracat öğeleri menüsü, veri alışverişinde ve aktarmada dosya sistemine depolandığında uygun şekilde verileri kodlamak ve korumak için endüstri standardı dosya formatlarının bulunduğu genel ve / veya özel anahtar ihracatına yöneliktir. Bu fonksiyon, Anahtarlık Asistanlığı yardımı ile kısaca belgelenmiştir.
KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 adlı bir araç çağrısı var .
Parola / Hesap / Ödeme / Güvenli Not / PublicKey / PrivateKey / SymmetricKey / Sertifika vb.