Tekst informacyjny o polityce Cookies Close   
    
 
         
• 1. Strona główna
• 2. Kontakt: e-Mail
 
         
• 1. Baza danych
• 2. Tabele i kwerendy
• 3. Formularze
• 4. Raporty
• 5. Moduły i makra
• 6. Obsługa błędów
 
    

II.   VBA 

    
• 1. Okna Accessa
• 2. Okna Formularzy
• 3.Okna Dialogowe
• 4. Tekst
• 5. Liczby
• 6. Pliki
• 7. Inne
 
    

III.   API 

    
• 1. Ogólnie o API
• 2. Funkcje API
• 3. System
• 4. Praca z oknami
• 5. Okna dialogowe
• 6. API - Inne
 
         
• 1. Bitmapy 24 Bit
• 2. GDI i HDC
• 3. Kody kreskowe
• 4. Formant Image
• 5. FreeImage.dll
 
    

V.   Inne 

    
• 1. Shell i MsDOS
• 2. Kontrolki
• 3. ६ԼҚ ਸ
• 4. Unikod

 
Odwiedzin:

Logo AccessFAQV.3. Inne - ६ㄙҚ ਸ [2]
• Logi programu Skype •

3.1 Jak z pliku tekstowego wygenerowanego przez program Cards4Labs do odczytu kart SIM wyodrębnić dane i przedstawić najważniejsze z nich za pomocą Html'u ?
3.2 Jak wylistować pliki w folderze głównym i podfolderach oraz ... ?
3.3 Windows Recycle Bin - Gdzie i jak system Windows przechowuje informacje o usuniętych plikach ?
3.4 Jak zrobić miniatury (thumbsy) plików graficznych i dołączyć je do listy właściwości plików znajdujących się w folderze i podfolderach. ?
 
3.6 Jakie dane zawierają pliki logów programu Skype ?
3.7 Jak pobrać i przekonwertować znacznik czasu (TimeStamp) programu Skype na DateTime systemu Windows ?
3.8 Jak pobrać dane dotyczące historii czatów, zapisane przez program Skype w plikach chatmsg.dbb, chatmember.dbb i chat.dbb ?
3.9 Jak pobrać dane dotyczące historii rozmów telefonicznych, zapisane przez program Skype w plikach call.dbb i callmember.dbb ?
 

3.6 Jakie dane zawierają pliki logów programu Skype ?

    Skype używa wielu plików do przechowywania danych. Pliki te zawierają przede wszystkim dane dotyczace wykonywanych operacji przez program Skype (rozmowy telefoniczne, czaty, transfer plików, itp.), jak również dane o profilach użytkowników. Wszystkie te pliki te znajdują się w folderze :

C:\Documents and Settings\windows_user\Dane Aplikacji\Skype\skype_user

callmember<liczba>.dbb
• historia rozmów telefonicznych
call<liczba>.dbb
• dane pomocnicze dot. rozmów telefonicznych
chatmember<liczba>.dbb
• lista uczestników czatów
chatmsg<liczba>.dbb
• pełny zapis historii czatów
chat<liczba>.dbb
• zawiera dane (m.in pierwsze wyrazy treści czatu), wyświetlene w poszczególnych pozycjach podmenu pojawiającego się pod kursorem myszy nad Menu: Czaty/Ostatnie czaty
profile<liczba>.dbb
• szczegóły profilu użytkownika
transfer<liczba>.dbb
• szczegóły transferu plików
contactgroup<liczba>.dbb
• nieznany
user<liczba>.dbb
• szczegóły profili użytkowników
voicemail<liczba>.dbb
• szczegóły wiadomości poczty głosowej
    Plik zazwyczaj składa się z rekordów o stałej długości. Każdy rekord zawiera nagłówek o długości 8 bajtów, gdzie:
• cztery pierwsze bajty są sygnaturą rekordu i tworzą ją kolejno bajty:
   0x6C 0x33 0x33 0x6C (l33l w ASCII)
• cztery następne bajty określają długość zapisanego bloku danych (długość danych),
    Za nagłówkiem znajduje się obszar danych rekordu. Długość obszaru danych zawarta jest w nazwie pliku logu. Jest to końcowa, numeryczna część nazwy pliku i najprawdopodobniej jest ona wielokrotnością liczby 256. W obszarze tym zapisywane są szczegółowe dane. Do oznaczenia początku lokalizacji poszczególnych składowych rekordu wykorzystywane są znaczniki (tzw. markery).
    Dane tekstowe zakończone są znakiem końca ciągu znaków 0x0 (lub inaczej &H0, Chr$(0), vbNullChar). Wielkość danych numerycznych określona jest typem liczby. Niektóre dane np. znacznik czasu (TimeStamp) jest zapisany w/g własnego schematu twórców programu Skype.
    Poniżej przedstawiam linki do artykułów z których korzystałem podczas analizowania poszczególnych plików logów programu Skype.
  1. Skype Log File Analysis
  2. Skype Chat Logs Dissection
  3. howto: decoding a Skype timestamp
  4. File Format (chatmsg.dbb)
  5. Skype chatlogs
  6. Skype times again

 ΔΔΔ 

 

3.7 Jak pobrać i przekonwertować znacznik czasu (TimeStamp) programu Skype na DateTime systemu Windows ?

    Przeanalizujmy pierwszy rekord przykładowego pliku Call256.dbb
Z artykułów do których linki podałem powyżej, wiemy że za znacznikiem 0xA1 0x01 znajduje się pięć bajtów, za pomocą których zapisana jest interesująca nas data.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 6C 33 33 6C 3E 00 00 00 0E 00 00 00 41 08 00 09 l33l>.......A... 16 04 00 A1 01 D0 8C BA C6 04 00 95 07 00 03 C8 06 ..˘.ĐŚşĆ.....Č. 32 62 72 61 7A 62 79 00 03 E4 06 31 2D 31 32 32 31 brazby..ä.1-1221 48 34 39 34 33 35 32 00 00 AD 06 00 04 03 04 0F 00 494352..­....... 64 00 00 00 D1 06 16 00 00 00 00 00 00 00 00 00 00 ...Ń............


' I. Jak pobrać znacznik czasu w postaci ciągu znaków z pliku Call256.dbb ?
' funkcja pobiera z pliku 5 bajtów znajdujących się bezpośrednio za znacznikiem sMarker,
' • sFilePath - pełna ścieżka do pliku zawierającego znacznik czasu,
' • sMarker - ciąg znaków bezpośrednio za którymi znajduje się 5 bajtów znacznika czasu,
' • lRecordOffset - przesunięcie do rekordu z którego chcemy pobierać znacznik czasu,
' przy powodzeniu zwraca 5-cio znakowy ciąg znaków, przy niepowodzeniu zwraca pusty ciąg znaków,
Private Function zbGetTimeStamp( _
sFilePath As String, _
sMarker As String, _
Optional lRecordOffset As Long = 1) As String
Dim lSizeData As Long
Dim sRecData As String
Dim lInStr As Long
Dim ff As Integer

ff = FreeFile
' otwórz plik do odczytu
Open sFilePath For Binary Access Read As #ff
' wczytaj wielkość obszaru danych w rekordzie
Get #ff, lRecordOffset + 4, lSizeData
' przygotuj bufor na przyjęcie danych z rekordu
sRecData = String(lSizeData, vbNullChar)
' wczytaj wszystkie dane z rekordu
Get #ff, lRecordOffset + 8, sRecData
Close #ff

' szukaj w rekordzie sRecData znacznika czasu
lInStr = InStr(1, sRecData, sMarker, vbBinaryCompare)
If lInStr = 0 Then Exit Function
' pobierz 5 znaków znajdujących się za znacznikiem czasu
zbGetTimeStamp = Mid$(sRecData, lInStr + 2, 5)

End Function


' II. Jak przekonwertować pięcioznakowy ciąg znaków na Unix'owy znacznik czasu ?
' Postępujemy w/g schematu
' Operacja I. Konwersja bajtów na bitowy ciąg znaków "0";"1"
' przykładowy zapis bitowy (od końca):
'    5.   &H04      00000100
'    4.   &HC6      11000110
'    3.   &HE9      11101001
'    2.   &HD2      11010010
'    1.   &HB7      10110111
' Operacja II.  bajt nr 5 - pierwsze 4 bity (znaki "0000") ucinamy,
' Operacja III.   bajty poz.(4 - 1) - pierwszy bit (znak "1") ucinamy,
' po konkatenacji ciągów powinniśmy otrzymać (bitowo):
' 01001000110110100110100100110111
' a po konwersji tego ciągu znaków na liczbę typu Long otrzymujemy 1222273335

' korzystamy z pomocniczych funkcji :
' • zbLongToBin (...) konwertującej liczbę typu Long na postać dwójkową
' • zbBinToLong (...) konwertującą postać dwójkową liczby na liczbę typu Long


Public Function zbTimeStampToLong( _
sTimeStamp As String) As Long
Dim bBytesTimeStamp() As Byte
Dim sBinUnixDate As String
Dim i As Long

' przekonwertuj znaki na tablicę bajtów
bBytesTimeStamp = StrConv(sTimeStamp, vbFromUnicode)

' bBytesTimeStamp(4) - pobierz tylko ostatnie 4 bity z 5-tego bajtu
sBinUnixDate = Right$(zbLongToBin(CLng(bBytesTimeStamp(4))), 4)

' dołączaj kolejno po 7 ostatnich bitów z pierwszych czterech bajtów
For i = 3 To 0 Step -1
    sBinUnixDate = sBinUnixDate & _
Right$(zbLongToBin(CLng(bBytesTimeStamp(i))), 7)
Next

' konwertuj uzyskane 32 bity na Unix'owy znacznik czasu
zbTimeStampToLong = zbBinToLong(sBinUnixDate)

End Function


grupa: pl.comp.bazy-danych.msaccess
wątek: Pięciobajtowa liczba 32-bitowa
przedstawił: Grzegorz Stadnik



   O wiele ciekawsze i zdecydowanie szybsze (ok. 13x) rozwiązanie konwersji pięciu bajtów na liczbę Long, w/g wczesniej opisanego schematu, przedstawił Grzegorz Stadnik     Zaproponawał On wykorzystanie operacji bitowych, zamiast czasożernych operacji na ciągach znaków w/g poniższego schematu:

I.   AND liczby 1-4 maską &H7F (01111111),
II.  Konwersja wszystkich liczby na 32-bitowe,
III. ShiftLeft liczb 2, 3, 4, 5 odpowiednio 7, 14, 21, 28 razy,
IV. OR liczb 1-5,



Public Function gsGetUnixTimeStamp( _
sTimeStamp As String) As Long
Dim bBytesTimeStamp() As Byte
Dim lLongTimeStamp() As Long
Dim lUnixTimeStamp As Long
Dim i As Long

' przekonwertuj znaki na tablicę bajtów
bBytesTimeStamp = StrConv(sTimeStamp, vbFromUnicode)

ReDim lLongTimeStamp(0 To 4)
For i = 0 To 4
    ' wykonaj operacje bitowe i konwersję CLng(...)
    lLongTimeStamp(i) = CLng(bBytesTimeStamp(i) AND &H7F) * 2 ^ (i * 7)
    lUnixTimeStamp = lUnixTimeStamp OR lLongTimeStamp(i)
Next

gsGetUnixTimeStamp = lUnixTimeStamp

End Function


' III. Jak przekonwertować Unix'owy znacznik czasu na DateTime Windows?
Public Function zbUnixTimeStampToWinDate( _
lTimeStamp As Long) As Date
Dim dtWinDate As Date

' konwertuj Unix'owy znacznik czasu na DateTime Windows
dtWinDate = DateAdd("s", lTimeStamp, #1/1/1970#)
' konwertuj czas UTC na czas lokalny
dtWinDate = zbUTCDateToLocalDate(dtWinDate)

zbUnixTimeStampToWinDate = dtWinDate

End Function


' IV. Przykładowe wywołanie
Private Sub btnTest_Click()
Dim sMarkerTimeStamp As String
Dim lUnixTimeStamp As Long
Dim sFilePath As String
Dim lRecordOffset As Long
Dim sTimeStamp As String
Dim dtDate As Date

sFilePath = "C:\Documents and Settings\windows_user\" & _
"Dane aplikacji\Skype\skype_user\Call256.dbb"

sMarkerTimeStamp = Chr$(&HA1) & Chr$(&H1)
' pobierz znacznik czasu z pierwszego rekordu
lRecordOffset = 0 * (256 + 8) + 1
sTimeStamp = zbGetTimeStamp( _
sFilePath, _
sMarkerTimeStamp, _
lRecordOffset)

If Len(sTimeStamp) >= 5 Then
    ' konwertuj ciąg znaków na Unix'owy znacznik czasu
    lUnixTimeStamp = gsGetUnixTimeStamp(sTimeStamp)
    ' konwertuj na lokalny czas Windows
    dtDate = zbUnixTimeStampToWinDate(lUnixTimeStamp)
    MsgBox "Data: " & dtDate
Else
    MsgBox "Błąd odczytu znacznika czasu !", vbExclamation
End If

End Sub

 ΔΔΔ 

 

3.8 Jak pobrać dane dotyczące historii czatów, zapisane przez program Skype w plikach chatmsg.dbb, chatmember.dbb i chat.dbb ?

    Opisy struktur plików chatmsg.dbb, chatmember.dbb i chat.dbb jakie mi się udało uzyskać na podstawie artykułów do których linki podawałem wcześniej oraz samodzielnej analizie zawartości pliku.

    Struktura pliku chatmsg<liczba>.dbb
ZnacznikOpisKoniec
0x6C 0x33 0x33 0x6Csygnatura rekordu (l33l w ASCII)4 bajty
kolejne 4 bajtydługość danych w rekordzie4 bajty
kolejne 4 bajtynumer rekordu (czatu)4 bajty
kolejne 5 bajtów0x41 0x0D 0x00 0x09 0x09 - znaczenie nieznane5 bajtów
0x03 0xE0 0x03znacznik uczestników czatu3 bajty
0x23 (# w ASCII)- prefiks 1-go uczestnika1 bajt
 1-szy uczestnik czatu do 0x2F
0x2F (/ w ASCII) - separator uczestników1 bajt
0x34 ($ w ASCII) - prefiks 2-go uczestnika1 bajt
 2-gi uczestnik czatu do 0x3B
0x3B (; w ASCII) - koniec listy uczestników1 bajt
kolejne 16 bajtów16-to znakowy (8 bajtów w zapisie hexadecymalnym) identyfikator sesji.16 bajtów
0xE5 0x03znacznik czasu2 bajty
kolejne 5 bajtów5-cio bajtowe wyrażenie reprezentujące Unix'ową datę (Timestamp)5 bajtów
0x03 0xE8 0x03znacznik wysyłającego3 bajty
 nazwa uczestnika wysyłającegoNullChar
0x03 0xF4 0x03znacznik zaproszania - wyklucza występowanie znacznika tekstu wiadomości 0x03 0xFC 0x033 bajty
 nazwa(y) zapraszanego uczestnika(ów)NullChar
0x03 0xEC 0x03znacznik wysyłającego3 bajty
 wyświetlana (zapisana w profilu użytkownika) nazwa uczestnika wysyłającegoNullChar
0x03 0xFC 0x03znacznik wiadomości- występuje, gdy nie ma znacznika zaproszania 0x03 0xF4 0x033 bajty
 tekst wiadomościNullChar
0x03 0xD8 0x18znacznik ???3 bajty
 powtórzona nazwa 1-go uczestnika ???NullChar


    Struktura pliku chatmember<liczba>.dbb
ZnacznikOpisKoniec
0x6C 0x33 0x33 0x6Csygnatura rekordu (l33l w ASCII)4 bajty
kolejne 4 bajtydługość danych w rekordzie4 bajty
kolejne 4 bajtynumer rekordu (czatu)4 bajty
kolejne 5 bajtów0x41 0x05 0x00 0x09 0x0F - znaczenie nieznane5 bajtów
0x03 0xC8 0x04znacznik uczestników czatu3 bajty
0x23 (# w ASCII)- prefiks 1-go uczestnika1 bajt
 1-szy uczestnik czatu do 0x2F
0x2F (/ w ASCII) - separator uczestników1 bajt
0x34 ($ w ASCII) - prefiks 2-go uczestnika1 bajt
 2-gi uczestnik czatu do 0x3B
0x3B (; w ASCII) - koniec listy uczestników1 bajt
kolejne 16 bajtów16-to znakowy (8 bajtów w zapisie hexadecymalnym) identyfikator sesji.16 bajtów
0x03 0xCC 0x04znacznik zaproszania2 bajty
 nazwa(y) zapraszanego uczestnika(ów)5 bajtów


    Struktura pliku chat<liczba>.dbb
ZnacznikOpisKoniec
0x6C 0x33 0x33 0x6Csygnatura rekordu (l33l w ASCII)4 bajty
kolejne 4 bajtydługość danych w rekordzie4 bajty
kolejne 4 bajtynumer rekordu (czatu)4 bajty
kolejne 5 bajtów0x41 0x0D 0x00 0x09 0x09 - znaczenie nieznane5 bajtów
0x03 0xE0 0x03znacznik uczestników czatu3 bajty
0x23 (# w ASCII)- prefiks 1-go uczestnika1 bajt
 1-szy uczestnik czatu do 0x2F
0x2F (/ w ASCII) - separator uczestników1 bajt
0x34 ($ w ASCII) - prefiks 2-go uczestnika1 bajt
 2-gi uczestnik czatu do 0x3B
0x3B (; w ASCII) - koniec listy uczestników1 bajt
kolejne 16 bajtów16-to znakowy (8 bajtów w zapisie hexadecymalnym) identyfikator sesji.16 bajtów
0x01 0x03 0x33znacznik nazwy pliku *.dat3 bajty
kolejne 16 bajtów16-to znakowy (8 bajtów w zapisie hexadecymalnym) Dwa pierwsze znaki określają podfolder w folderze chatsync w którym znajduje się plik [nazwa pliku].datNullChar
0xB5 0x04znacznik czasu2 bajty
kolejne 5 bajtów5-cio bajtowe wyrażenie reprezentujące Unix'ową datę (Timestamp)5 bajtów
0x03 0xBC 0x06znacznik wysyłającego ?3 bajty
 nazwa uczestnika wysyłającego ?NullChar
0x03 0xCC 0x03znacznik uczestników czatu ?3 bajty
 nazwa(y) uczestników czatu ?NullChar
0x03 0xD8 0x03znacznik wysyłającego3 bajty
 wyświetlana (zapisana w profilu użytkownika) nazwa uczestnika wysyłającego0x20 0x7C 0x20
0x03 0x37znacznik skróconej wiadomości2 bajty
 tekst skróconej wiadomościNullChar


  Przykład:  • skype42b_08  •  81 KB   Status: Free Pobrano   razy 


 ΔΔΔ 

 

3.9 Jak pobrać dane dotyczące historii rozmów telefonicznych, zapisane przez program Skype w plikach call.dbb i callmember.dbb  ?

    Opisy struktur plików call.dbb i callmember.dbb znajdujący się w artykule Skype Log File Analysis nie odzwierciedla struktury plików logów tworzonych przez program Skype w wersji 3.8.0.180. Badane pliki nie zawierają wszystkich danych opisanych w artykule. Poniżej przedstawiam opis struktur obu plików jakie udało mi się udało uzyskać po analizie zawartości tych plików.

    Struktura pliku call<liczba>.dbb
ZnacznikOpisKoniec
0x6C 0x33 0x33 0x6Csygnatura rekordu (l33l w ASCII)4 bajty
kolejne 4 bajtydługość danych w rekordzie4 bajty
kolejne 4 bajtynumer rekordu (połączenia)4 bajty
kolejne 6 bajtów0x41 0x08 0x00 0x09 0x04 0x00 - znaczenie nieznane6 bajtów
0xA1 0x01znacznik czasu2 bajty
kolejne 5 bajtów5-cio bajtowe wyrażenie reprezentujące Unix'ową datę (Timestamp)5 bajtów
kolejne 4 bajty0x00 0x95 0x07 0x00 - znaczenie nieznane4 bajty
0x03 0xC8 0x06znacznik nazwy użytkownika3 bajty
 nazwa użytkownikaNullChar
0x03 0xE4 0x06znacznik identyfikatora połączenia3 bajty
 identyfikator połączeniaNullChar
0x04 0x03 0x04znacznik (nieznany)3 bajty
 liczba typu Long (nieznane znaczenie)4 bajty
0xD1 0x06znacznik czasu trwania połączenia2 bajty
 czas połączenia w sekundachmax. 4 bajty


    Struktura pliku callmember<liczba>.dbb
ZnacznikOpisKoniec
0x6C 0x33 0x33 0x6Csygnatura rekordu (l33l w ASCII)4 bajty
kolejne 4 bajtydługość danych w rekordzie4 bajty
kolejne 4 bajtynumer rekordu (połączenia)4 bajty
kolejne 5 bajtów0x41 0x09 0x00 0x09 0x0D - znaczenie nieznane5 bajtów
0x03 0x98 0x07znacznik rozmówcy 13 bajty
 nazwa (nr tel.) rozmówcy 1NullChar
0x03 0x9C 0x07znacznik rozmówcy 23 bajty
 nazwa (nr tel.) rozmówcy 2NullChar
kolejne 7 bajtów0xB1 0x07 0x02 0x00 0xB5 0x07 0x06 - znaczenie nieznane5 bajtów
0x03 0xB8 0x01znacznik identyfikatora połączenia3 bajty
 identyfikator połączeniaNullChar
0x00 0x07znacznik nieznany, (nie zawsze występuje)2 bajty
 nieznana wartość liczbowa1 bajt
0xE5 0x19znacznik czasu, (nie zawsze występuje)2 bajty
kolejne 5 bajtów5-cio bajtowe wyrażenie reprezentujące Unix'ową datę (Timestamp)5 bajtów
0xA5 0x07znacznik czasu trwania połączenia2 bajty
 czas połączenia w sekundachmax. 4 bajty


  Przykład:  • skype42b_09  •  64 KB   Status: Free Pobrano   razy 


<<• idź do str. 1 •>>

 ΔΔΔ