Odzyskiwanie MMS
Android, jak przystało na każdy szanujący się system szpiegujący, gromadzi o użytkowniku przeróżne jego dane, a nawet je przed nim samym ukrywa. I tak jest w omawianym przypadku. Skasowane wiadomości MMS nie są kasowane, a jedynie usuwane z baz danych, jednak pliki te dalej leżą sobie w pamięci wewnętrznej telefonu czekając na spontaniczny, darmowy backup w chmurach: Google, producenta telefonu, operatora komórkowego, autorów instalowanego na życzenie adware z Google Play jak i autorów wszytych chińskich rootkitów (na poziomie OS, a nawet niżej). O! Byłbym zapomniał – ewentualnie czekają na samego właściciela lub nowego właściciela, który „nabył drogą kupna” telefon bez uprzedniego przywrócenia go do ustawień fabrycznych (choć i z tym różnie bywa, bo każdy „wuj na swój strój” i nie zawsze wszystko jest czyszczone jak nazwa opcji sugeruje). Scenariuszy jest nawet więcej, jak choćby nasza policja czy rogaty mąż. A wszystko to dzięki Google’owskiemu „broken by design”.
Opisany niżej sposób wymaga fizycznego dostępu do telefonu z włączoną opcją "debugowanie po USB". W nowszych Androidach niż „żelek” (4.1.x) jest nie tylko domyślnie wyłączona, ale i wszystkie opcje programistyczne ukryte (odkryć zwykle można via kilkukrotne popukanie w wersję kernela lub przytrzymując trybik w „szufladzie” tak długo aż nie zacznie się kręcić i w opcjach deweloperskich UI odblokować te programistyczne – kto miał do czynienia dłużej „z zielonym robocikiem”, ten w cyrku się nie śmieje ;)).
Dodatkowo, użytkownik musi pobrać Android Studio (a tak naprawdę to potrzebny jest sam Android Debug Bridge) i zainstalować sterowniki aby w ogóle dogadać się z adb via USB (najłatwiej, aczkolwiek zupełnie nierozsądnie jest skorzystać z Android Driver Installer, rozsądniej z Universal ADB Drivers a racjonalnie z tych udostępnianych przez producentów telefonów).
Oczywiście sposób ten jest dla telefonów z Androidem bez tzw. roota. Szczęśliwi, którzy „zrótowali” nie muszą się tak gimnastykować bo mają wszystkie dane na wyciągnięcie ręki…
Kopia systemowa
Aby wykonać backup (teoretycznie) wszystkich danych na telefonie. należy najpierw uruchomić program Android Debug Bridge (znajdziesz w Android Studio, w platform_tools; są to pliki: "adb.exe", "AdbWinApi.dll" i "AdbWinUsbApi.dll"). Nie ma interfejsu graficznego, dlatego musisz to zrobić via CMD lub PowerShell.
Przejdź do katalogu z adb (w moim przypadku: "cd C:\gmeranina") i wklep "adb devices". Powinien zostać wyświetlony twój telefon. Jeśli się tam nie pojawi, to znaczy że brakuje sterowników. Telefon zapyta czy zezwolić komputerowi na kontakt z adb, co oczywiście zatwierdzasz.
Następnie wpisz "adb backup -apk -all -system -f C:\gmeranina\backup.ab".
Telefon zapyta o hasło do kopii (niestety jest obowiązkowe od bodajże Androida v5), którym archiwum zostanie zaszyfrowane. Po wpisaniu jakiegoś, zapamiętaj je i dotknij w "UTWÓRZ KOPIĘ ZAPASOWĄ DANYCH". Odczekaj aż adb zakończy rozmawiać z telefonem i będziesz mógł go odłączyć (nie ma żadnego paska postępu, więc musisz po prostu zaczekać kiedy znowu zacznie migać kursor w linii poleceń ;}).
Konwersja AB do TAR
Po wykonaniu systemowej kopii *.ab, trzeba ją teraz zamienić w *.tar (którym de facto jest). Kopie bez hasła (stare Androidy nie wymagają, nowe wymuszają) nie są szyfrowane i wystarczy obciąć androidowe śmieci plus dokleić standardowy nagłówek tarballa. Z szyfrowanymi jest sporo więcej zachodu, dlatego najszybciej i najprościej jest przepuścić archiwum przez program Android Backup Extractor, który wszystkie te operacje wykona za nieszczęśnika. Dla własnego zdrowia psychicznego polecam pingwinią dystrybucję wszystko-mającą, czyli cynamonowy Mint 20.1 (nie trzeba instalować), ale jeśli masz żelazne nerwy i nadmiar wolnego czasu to na Windows możesz próbować walczyć z Javą. ;)
Wrzuć do katalogu z systemową kopią plik "abe-all.jar", otwórz terminal i tam się przeprowadź poleceniem "cd". W moim przypadku jest to "/media/mint/WINDOWS/gmeranina" ponieważ u mnie Windowsowi dałem etykietę "WINDOWS", a w "/media" Mint montuje partycje spoza fstab. O ile zwykle bawię się na Windows 7 na którym problemów żadnych nie ma, o tyle na Windows 8 i nowszych, z włączoną hibernacją i/lub fastboot będziesz mieć problem z dostępem do (używając microsoftowej nomenklatury) "C:\gmeranina". Dlatego jeśli używasz tych systemów operacyjnych z tą jakże zbędną funkcją to wrzuć sobie te pliki na pendrive, inną partycję itp. Jak ci wygodniej.
Nemo (manager plików w Mint) domyślnie traktuje wszystkie dane na partycjach z systemem plików NTFS i rodzinie FAT (FAT12, FAT16, FAT32, exFAT, TexFAT) jako te z atrybutem wykonywalnym. Jeśli plik przerzuciłeś na partycję z dowolnym fs linuksowym to pamiętaj aby zmienić tenże atrybut (np. we właściwościach pliku pod prawym przyciskiem myszy). W przeciwnym razie, nie uruchomisz programu.
Parametr "unpack" konwertuje *.ab do *.tar. "backup.ab" to w moim przypadku nazwa pliku źródłowego, a "backup.tar" docelowego. "x" jest hasłem, które niestety musiałem wybrać podczas tworzenia kopii na telefonie.
Konwersja MMS do JPG
Wróć na Windows i wypakuj zawartość folderu "backup.tar|apps\com.android.mms\f\pduFiles\". Jeśli go nie masz, oznacza to że "com.android.mms" i jego zasoby zostały oflagowane jako „niedołączalne” do kopii (tak jak np. większość aplikacji komercyjnych) i cały poradnik przeczytałeś na marne! ;) Jeśli jakimś cudem masz również "com.android.providers.telephony" to tam znajdziesz bazę z SMSami i MMSami czyli "mmssms.db" (pduFiles to tylko cache, choć nieczyszczone) – i ponownie – wtedy dalsze czytanie tekstu nie ma sensu.
Posortuj sobie widok na malejący, względem rozmiaru plików. MMSy będą ważyć co najmniej kilkadziesiąt KiB, resztę usuń bo nie będzie potrzebna.
Otwórz jakikolwiek plik edytorem heksadecymalnym (dowolnym, ja używam prostego HxD) i obetnij zbędne meta dane, zostawiając wyłącznie nagłówek *.jpg.
A więc obetnij wszystko przed wartością FFD8FFE1h. Zapisz kastrata jako *.jpg (np. "test.jpg") i od tej pory będziesz mógł go otworzyć/podejrzeć w dowolnej przeglądarce zdjęć, managerze plików itp. Z tego co pamiętam, standard MMS nie przewiduje innych formatów niż JPEG (pamiętaj, że MMS to już skonwertowany plik w znacząco niższej jakości niż plik źródłowy, więc nawet jeśli załączasz bezstratny *.png to i tak w MMS będzie siedział podły *.jpg). Gdyby jednak standard się zmienił lub gdybym się mylił, zasada pozostanie identyczna, a zmieni się jedynie nagłówek fotki adekwatny do nowego formatu (i rzecz jasna sam format). W plikach MMS, poza nagłówkiem jest jeszcze „podnóżek” (stopka, footer ;)), ale nie musisz go kasować, w niczym nie przeszkadza, a kolejna transformacja programem graficznym tylko zmniejszy i tak już niską jakość.
Jeśli zdjęcie posiada dane EXIF (o czym świadczy tekst "Exif" zamiast "JFIF") to możesz wyciągnąć z niego takie informacje jak miejsce wykonania (o ile fotografujący miał włączony GPS) lub datę utworzenia co można wykorzystać np. w ten sposób, do nadania sensownych nazw plikom.
MMS może zawierać więcej niż jedno zdjęcie, wtedy dla drugiego musisz wykonać tę samą operację, włączając w to również pierwszy JPG. Analogicznie dla kolejnych.
Jak zapewne zauważyłeś, meta dane obejmują m.in. numer wysyłającego (na przykładzie wyżej, to spam z Play dlatego w miejscu numeru jest id) jak i odbierającego. Może zawierać także treść wiadomości, ale nie musi.
PS: Nie, nie proście teraz swoich żon: „kochanie, pokaż mi na chwilę telefon, chciałbym coś tam sprawdzić”! W małżeństwie trzeba sobie ufać. ;)