На моем ноутбуке сейчас нет Linux для проверки, но вы проверяете содержимое каталога ~ / .Skype.
kartikmohta
Ответы:
5
Я тоже хотел получить эти аватары Skype, поэтому я использовал ответ whitequark, чтобы сделать небольшой сценарий bash, который делает именно это. Вот:
#! / Bin / Баш
if [\ ($ # -lt 1 \)];
тогда
echo "Использование: папка $ 0";
echo "Где папка имеет вид /home/username/.Skype/username";
Выход;
Fi;
для меня в `ls $ 1`;
делать
если [-f $ 1 / $ i];
тогда
#echo "i: $ i";
filedump = `hexdump -v -e '" "1/1"% 02x "" "' $ 1 / $ i | sed -e 's / ffd8ffe0 / \ nffd8ffe0 / g'`;
nocc = `echo" $ filedump "| wc -l`; # вхождения \ n символа. Означает, что есть nocc-1 вхождения нашего слова
#echo "nocc: $ nocc";
if ["$ nocc" -ge 2];
тогда
к = 0;
old_IFS = $ IFS; # разделитель полей
IFS = $ '\ п';
смещение = 0;
для j в $ filedump;
делать
w = `echo $ j | wc -m`; # дает фактически буквенное число + 1
ш = $ [п-1];
Смещение = $ [смещение + W];
#echo "offset: $ offset";
filename1 = "$ {я} _ $ {к} _notclean.jpg";
filename2 = "$ {я} _ $ {к} .jpg";
dd ibs = 1 if = $ 1 / $ i of = $ filename1 skip = `echo" $ offset / 2 "| bc` status = noxfer;
if [`du $ filename1 | cut -f1` -gt 0];
тогда
конвертировать $ filename1 $ filename2; #convert фактически используется только для удаления данных после изображения
Fi;
rm $ filename1;
K = $ [K + 1];
сделанный;
IFS = $ old_IFS;
Fi;
Fi;
сделанный
Это не всегда работает, есть некоторые аватары, которые не найдены, и это извлекает некоторые испорченные изображения. Смотрите мой ответ для более чистого решения.
Гийом Брунери
8
Вот гораздо более чистый скрипт, извлекающий аватары как с низким, так и с высоким разрешением из файла main.db и сохраняющий их в файлы, названные в честь соответствующих имен пользователей Skype.
Вам понадобятся sqlite3 и xxd для запуска этого скрипта.
Содержимое базы данных main.db довольно легко понять, с небольшим воображением, из нее можно извлечь гораздо больше.
#!/bin/bash
if (( $# != 1 ))
then
echo "Usage: $0 folder"
echo "Where folder is of the form /home/username/.Skype/username"
exit 1
fi
# Magic string used at the beginning of JPEG files
magic=FFD8FFE0
# We read main.db and extract the Skype name, the avatar image and the
# attachments (which often contain a high-def version of the avatar image)
sqlite3 "$1/main.db" "select skypename,hex(avatar_image),hex(profile_attachments) from Contacts;" |\
while read line
do
IFS='|'
# We convert the line into an array
a=($line)
if [[ -n ${a[1]} ]] # There is an avatar_image
then
# We strip everything before the magic string, convert it back to binary, and save it to a file
echo $magic${a[1]#*$magic} | xxd -r -p > ${a[0]}_small.jpg
fi
if [[ -n ${a[2]} ]] # There is a profile_attachments
then
# Same as above
echo $magic${a[2]#*$magic} | xxd -r -p > ${a[0]}.jpg
fi
done
Во-первых, они обсуждают некоторые команды, которые позволяют вам сохранять аватары из кэша Skype с помощью открытого интерфейса, который, по-видимому, не работает в Linux. Я не знаю, исправили ли они этот интерфейс уже, и это не то, о чем ваш вопрос.
Во-вторых, один разработчик Skype сказал, что все изображения хранятся в формате JPEG и предоставляют заголовок в hex ( JFIF). grep'ing hexdump всех файлов Skype с помощью for i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; doneкоманды обнаружил много вхождений этого заголовка в файлах .Skype / userNNN.dbb, где NNN - некоторое число. Эти файлы имеют совершенно недокументированный, проприетарный формат и, вероятно, хранят всю кэшированную информацию о пользователях; Вы можете извлекать сами аватары, сканируя заголовок, а затем копируя все до конца файла в другой файл. Все средства просмотра изображений будут пропускать любые данные после самого изображения (на основе технологии RARJPG), и если вы хотите удалить из них ненужную информацию, вы можете «изменить» ее, не изменяя, например, с помощью imagemagick и команды.convert file.jpg file_clean.jpg, ImageMagick ведет себя так, как описано зрителем: он читает изображение, пропускает все, что следует за ним, а затем записывает только само изображение.
Ответы:
Я тоже хотел получить эти аватары Skype, поэтому я использовал ответ whitequark, чтобы сделать небольшой сценарий bash, который делает именно это. Вот:
источник
Вот гораздо более чистый скрипт, извлекающий аватары как с низким, так и с высоким разрешением из файла main.db и сохраняющий их в файлы, названные в честь соответствующих имен пользователей Skype.
Вам понадобятся sqlite3 и xxd для запуска этого скрипта.
Содержимое базы данных main.db довольно легко понять, с небольшим воображением, из нее можно извлечь гораздо больше.
источник
Эта ветка форума Skype посвящена аватарам: http://forum.skype.com/index.php?showtopic=99471 .
JFIF
). grep'ing hexdump всех файлов Skype с помощьюfor i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; done
команды обнаружил много вхождений этого заголовка в файлах .Skype / userNNN.dbb, где NNN - некоторое число. Эти файлы имеют совершенно недокументированный, проприетарный формат и, вероятно, хранят всю кэшированную информацию о пользователях; Вы можете извлекать сами аватары, сканируя заголовок, а затем копируя все до конца файла в другой файл. Все средства просмотра изображений будут пропускать любые данные после самого изображения (на основе технологии RARJPG), и если вы хотите удалить из них ненужную информацию, вы можете «изменить» ее, не изменяя, например, с помощью imagemagick и команды.convert file.jpg file_clean.jpg
, ImageMagick ведет себя так, как описано зрителем: он читает изображение, пропускает все, что следует за ним, а затем записывает только само изображение.источник