web-dev-qa-db-ja.com

Skypeは連絡先のアバターをLinuxのどこに保存しますか?

LinuxでSkypeを使用しています。

連絡先のアバターのSkypeによってキャッシュされた画像はどこにありますか?

9
Andrea Ambu

私はそれらのSkypeアバターも入手したかったので、whitequarkの回答を使用して、それを実行する小さなbashスクリプトを作成しました。ここにあります:

#!/ bin/bash 
 
 if [\($#-lt 1 \)]; 
 then 
 echo "使用法:$ 0 folder "; 
 echo"フォルダーの形式は/home/username/.Skype/username";
exit;
fi;

 for i in `ls $ 1`; 
 do 
 if [-f $ 1/$ i]; 
 then 
#echo" i:$ i "; 
 filedump = `hexdump -v -e '" "1/1"%02x "" "' $ 1/$ i | sed -e's/ffd8ffe0/\ nffd8ffe0/g'`; 
 nocc =ʻecho "$ filedump" | wc -l`; #\ ncharの出現。 Wordのnocc-1オカレンスがあることを意味します
#echo "nocc:$ nocc"; 
 if ["$ nocc" -ge 2]; 
 then 
 k = 0; 
 old_IFS = $ IFS; #フィールド区切り文字
 IFS = $ '\ n'; 
 offset = 0; 
 for j in $ filedump; 
 do 
 w = `エコー$ j | wc -m`; #実際にはlettercount + 1 
 w = $ [w-1]; 
 offset = $ [offset + w]; 
#echo "offset:$ offset"; 
 filename1 = "$ {i} _ $ {k} _notclean.jpg"; 
 filename2 = "$ {i} _ $ {k} .jpg"; 
 dd ibs = 1 if = $ 1/$ i of = $ filename1 skip =ʻecho "$ offset/2" | bc` status = noxfer; 
 if [`du $ filename1 | cut -f1` -gt 0]; 
 then 
 convert $ filename1 $ filename2; #convertは、実際には、画像
 fi; 
 rm $ filename1; 
 k = $ [k + 1]; 
が完了した後にデータを削除するためにのみ使用されます。 
 IFS = $ old_IFS; 
 fi; 
 fi; 
完了
5
Swergas

これは、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
8

このSkypeフォーラムスレッドはアバターに関するものです: http://forum.skype.com/index.php?showtopic=99471

  • まず、Skypeキャッシュからアバターをパブリックインターフェイスで保存できるコマンドについて説明しますが、Linuxでは機能しないようです。彼らがそのインターフェースをすでに修正したかどうかはわかりませんが、それはあなたの質問の内容ではありません。
  • 次に、あるSkype開発者は、すべての画像がJPEG形式で保存され、16進数(JFIF)でヘッダーを提供すると述べました。 for i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; doneコマンドを使用してすべてのSkypeファイルのhexdumpをgrepすると、.Skype /userNNN.dbbファイルでこのヘッダーが多数出現することが明らかになりました。NNNはいくつかの数字です。このファイルは、完全に文書化されていない独自の形式であり、おそらくユーザーに関するすべてのキャッシュ情報を保持しています。ヘッダーをスキャンし、ファイルの終わりまですべてを他のファイルにコピーすることで、アバター自体を抽出できます。すべての画像ビューアは、画像自体(RARJPGが基づいているテクノロジー)の後のデータをスキップします。画像からジャンクを削除したい場合は、変更せずに「変更」できます。 imagemagickとコマンドconvert file.jpg file_clean.jpgを使用します。 ImageMagickは、説明されているビューアのように動作します。画像を読み取り、それに続くものをスキップして、画像自体のみを書き込みます。
4
whitequark