Ini tidak selalu berhasil, ada beberapa avatar yang tidak ditemukan dan mengekstrak beberapa gambar yang rusak. Lihat jawaban saya untuk solusi yang lebih bersih.
Guillaume Brunerie
8
Berikut ini adalah skrip yang jauh lebih bersih yang mengekstraksi avatar rendah dan def tinggi dari file main.db dan menyimpannya ke file yang dinamai sesuai nama pengguna Skype yang sesuai.
Anda perlu sqlite3 dan xxd untuk menjalankan skrip ini.
Konten dari database main.db cukup mudah dimengerti, dengan sedikit imajinasi ada banyak lagi yang bisa diekstraksi darinya.
#!/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
Pertama, mereka membahas beberapa perintah yang memungkinkan Anda menyimpan avatar dari cache Skype dengan antarmuka publik melalui itu tampaknya tidak berfungsi di Linux. Saya tidak tahu apakah mereka sudah memperbaiki antarmuka itu, dan bukan itu pertanyaan Anda.
Kedua, satu Skype dev mengatakan bahwa semua gambar disimpan dalam format JPEG dan memberikan header dalam hex ( JFIF). grep'ing hexdump dari semua file Skype dengan for i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; doneperintah mengungkapkan banyak kejadian header ini di file .Skype / userNNN.dbb di mana NNN adalah beberapa nomor. File-file ini memiliki beberapa format kepemilikan yang benar-benar tidak berdokumen dan mungkin menyimpan semua informasi yang di-cache tentang pengguna; Anda dapat mengekstraksi avatar sendiri dengan memindai header dan kemudian menyalin semuanya sampai akhir file ke file lain. Semua pemirsa gambar akan melewatkan data apa pun setelah gambar itu sendiri (berdasarkan teknologi RARJPG), dan jika Anda ingin menghilangkan sampah, Anda dapat "memodifikasinya" tanpa memodifikasi misalnya dengan imagemagick dan perintahconvert file.jpg file_clean.jpg. ImageMagick berperilaku sebagai penampil yang dijelaskan: ia membaca gambar, melompati apa pun yang mengikutinya dan kemudian hanya menulis gambar itu sendiri.
Jawaban:
Saya ingin mendapatkan avatar Skype itu juga, jadi saya menggunakan jawaban whitequark untuk membuat skrip bash kecil yang melakukan hal itu. Ini dia:
sumber
Berikut ini adalah skrip yang jauh lebih bersih yang mengekstraksi avatar rendah dan def tinggi dari file main.db dan menyimpannya ke file yang dinamai sesuai nama pengguna Skype yang sesuai.
Anda perlu sqlite3 dan xxd untuk menjalankan skrip ini.
Konten dari database main.db cukup mudah dimengerti, dengan sedikit imajinasi ada banyak lagi yang bisa diekstraksi darinya.
sumber
Thread forum Skype ini tentang avatar: http://forum.skype.com/index.php?showtopic=99471 .
JFIF
). grep'ing hexdump dari semua file Skype denganfor i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; done
perintah mengungkapkan banyak kejadian header ini di file .Skype / userNNN.dbb di mana NNN adalah beberapa nomor. File-file ini memiliki beberapa format kepemilikan yang benar-benar tidak berdokumen dan mungkin menyimpan semua informasi yang di-cache tentang pengguna; Anda dapat mengekstraksi avatar sendiri dengan memindai header dan kemudian menyalin semuanya sampai akhir file ke file lain. Semua pemirsa gambar akan melewatkan data apa pun setelah gambar itu sendiri (berdasarkan teknologi RARJPG), dan jika Anda ingin menghilangkan sampah, Anda dapat "memodifikasinya" tanpa memodifikasi misalnya dengan imagemagick dan perintahconvert file.jpg file_clean.jpg
. ImageMagick berperilaku sebagai penampil yang dijelaskan: ia membaca gambar, melompati apa pun yang mengikutinya dan kemudian hanya menulis gambar itu sendiri.sumber