用 ruby-dbus 去戳 D-Bus,可以順利解出 KWallet 的…binary 資料?
require 'dbus' require 'pp' session_bus = DBus.session_bus kwalletd_service = session_bus["org.kde.kwalletd5"] kwalletd_object = kwalletd_service.object "/modules/kwalletd5" kwalletd_object.introspect kwalletd_interface = kwalletd_object["org.kde.KWallet"] handle = kwalletd_interface.open("kdewallet", 0, "Ruby D-Bus Client").first pp kwalletd_interface pp kwalletd_interface.folderList(handle, "Ruby D-Bus Client") pp kwalletd_interface.entryList(handle, "Network Management", "Ruby D-Bus Client") pp kwalletd_interface.readMap(handle, "Network Management", "{????????-????-????-????-????????????};802-11-wireless-security", "Ruby D-Bus Client").first
翻了一下網上資料才知道是這個原因:[Bug 256155 – KWallet’s readMap is not friendly to non-C++ applications],昏倒,這同時解釋了為什麼 kwallet-query 這專用工具可以解出 human readable 的密碼,而泛用工具不行。
以上只是想要瞭解 KWallet 的操作,為之後的 coding 鋪路,實務上應該還有路可繞。為了泛用性,最多就是不要用 map 而已。