База сообщений ICQ Lite
Потребовалось мне вытянуть сообщения из базы ICQ Lite. К моему удивлению это оказалось довольно просто, ибо база имеет формат SQLite3.
База лежит в C:\Documents and Settings\Username\Application Data\ICQ\UIN\Messages.qdb
Где Username – имя пользователя винды, UIN – числовой ICQ идентификатор.
Качаем бинарник sqlite3.exe и копируем его в C:\Windows
Пуск -> Выполнить: cmd.exe
Делаем CD в директорию базы, выполняем «sqlite3 Messages.qdb». Смотрим «.schema». Все месаги содержатся в таблице Messages. Поле «fromUser» пустое если сообщение от вас и содержит идентификатор корреспондента, если сообщение шло к вам, то это поле содержит кто писал сообщение. Поле participantsHash это Foreighn Key на таблицу Participants, откуда джойном можно вытянуть к кому было направлено сообщение.
Поскольку сообщение может быть отправлено к нескольким людям, тут связь бесконечность-к-одному.
По этому следующий запрос вытянет все сообщения из БД
sqlite> select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash;
Можно вытянуть конкретную свою переписку с идентификатором 11111:
sqlite> select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111;
Однако база вообще в UTF-8 формате, по этому в командной строке вы увидите кучу говна. Советую экспортировать это в файл, а потом уже его читать редактором, понимающим UTF:
C:\blah> sqlite3 -html Messages.qdb «select p.userId,m.* from Messages m inner join Participants p on m.pa
rticipantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111″ > perepiska.html
Отредактируем perepiska.html, вставим в начало:
<html><head><META http-equiv=»Content-Type» content=»text/html; charset=utf-8″></head>
<body><table>
И в конец:
</table></body></html>
Все. Читайте вашу переписку в деталях, охуевайте и сносите побыстрее ICQ Lite.
По дате переписку отсортировать не помешает.
Комментарий от TomB | 22 апреля 2009
Добрый день!
спасибо ваш метод очень помог. Хотел уточнить там есть еще файл Owner.qdb. Что это такое и как его вскрыть?
Комментарий от Дмитрий | 17 сентября 2009
>Смотрим “.schema”. Все месаги содержатся в таблице >Messages.
Можно чуть подробней для тех кто не знаком с работой с базой даных через командную строку. plz
Получаю:
C:\Documents and Settings\Andriy\ApplicationData\ICQ\499471178>sqlite3 Messages.qdb
SQLite version 3.6.20
Enter «.help» for instructions
Enter SQL statements terminated with a «;»
sqlite>
а что дальше?
Комментарий от kyberx | 14 ноября 2009
select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash;
и куча бреда
sqlite3 -html Messages.qdb “select p.userId,m.* from Messages m inner join Participants p on m.pa
rticipantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111″ > perepiska.html
не работает, вероятно fromUser=111111 чтото не то..
Комментарий от kyberx | 14 ноября 2009
Спасибо за подсказку o sqlite3.
И все же как обычный юзер я нашел GUI (SQLite Expert Professional 2.2.3 Portable) и с его помощью сделал что хотел.
Хотя до того успел разобраться и с командной строкой віполнив bat файл в директории базы даных такого содержания
sqlite3 -html Messages.qdb «select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash;» > perepiska.html
Комментарий от kyberx | 16 ноября 2009
Охренительно! Респектище огроменное!
Очень выручил.
С помощью этого можно так же делать и другие очень полезные штуки (особенно тем, кто sql знает). Например можно вытащить список номеров с которыми вы общались, с помощью запроса «select p.userId,* from Participants p». Очень юзабельно, когда пароль от ICQ Lite утерян навечно.
Комментарий от CRYSTALL_m | 19 марта 2010