Page 1 of 1

Struktura archiwum wiadomości na przykładzie SMS-ów z Nokii 6303c.

PostPosted: 19 Feb 2012, o 13:15
by Rook
Mam problem z przeniesieniem archiwum SMS na peceta. Nokia Suite widzi połączony telefon (6303 classic) przez USB i widzi nawet większość wiadomości w archiwum, ale nie wszystkie. Co gorsza część wiadomości widzi błędnie - jako jedną wyświetla kilka pomieszanych. Niektóre mają złe daty (sprzed czasu, kiedy telefon był kupiony). Gdy eksportuję je do .cvs są jednakowe błędy. Zrobiłem backup wiadomości (plik .nbu) i podejrzałem go edytorem hex - to samo. Sam telefon widzi wszystko poprawnie.

Nokia Suite mam najnowsze (choć próbowałem też starszej wersji, również na drugim komputerze). Software w telefonie najnowszy. Sterowniki do kabla były w pakiecie z Nokia Suite, ale dla spokoju spróbowałem też zainstalować wersję starszą, dostępną na stronie Nokii oddzielnie. W ogóle reinstalowałem wszystko w różnych konfiguracjach i nic.

Wiadomości, które nie są widziane w Nokia Suite lub są widziane niepoprawnie, w telefonie mają w szczegółach opcję linked, mimo, że nie wszystkie mają długość powyżej 160 znaków.

Proszę o pomoc - jak mogę skopiować do PC poprawnie całe archiwum. Najbardziej by mnie zadowoliło 'przekonanie' Nokia Suite do poprawnego działania, ale może też być dowolny program, który by zrzucił to archiwum na dysk. Ostatecznie może też być jakiś serwisowy program, który by zrzucił do pliku wewnętrzną pamięć, a ja bym sobie już jakoś z tego pliku wygrzebał te wiadomości, jak z .nbu.

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 19 Feb 2012, o 13:30
by adrian219
Rook, spróbuj może Nokia PC Suite. Bo Nokia wypuściła trzy programy: Nokia PC Suite, Nokia Ovi Suite, Nokia Suite. Spróbuj tego najstarszego, bo on chyba jest kompatybilny najbardziej z tym telefonem. :)

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 19 Feb 2012, o 13:32
by nemo333
może pobierz po prostu stare dobre Nokia PC Suite 7? U mnie działa wszystko poprawnie :)

[ Komentarz dodany przez: adrian219: 19 lutego 2012, o 12:39 ]
Przecież o tym pisałem przed chwilą. :P

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 19 Feb 2012, o 15:40
by Rook
Sprawdziłem już:
Nokia PC Suite 7.1.62.1
Nokia PC Suite 7.1.180.46
Nokia Ovi Suite 3.1.1.90
Nokia Suite 3.2.100
Nokia Suite 3.3.86

We wszystkich jest ten sam problem. Stary, dobry PC Suite jest o tyle lepszy, że widzi dodatkowo MMSy, ale one nie są moim głównym zmartwieniem.

Jakieś inne pomysły?

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 19 Feb 2012, o 15:56
by adrian219
Rook, No to powiem Ci, chyba nic nie poradzisz...

Może spróbuj programów "wielofunkcyjnych" np. OxyCube, MobiMB - powinny posiadać funkcje zgrywania sms. :)

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 20 Feb 2012, o 11:19
by Rook
Dziękuję za podpowiedź z OxyCube. Zakończyło to mój problem z synchronizacją, chociaż nie do końca pomyślnie... Nic więcej z tym problemem chyba nie da się zrobić, ale opiszę, co było dalej, bo to ciekawy przypadek.

OxyCube nie widzi co prawda żadnych SMSów, ale widzi ich pliki w katalogu Messages. Pliki są niestety oddzielne dla każdego fragmentu wiadomości.
Niespodzianka 1: Wciąż jest ich mniej, niż widzi telefon.
Niespodzianka 2: Odświeżam widok i część ich znika, a pojawiają się nowe (i tak kilka razy).
Niespodzianka 3: Odłączam telefon i okazuje się, że 90% archiwum diabli wzięli. Moje jedyne poprawne archiwum... :cry:

Wyjaśniłem swoją zagadkę, dlaczego krótkie SMSy są linked: oczywiście polskie krzaczki. Chyba rozwiązałem zagadkę, dlaczego Nokia Suite mieszał SMSy lub je pomijał. Prawdopodobnie ma buga w algorytmie łączenia fragmentów SMSów: te pomieszane były po prostu połączeniem złych fragmentów, a do tych niewidocznych nie umiał dobrać reszty, więc nie wyświetlał. Sam telefon jakoś umiał - ewidentna fuszerka Nokii. Samo archiwum było bycze (3000+ wiadomości), więc miał co pomieszać: prawdopodobnie dla różnych wiadomości zgadzał się CSMS reference number i on naiwny łączył w ciemno po tym tylko.

Mam teraz 5 katalogów ze skopiowanymi (dzięki Bogu) plikami wiadomości (11 000 sztuk, ale się powtarzają). Teraz wystarczy już tylko napisać skrypt, który wyciągnie z nich co trzeba (treść, data, godzina ,nadawca/odbiorca) i złoży do kupy. Łatwizna. :nerd: Czuję się, jak panowie z labów do odzyskiwania danych...

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 20 Feb 2012, o 18:53
by adrian219
Rook wrote:Teraz wystarczy już tylko napisać skrypt, który wyciągnie z nich co trzeba (treść, data, godzina ,nadawca/odbiorca) i złoży do kupy.

Jak już skończysz i będzie to rozsądnie wyglądało to pochwal się tym tutaj. ;]

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 18 Mar 2012, o 22:25
by Rook
Skończyłem pracę nad skryptem. Zaraz go omówię, ale najpierw wytłumaczę mój problem i prawdopodobnie lepsze jego rozwiązanie (Dla mnie już było za późno na nie, bo straciłem archiwum na telefonie, ale może ktoś nie powtórzy moich błędów).

Moje archiwum było takie pokiełbaszone, ponieważ powstawało w niejednolity sposób. Najpierw pojedynczo przenosiłem wiadomości z inbox i sent items do saved messages z poziomu telefonu i te wiadomości były w miarę ok. Gdy zaczęło przybywać ich zbyt dużo, zacząłem je przenosić z poziomu PC Suite i to był początek problemów. Potem przyszedł wymuszony update do Nokia Suite i jeszcze bardziej się wszystko pomieszało. Na końcu odkryłem, że telefon umie grupowo przerzucać zawartość katalogów (Mark all / Move marked) i archiwizowałem je z powrotem poprawnie.

W tym momencie miałem pokiełbaszone archiwum, ale jeszcze nie było strat. Drugim błędem było użycie OxyCube, który "kopiował" wiadomości w destrukcyjny sposób (a do tego nie wszystkie widział). W efekcie tego straciłem kilkadziesiąt wiadomości. Prawdopodobnie należało zamiast tego zrobić backup z poziomu telefonu, a zapisany tak pojedynczy plik na karcie rozbebeszać na PC. Zachowałbym wtedy archiwum na telefonie, a być może plik z backupem byłby bardziej poprawny, niż to, co zrzucił OxyCube (to tylko przypuszczenie na podstawie faktu, że telefon widział WSZYSTKIE wiadomości i to poprawnie).

Skrypt:
Czyta on katalog plików z SMS zrzuconych przez OxyCube i eksportuje do jednego pliku .txt wszystkie wiadomości w formacie:
1. Numer porządkowy
2. Numer nadawcy/odbiorcy
3. Nazwa nadawcy/odbiorcy (może być inna niż na telefonie)
4. Data, godzina
5. Numer części SMS, liczba części SMS
6. Przychodzący/wychodzący
7. Treść
Wiadomości są posortowane chronologicznie.

Skrypt jest pisany w MATLABie. Odpala się go od skryptu start.m; pozostałe m-pliki to pomocnicze funkcje. Komentowałem swój kod, więc jak ktoś zna MATLABa, to szybko załapie o co chodzi, a jak nie umie, to niech się nauczy. ;P Nie rozgryzałem całego standardu (załączam potrzebną dokumentację - najważniejszy jest rozdział 9.2), tylko heurystycznie dochodziłem co jest gdzie. Część informacji się dubluje, więc używałem tych, które było wygodniej lub były bardziej niezawodne. Kod mam dosyć toporny, ale nie chciało mi się go szlifować do jednorazowego użytku. Część SMSów miałem poważnie uszkodzonych, więc musiałem je naprawiać. Kod za to odpowiedzialny zostawiłem, ale zakomentowałem.

Struktura pliku wiadomości:
Tu zaczyna się Meksyk z trzech powodów. 1. Nokia olewa standardy i w dziki sposób zapisuje te wiadomości. 2. PC Suite przy przenoszeniu zniszczył część informacji, które musiałem jakoś odzyskiwać. 3. Nie czytałem dogłębnie standardu, więc nawet to, co jest zgodne, ja osiągam po omacku. Dość powiedzieć, że robiłem skrypty parsujące pliki z SMSami do innej, starszej Nokii i jeszcze starszego Siemensa i mimo doświadczenia, uporanie się z tym problemem było bez porównania trudniejsze.

Opiszę po kolei co skąd wydobyć, zaczynając od rzeczy najprostszych.

1. Data i godzina nadejścia/wysłania: po nazwie pliku - znaki 9-16 (licząc od 1) to zapisane heksem liczba sekund od 1.1.1980 (a nie 1970 jak w Unixach)

2. Wychodzący/przychodzący: po nazwie pliku - znak 27 == 2 -> wychodzący; znak 27 == 5 -> przychodzący

3. Numer części (dla podzielonych na fragmenty; dla pojedynczych jest 0 lub 1): po nazwie pliku - znak 37

4. Liczba części (dla podzielonych na fragmenty; dla pojedynczych jest 0 lub 1): po nazwie pliku - znak 35

5. Numer nadawcy/odbiorcy: zapisany pod offsetem 0x5E z kodowaniem UTF16. Czasami z +48, czasami bez. Czasami nie jest to numer, a nazwa nadawcy, który u operatora sobie załatwił takie podpisywanie (np. miałem SMSy od "Netia" albo "Play"). Dla wychodzących wiadomości rozgłoszeniowych (wielu odbiorców) są tam same 0. Wówczas wszyscy odbiorcy są zapisani (razem z nazwami) po treści "drugiego tekstu".

6. "Pierwszy tekst": Treść wiadomości kodowana septetami lub w UTF16 (polskie krzaczki).
-Dla kodowania septetami zaczyna się normalnie (gdy nadawca ma standardowy numer 9-cyfrowy) pod offsetem 0xC2 (wychodzące) lub 0xC3 (przychodzące) + 1 bit przesunięcia w obu przypadkach. Długość jest zapisana pod offsetem 0xC1 (wychodzące) lub 0xC2 (przychodzące). Maksymalnie wynosi 160 znaków.
-Dla kodowania UTF16 zaczyna się pod offsetem 0xC9. Maksymalnie wynosi 67 znaków. Jest terminowany zerem.

"Pierwszy tekst" występuje zawsze, ale miałem z nim sporo problemów. Niestandardowi nadawcy mieli poprzesuwane treści, część wiadomości miała uszkodzone dwa pierwsze znaki, część znaków była źle kodowana (w tym tak pospolite, jak: ^ _ ] ). Wówczas ratowałem się "drugim tekstem".

6. "Drugi tekst": Treść wiadomości kodowana zawsze w UTF16 niezależnie, czy były krzaczki, czy nie. Adres początku to wartość spod offsetu 0x7 + 0xF8. Treść jest terminowana znakiem 0x0004 (wychodzace) lub 0x0002 (przychodzące). Maksymalnie wynosi 110 znaków, więc jeśli w "pierwszym tekście" mieliśmy kodowanie UTF16, a wiadomość była wieloczęściowa, "drugi tekst" zawiera całą pierwszą i fragment drugiej wiadomości. "Drugi tekst" nigdy nie występuje w części drugiej i kolejnych w SMS-ach wieloczęściowych.

Link do kodu:
Code: Select all
Please Login or Register, to see this Content

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 18 Mar 2012, o 22:36
by adrian219
Super robota. :)

Ja bym na Twoim miejscu zgłosił usterki do Nokii, a nóż widelec może użyją Twojego pomysłu do Nokia Suite? :D

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 18 Mar 2012, o 22:44
by pawelooss
Czyli potwierdza się to, że standardy i oprogramowanie obsługujące SMS-y od Nokii nadają się do podtarcia tyłka.

Stąd tyle odwiecznych problemów z krzaczkami / polskimi znakami / wielostronicowymi wiadomościami, które w większej ilości (ponad tysiąc) rozwalają cały soft, doprowadzając telefon do ciągłych resetów.

Re: Nokia Suite błędnie pobiera archiwum wiadomości.

PostPosted: 3 Mar 2013, o 03:31
by Rook
Znowu udało mi się zapchać telefon pokaźnym archiwum wiadomości (4000+ wiadomości + 3.8 MB zdjęć w MMS). Przestał przyjmować nowe wiadomości do momentu, aż skasowałem trochę niepotrzebnych plików. Znowu fuszerka Nokii - na sztywno podzielili pamięć telefonu i mimo, że jest jeszcze miejsce, to zarezerwowane na coś innego.

Tym razem zrzucenie pełnego archiwum do komputera zrobiłem znacznie mądrzej, dzięki czemu nic nie skasowałem i mam zarchiwizowane WSZYSTKIE wiadomości:
1. Z poziomu telefonu robię backup wiadomości -> .nbf
2. Plik backupu kopiuję do komputera czymkolwiek (ja w szczególności niczym specjalnym, bo pliki na karcie są widzialne dla PC jak na zewnętrznym dysku)
3. Zmieniam rozszerzenie .nbf na .zip i rozpakowuję czymkolwiek -> mam pliki wiadomości uporządkowane w katalogach jak w telefonie (inbox, drafts, incoming itp.)

Rozszerzyłem mój skrypt tak, że teraz również czyta MMSy i eksportuje z nich pliki .jpg

Struktura MMSa:
Czas nadejścia/wysłania, numer/liczba części i flaga wejścia/wyjścia takie same, jak w zwykłych SMSach

Treść obrazka zaczyna się tak, jak normalny .jpg, czyli od 0xFF 0xD8, a kończy 0xFF 0xD9 (są dwa takie znaczniki - biorę pierwszy). Wystarczy zapisać wszystkie dane między tymi znacznikami (łącznie z nimi) i mamy poprawnego jpg-a.

Numer nadawcy/odbiorcy zakodowany od offsetu 0x60 (czasami z 48, czasami bez). Gdy odbiorców jest wielu, ich numery zapisane są po treści obrazka (nie analizowałem gdzie dokładnie szukać - wyszukiwałem łańcuch "+48" i zawsze działało).

Tekst wiadomości jest zapisywany również dwoma sposobami:
-Tekst drugi jest szesnastkami kodowany 16 bajtów za drugim znacznikiem końca obrazka (0xFF, 0xD9). Terminowany 0x0004 (przychodzące) lub 0x000D (wychodzące). Ma maksymalnie 110 znaków.

-Tekst pierwszy jest kodowany ósemkami (polskie krzaczki zajmują dwa bajty). Znajduje się po ostatniej sekwencji 0x2E 0x74 0x78 0x74 0x00. Wysłałem tylko dwie takie długie wiadomości, więc może to nie być zasada, tylko przypadek, ale u mnie 7 bajtów za końcem tekstu była sekwencja 0x9E 0x86. Przyjmuje długość taką, jak potrzeba (mój rekord 585 znaków).

Link do skryptu w nowej wersji (zachował wszystkie możliwości poprzedniej wersji):
Code: Select all
Please Login or Register, to see this Content

Re: Struktura archiwum wiadomości na przykładzie SMS-ów z Nokii 6303c.

PostPosted: 20 Jun 2022, o 01:05
by Krzychoo1234
Ogromny szacun za Twoją pracę! :)) Jakbyś potrafił zrobić program, który zapakuje taką kopię .NBF do telefonu Nokia z KaiOS'em to mnóóóóstwo osób byłoby Ci wdzięcznych! :))) PS. Dzięki za podpowiedź czym ten format i jak rozpakować! :dance: