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

Прочитав новость об уязвимости в Skype, позволяющей угнать любой аккаунт, в процессе чтения комментариев и постов по теме наткнулся на новую для себя информацию: оказывается, начиная с версии 4.* Skype хранит информацию о пользователе в базе sqlite. Это и навело меня на мысль о том, что информацию из базы можно легко и непринужденно получить.

Сама база была обнаружена — как и следовало ожидать, в папке c:\Users\<Username>\Application Data\Skype\<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, сможет найти список контактов, просмотреть историю звонков и прочитать всю переписку.
Share post

Comments 40

    0
    В Linux версии также используется sqlite?
      0
      Сам не пробовал, скорее всего да, но только с версии 4.

      Тут, кстати, недавно проскакивала новость о том, что скайп 4.1 вышел для Linux, так что уже можно проверить.
        0
        При удалении истории из скайпа она физически тоже не удаляется и ее легко можно восстановить. Даже утилита есть для этого SkypeLogView
          0
          Физически часть истории, похоже, удаляется с течением времени. В частности, именно для проверки этой гипотезы я и полез в базу. Обнаружил, что из трех случайно найденных на компе бэкапов все разные — т.е. содержат уникальные только для этого бэкапа сообщения.
          0
          Номера версий линухового скайпа и виндового никогда не были связаны. Так что если что-то было в виндовом в 4ой версии в линуховой оно могло быть в 2.x.
            0
            Вот в этой статье автор как раз разбирает историю скайпа 2-й линуксовой версии. Так что во второй все таки нет sqlite. Возможно, в 4-й появилась.
          0
          Ответ на Ваш вопрос утвердительный, начиная с версии 4.
          +2
          Скайп почему-то бесит. Он очень удачно и вовремя занял нишу голосового общения в инете. Это пожалуй единственный плюс. Из минусов — не хранит базу на серваке, настроек всё меньше и меньше (enter \ ctrl enter), памяти жрёт, базу открытой хранит.
            +6
            «Из минусов — не хранит базу на серваке»

            Спорный вопрос. Я, к примеру, предпочитаю чтобы база хранилась таки у меня. И если кто то получил доступ к ней, то это уже лично моя халатность.
              +2
              Он занял нишу во многом благодаря отсутствию лишних, по мнению простого пользователя, настроек и простоте установки.
              Большая часть пользователей предпочитает удобство соображениям безопасности, а уж о таких вещах, как место хранения базы, они вообще не задумываются.
                +1
                А редактирование и удаление сообщений вообще киллер фича.
                –1
                Skype — peer to peer система. То есть, строго говоря сервера там нет. (Хотя есть суперноды...) Ему вроде как негде хранить историю, кроме как локально. С этим кстати связанна еще одна раздражающая особенность. При переходе с одного компьютера на другой тебе приходит для синхронизации старая переписка. И бывает, что последнии сообщения из старых почему то скайп воспринимает как новые, не прочтенные, сообщения.
                Скайп ужасен для переписки. Очень странно почему это фактический стандарт у нас.
                Зато он прекрасен для голосового общения. (хорошее качество, умеет вычитать звук из колонок из того, что получает в микрофон). И с него можно звонить на телефоны.
                  +1
                  Да ну ладно, «peer to peer». Он же куда-то логиниться, кудой-то на обычные телефоны звонит, откуда-то рекламу показывает. Да и пробегала тут на Хабре новость как-то о том, что Microsoft скайповские суперноды на свои серваки по-тихоньку переносит.
                  0
                  У него ещё есть рано появились удобные чат-конференции на несколько человек и клиенты под мобилки. Ну, плюс, отличная проходимость через прокси и nat.
                    +2
                    удобные чат-конференции

                    Очень смешно.
                  +1
                  При удалении сообщения в чате (через контекстное меню), в локальной БД остается исходный текст сообщения?
                    –1
                    В большинстве случаев ответ на Ваш вопрос утвердительный..
                      0
                      Можете перечислить эти случаи? Потому что он всегда удаляется)
                        0
                        В чате сообщение удаляется. А вот в локальной бд нашел его, но только с пометкой удаленное. Хотя не все удаленные есть.
                      –1
                      У меня версия 5.10.66.116.
                      Строка сообщения не удаляется, но текст стирается (становится пустым). Заполняются колонки edited_by и edited_timestamp. Аналогично в случае редактирования сообщения меняется body_xml, изменяется edited_by и edited_timestamp.
                      Вроде все по-честному :)
                        0
                        В SQLite базе хранится только то, что видно в чате, а вот в лежащей рядом папке chatsync/ можно найти полную историю сообщений в бинарном скайповском формате, включая текст всех правок и стертых мессаг.

                        Более того, даже если собеседник написал что-то вам в оффлайн, а потом удалил, когда вы зайдете в skype его исходное сообщение все равно попадет в chatsync.
                        0
                        А кто подскажет, как корректно удалить историю переписок с мобильного скайпа на андроиде? вот только что провел эксперимент, удалил хистори с десктопного скайпа, и теперь он ее якобы не видит, а мобильный все равно подтягивает в рамках интервала хранения. Облазил все меню, так и не нашел.
                          +1
                          Настройки — Приложения — Управление приложениями — Skype — Очистить данные
                            0
                            Нету такого пункта «приложения» в настройках. :( 10 раз прокрутил.
                              +1
                              В настройках приложений самой Adroid, а не Skype. Удалятся все настройки и данные приложение (включая историю).
                            0
                            /data/data/com.skype.raider/files/login/main.db

                            та же база sqlite.
                            +1
                            Потыкал у себя на макбуке. База лежит по адресу /volumes/Macintosh HD/Users/имя пользователя компьютера/Library/Application Support/Skype/аккаунт скайпа. Так же самая SQLite, та же самая картина.
                              0
                              После покупки Skype'a Microsoft'ом он становится все монстрообразнее. Памяти стал есть больше. Версия для Android теперь практически за день разряжает телефон.
                                0
                                Лезть ручками в SQLite это уже какой-то крайний метод. Есть же API для доступа. Пока аккаунт пока еще ваш и скайп работает, можно на python со Skype4Py только так написать экспортилку истории и всего остального.
                                  0
                                  Причина не в том, что я не смог справиться со Skype API, а в том, что мне хотелось именно что залезть в базу и посмотреть, что там есть, минуя API. Цели я своей достиг, решил поделиться. Доступ через API с использованием python описывается в другой статье — ссылку на нее я давал чуть выше в комментариях.
                                    0
                                    И есть разница — сообщения помеченные как удаленные через API не отдаст
                                      0
                                      Я чуть выше написал, что текст помеченных удаленными сообщений в базе тоже удаляется.
                                  0
                                  Спасибо за статью, действительно сообщения доступны. Давно интересовался этим вопросом, но никак руки не доходили разведать что и как. А раньше, помню, скачивал разные проги типа эспорт истории.
                                    –1
                                    После обновления Skype, из настроек чата пропала опция «Enter с новой строки». Получается, что по Enter теперь только отправка. ВЕРНИТЕ!!!
                                    0
                                    Подскажите, пожалуйста, как удалить всю историю общения с определенным контактом.
                                      +1
                                      Синтаксис такой:

                                      delete from messages
                                      where dialog_partner = '<имя пользователя>'
                                      


                                      Но вы же знаете, что при следующем входе собеседника в скайп вам снова зальется вся история общения?
                                        0
                                        Спасибо!
                                        Нет, не знал. А что произойдет, если заменить текст сообщений у себя на пробел, например?
                                          0
                                          Не проверял — надо тестировать.

                                    Only users with full accounts can post comments. Log in, please.