How to recover Adium ICQ contacts when the account is locked

1

I recently got locked out of my 10+ year old ICQ account for no good reason — the password just stopped working one day. Password recovery doesn't work and I never gave them an email address anyway (at least that's what I think, it's been a while).


When I start Adium, it asks for a password I am unable to provide. Unfortunately, it only displays those contacts for accounts that are connected or connecting. All my ICQ contacts are missing from the contact list

How can I recover the ICQ account numbers and some identifying information about those users?

Daniel Beck

Posted 2011-05-13T18:22:51.337

Reputation: 98 421

While I answered the question myself, I'm open towards better solutions. They might not be that helpful for me anymore, but still, there's got to be something better... – Daniel Beck – 2011-05-13T19:42:12.043

Answers

1

Adium user account information is stored in /Users/danielbeck/Library/Application Support/Adium 2.0/Users/Default or possibly, AFAIK, one of the sibling folders.


It seems they stored contact information in individual files in the directory ByObject (until late 2008), but switched to the single file ByObjectPrefs.plist since then.

While the directory libpurple contains a blist.xml (buddy list), it doesn't contain Adium's user aliases, only the contact's last self-assigned user name, which is usually not all that useful, depending on the people.


ByObjectPrefs.plist is a binary `plist file. Create a copy and convert in Terminal to XML using

plutil -convert xml1 /Users/danielbeck/Library/Application\ Support/Adium\ 2.0/Users/Default/ByObjectPrefs\ Copy.plist

Unfortunately, I was unable to properly automatically read its format so far. Copy&paste directly from the file is painful, but it somewhat works.


I recovered the contacts using the following expression:

cat ByObjectPrefs\ 2.plist | grep -A 15 -P "^\t<key>ICQ" | grep -v "<dict>" | grep -v "</dict>" | sed "s| *<[^>]*>||g" | sed 's|ICQ\.||' | grep -v "Alias" | grep -v "ICQAlias

It prints the file, searches for occurrences of <key>ICQ, strips the XML from the lines following that and prints them. One such entry looks like this (fantasy values to protect the innocent):

314159265
    Firstname Lastname
    Last Seen Date
    2011-03-05T15:56:59Z
    Last Seen Status
    Signing off
    Preferred Account
    2

While this somewhat worked, I'm not even sure it matched all contacts. Some entries had no identifying information (ignored spammers?), etc. I'm looking forward to a better solution.

Daniel Beck

Posted 2011-05-13T18:22:51.337

Reputation: 98 421