Экспорт истории сообщений из Skype 4.*

в 16:45, , рубрики: skype, sql, sqlite, Софт, метки: , ,

Прочитав новость об уязвимости в 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

Источник

Поделиться

* - обязательные к заполнению поля