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

Teoria modyfikacji Nokia OS S40, reverse engineering.

Post by Rook » 19 Feb 2012, o 12:15

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.
Rook Male
0%
 
Offline
 
Telefon: Nokia 6303 classic
Soft: 09.10
Operator: Play

Joined: 18 Feb 2012
Online: 3h 4m 29s
Posts: 5Topics: 1
Reputation point: 38
    Windows 7 Firefox

Post by adam111 » 27 kwi 2009, o 00:00

BoTs RoX! :D
adam111 Mężczyzna
Oddajcie mi cześć!
50%

Avatar użytkownika
 
Online
 
Telefon: Nokia 3110c
Soft: v. 05.50
Operator: -----

Joined: 30 mar 2009
Online:
Posts:    •  Topics:  
    Ubuntu  Firefox

Post by adrian219 » 19 Feb 2012, o 12:30

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. :)
Image
Image

Moderator: 24.01.2011 - ??.??.????

Na forum już <uwaga> PIĘĆ lat. :)
adrian219 Male
Moderator
 
Offline
 
Telefon: Motorola Moto G
Soft: 4.4.4
Operator: Play
Age: 21
Location: Warszawa

Joined: 25 Mar 2009
Online: 220d 14h 3m 5s
Posts: 3754Topics: 345
Reputation point: 4122
    Windows 7 Opera

Post by nemo333 » 19 Feb 2012, o 12:32

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
Image
nemo333 Male
fb.com/nemowaKK
Sponsor

User avatar
 
Offline
 
Telefon: BlackBerry Curve 9320
Operator: ----------

Joined: 26 Jun 2009
Online: 433d 21h 40m 38s
Posts: 8949Topics: 96
Reputation point: 6398
    Windows 7 Firefox

Post by Rook » 19 Feb 2012, o 14:40

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?
Rook Male
0%
 
Offline
 
Telefon: Nokia 6303 classic
Soft: 09.10
Operator: Play

Joined: 18 Feb 2012
Online: 3h 4m 29s
Posts: 5Topics: 1
Reputation point: 38
    Windows 7 Firefox

Post by adrian219 » 19 Feb 2012, o 14:56

Rook, No to powiem Ci, chyba nic nie poradzisz...

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

Moderator: 24.01.2011 - ??.??.????

Na forum już <uwaga> PIĘĆ lat. :)

Za ten post adrian219 otrzymał/a punkty reputacji.
adrian219 Male
Moderator
 
Offline
 
Telefon: Motorola Moto G
Soft: 4.4.4
Operator: Play
Age: 21
Location: Warszawa

Joined: 25 Mar 2009
Online: 220d 14h 3m 5s
Posts: 3754Topics: 345
Reputation point: 4122
    Windows 7 Opera

Post by Rook » 20 Feb 2012, o 10:19

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...
Rook Male
0%
 
Offline
 
Telefon: Nokia 6303 classic
Soft: 09.10
Operator: Play

Joined: 18 Feb 2012
Online: 3h 4m 29s
Posts: 5Topics: 1
Reputation point: 38
    Windows 7 Firefox

Post by adrian219 » 20 Feb 2012, o 17:53

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. ;]
Image
Image

Moderator: 24.01.2011 - ??.??.????

Na forum już <uwaga> PIĘĆ lat. :)
adrian219 Male
Moderator
 
Offline
 
Telefon: Motorola Moto G
Soft: 4.4.4
Operator: Play
Age: 21
Location: Warszawa

Joined: 25 Mar 2009
Online: 220d 14h 3m 5s
Posts: 3754Topics: 345
Reputation point: 4122
    Windows 7 Opera

Post by Rook » 18 Mar 2012, o 21:25

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

Za ten post Rook otrzymał/a punkty reputacji.
Rook Male
0%
 
Offline
 
Telefon: Nokia 6303 classic
Soft: 09.10
Operator: Play

Joined: 18 Feb 2012
Online: 3h 4m 29s
Posts: 5Topics: 1
Reputation point: 38
    Windows 7 Firefox

Post by adrian219 » 18 Mar 2012, o 21:36

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
Image
Image

Moderator: 24.01.2011 - ??.??.????

Na forum już <uwaga> PIĘĆ lat. :)
adrian219 Male
Moderator
 
Offline
 
Telefon: Motorola Moto G
Soft: 4.4.4
Operator: Play
Age: 21
Location: Warszawa

Joined: 25 Mar 2009
Online: 220d 14h 3m 5s
Posts: 3754Topics: 345
Reputation point: 4122
    Windows 7 Opera

Post by pawelooss » 18 Mar 2012, o 21:44

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.
ImageImageImage

Kolekcja ➔ Apple iPhone 5s && BlackBerry Curve 9320 && Ericsson A2618s, A2628s && HTC HD2 && MaxCom MM432BB
&& Motorola RAZR V3, V2288 && Samsung Galaxy S && Siemens A52 && Sony Ericsson C902 && Sony Xperia E, Xperia Z3 Compact
&& N♥kia 100, 1100, 1110, 1600, 1616, 3100, 3110c, 3210, 3310, 3410, 3510i, 5510, 5800XM, 6020, 6230i, 6300, 6610i

&& N♥kia 7360, Lumia 730 Dual SIM, Lumia 800, E50, E51, E52, N8-00, N900, N9-00, N95 8GB, N-Gage && Tracer Ovo 1.2 :)
pawelooss Male
Pan i Władca!
Administrator

User avatar
 
Offline
 
Telefon: N♥kia E52 || S♥ny Z3C || iPh♥ne 5s
Soft: CFW 081.003 || Android 6.0.1 || iOS 10
Operator: Play
Age: 24
Location: Ruda Śląska

Joined: 27 Feb 2009
Online: 636d 14h 19m 10s
Posts: 11673Topics: 1103
Reputation point: 17199
    Windows 7 Firefox

Post by Rook » 3 Mar 2013, o 02:31

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
Last edited by Rook on 6 May 2017, o 09:43, edited 1 time in total.

Za ten post Rook otrzymał/a punkty reputacji.
Rook Male
0%
 
Offline
 
Telefon: Nokia 6303 classic
Soft: 09.10
Operator: Play

Joined: 18 Feb 2012
Online: 3h 4m 29s
Posts: 5Topics: 1
Reputation point: 38
    Windows 7 Firefox


Return to [S40] Warsztat

Who is online

Users browsing this forum: No registered users and 1 guest