Android Odczytaj najnowsze wiadomości SMS z wiersza poleceń

18

Niedawno zepsułem ekran mojego Androida. (Jeszcze raz)

To T-Mobile G2

Próbowanie nadążyć za moim zajętym życiem związanym z technologią jest wystarczająco trudne, nie tracąc kontaktu ze wszystkimi.

Zrootowałem telefon i mam już włączone debugowanie USB.

Czy ktoś wie, jak sprawdziłbym moją ostatnią wiadomość SMS z powłoki adb, dzięki czemu mogę nadążyć za pracą, a ja oszczędzam, aby uzyskać nowy telefon lub ekran zastępczy.

Dziękujemy wszystkim, którzy mają jakiekolwiek informacje na ten temat.

EDYTOWAĆ

Odpowiedź na eldarerathis

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: permission denied
$

nie mogę chmod pliku. czy faktycznie wiesz gdzie to jest?

$ chmod +x sqlite3
chmod +x sqlite3
Bad mode
$

su pozostawia mi tylko podstawowe polecenia

$ su
su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: not found
#

Poprawione

sqlite nie został zainstalowany

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

Aby uzyskać dostęp do bazy danych, musiałem być rootem.

C:\android-sdk\platform-tools>adb shell
$ su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

Wielkie dzięki, Eldarerathis

Ten link pomógł

Lazy Coder
źródło
Wygląda na to, że nie masz sqlite3pliku binarnego na swoim urządzeniu. Pierwszy link w mojej odpowiedzi zawiera instrukcje, które pomogą ci go zainstalować /system/bin. Oto link do samego pliku binarnego.
eldarerathis

Odpowiedzi:

10

To jest naprawdę brzydkie, ale możesz je odczytać z wiersza poleceń, używając sqlite3do przeglądania wpisów w bazie danych. Prawdopodobnie będziesz musiał wykopać plik binarny, chyba że masz zainstalowaną niestandardową pamięć ROM. W tym pytaniu dotyczącym przepełnienia stosu znajduje się kilka instrukcji dotyczących instalacji tego pliku binarnego , a SuperOneClick jest dostarczany wraz z nim (kopię samego pliku binarnego można znaleźć tutaj ).

Jeśli musisz zainstalować plik binarny, użyj mount(bez parametrów), aby ustalić, gdzie /systemfizycznie znajduje się twoja partycja ( /dev/block/mtdblock3na przykład moja ). Następnie postępuj zgodnie z instrukcjami w pierwszym linku powyżej i zacznij od zamontowania go ponownie w trybie odczytu / zapisu za pomocą polecenia:

mount -o rw,remount /your/system/partition /system

Gdy już sqlite3to zrobisz, zechcesz otworzyć adb shell, przełączyć na rootowanie su, a następnie wykonaj następujące czynności:

# cd /data/data
cd /data/data
# cd com.android.providers.telephony/databases ***
cd com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM sms WHERE read=0;

Spowoduje to wyciągnięcie wszystkich wierszy z tabeli dla wszystkich nieprzeczytanych wiadomości. Kolumny w tabeli są zdefiniowane w ten sposób (dzięki czemu można przyciąć SELECT):

CREATE TABLE sms (_id INTEGER PRIMARY KEY,thread_id INTEGER,address TEXT,
  person INTEGER,date INTEGER,protocol INTEGER,read INTEGER DEFAULT 0,
  status INTEGER DEFAULT -1,type INTEGER,reply_path_present INTEGER,
  subject TEXT,body TEXT,service_center TEXT,locked INTEGER DEFAULT 0,
  error_code INTEGER DEFAULT 0,seen INTEGER DEFAULT 0);

*** Uwaga dla zaznaczonej linii: może się nieznacznie różnić w zależności od urządzenia i wersji Androida, dlatego cdosobno zawarłem to polecenie. Myślę , że kiedyś był com.android.providers/telephony/databasesna starszych urządzeniach, ale nie do końca pamiętam. Użyj, lsaby rozejrzeć się za prawidłową ścieżką tutaj.


Alternatywnie możesz spróbować skopiować plik .db na kartę SD (lub pociągnąć go za pomocą adb pull), a następnie odczytać na komputerze za pomocą narzędzia sqlite.

eldarerathis
źródło
Próbowałem tego i wydaje się, że sqlite3 ma odmowę zgody
mówi zły tryb
@Jason: Musisz być rootem, aby odczytać ten katalog (po prostu wykonaj suwcześniej).
eldarerathis
@Jason: Hm, użyj chmod 0755 sqlite3więc. Może chmodzapasowy plik binarny nie lubi +xparametru.
eldarerathis
jak tylko wykonam su. wygląda na to, że nie ma poleceń
3

Dzięki pięknej wskazówce powyżej z eldarerathis, po prostu to robię

DB=/data/data/com.android.providers.telephony/databases/mmssms.db
echo 'select address,body from sms;' | ./sqlite3 -csv $DB 

aby odczytać moje SMS-y z wiersza polecenia root.

Ponieważ nie mam sqlite3, najpierw musiał pobrać je z

curl http://dl.dropbox.com/u/16958605/sqlite3
chmod a+x sqlite3

Lub zobacz instalator SQLite3 w Google Play (jeśli nie ufasz źródłu Dropbox).

użytkownik23548
źródło
1
Adres URL dl.dropbox.com dla tego pliku binarnego nie jest bezpieczny. Czy możesz podać oficjalne źródło?
pzkpfw
1

Jeśli interesują Cię więcej szczegółów niż tylko nadawca i wiadomość (jak w tej odpowiedzi ), właśnie znalazłem fajny artykuł na ten temat: Czytaj SMS bezpośrednio z bazy danych Sqlite na Androida . Zobacz także: Struktura danych komunikatu .

Co więcej, spójrz na Github: ANDROID-SMS to narzędzie napisane w Pythonie, które odzyskuje wszystkie wiadomości SMS i organizuje je w rozmowy SMS z podanymi statystykami. To także odzyskuje wszystkie wiadomości MMS i organizuje je w Rozmowach MMS, z odpowiednimi plikami. Sam jeszcze tego nie próbowałem (znalazłem to kilka minut temu), ale brzmi to całkiem nieźle.

Oczywiście ten program nie działa bezpośrednio na urządzeniu z Androidem - ale zamiast tego na twoim komputerze (gdzie wymaga Python 2.7 z SQLite3 dla Python). Musisz najpierw pobrać bazę danych z urządzenia. Wszystkie wymagane kroki opisano na stronie głównej projektu Github.

Izzy
źródło
0

Inne wymyślone przeze mnie rozwiązanie wykorzystuje aplikację na telefon, która reaguje na SMS i zapisuje ją w pliku, który można odczytać za pomocą ADB.

  • Zainstaluj dowolną aplikację podobną do Tasker, zrobiłem to z E-Robotem
  • Utwórz nowe polecenie
  • Dodaj wydarzenie Contact=>SMS
  • Dodaj akcję Memory=>Write file, tam możesz zapisać SMS do nowego pliku za każdym razem lub do tego samego z separatorem. W każdym razie zapisz go w / sdcard lub w dowolnej ścieżce dostępnej przez ADB.
  • Monitoruj tę ścieżkę za pomocą ADB i czytaj zawartość SMS.
Fr0sT
źródło