Прочитав новость об уязвимости в Skype, позволяющей угнать любой аккаунт, в процессе чтения комментариев и постов по теме наткнулся на новую для себя информацию: оказывается, начиная с версии 4.* Skype хранит информацию о пользователе в базе sqlite. Это и навело меня на мысль о том, что информацию из базы можно легко и непринужденно получить.
Сама база была обнаружена — как и следовало ожидать, в папке c:Users<Username>Application DataSkype<Skype Login>, и судя по размеру имеющихся там файлов, носила имя main.db
Вторым шагом стал поиск удобного инструмента для работы с базами sqlite, ибо ранее не приходилось работать с ними. Первый же найденный инструмент: SQLite Database Browser, без проблем открыл и показал содержимое базы данных.
Однако у данного инструмента обнаружились и свои недостатки — неумение работать с полями типа BLOB и невозможность выгружать результаты вручную написанного запроса во внешние источники. Поэтому, предприняв вторую попытку поиска, я нашел Add-on для Firefox под именем SQLite Manager, и в дальнейшем пользовался уже им.
База содержит не слишком большое количество таблиц, и их названия интуитивно понятны, так что обнаружить нужную информацию не составит труда, поэтому приведу лишь наиболее очевидные и полезные запросы к базе. Выполнить их можно с вкладки «Execute SQL» в SQLite Database Browser'e, или с вкладки «Выполнить запрос» в SQLite Manager'e.
В таблице Contacts находятся все контакты, причем даже те, что были удалены, и уже не показываются в клиенте.
select skypename,
fullname,
given_displayname,
birthday,
case gender when 1 then 'Мужской' when 2 then 'Женский' else 'Не указан' end as "Пол",
case availability when 0 then 'Удален' when 8 then 'Не предоставил данные' else '' end as "Доступность",
strftime('%d.%m.%Y %H:%M:%S',lastonline_timestamp, 'unixepoch', 'localtime') as "Последний раз был в сети"
from contacts
В таблицах Calls и CallMembers содержатся, соответственно, история звонков и их участников.
select calls.id as "ID разговора",
coalesce(contacts.displayname, accounts.fullname) as "Инициатор",
strftime('%d.%m.%Y %H:%M:%S',calls.begin_timestamp, 'unixepoch', 'localtime') as "Дата начала",
time(calls.duration, 'unixepoch') as "Длительность",
callmembers.dispname as "Подключенный участник",
strftime('%d.%m.%Y %H:%M:%S',callmembers.start_timestamp, 'unixepoch', 'localtime') as "Дата подключения",
time(callmembers.call_duration, 'unixepoch') as "Длительность подключения"
from calls
inner join callmembers on calls.id = callmembers.call_db_id
left join contacts on calls.host_identity = contacts.skypename
left join accounts on calls.host_identity = accounts.skypename
И, наконец, в таблицах Conversations и Messages содержатся данные переписки и сами сообщения.
select conversations.id as "ID переписки",
conversations.displayname as "Участники переписки",
messages.from_dispname as "Автор сообщения",
strftime('%d.%m.%Y %H:%M:%S',messages.timestamp, 'unixepoch', 'localtime') as "Время сообщения",
messages.body_xml as "Текст сообщения"
from conversations
inner join messages on conversations.id = messages.convo_id
order by messages.timestamp
В завершение статьи не могу не заметить, что для доступа ко всему содержимому базы достаточно иметь доступ к самому файлу — содержимое базы никак не шифруется и не защищается, так что любой человек, который сможет получить доступ к вашему профилю Windows, сможет найти список контактов, просмотреть историю звонков и прочитать всю переписку.
Автор: minamoto