Jak zprovoznit nativní nahrávání hovorů - call recording

Diskuze o Androidu a příslušných aplikacích

Moderátor: Moderátoři MobilMania.cz

Odeslat příspěvekod radim-lente 12. 8. 2021 19:14

Chcete si nahrávat své vlastní telefonní hovory a to i automaticky a bez otravných notifikací. Jde to. Potřebujete mít root přístup přes ADB. Jak jej získat lze zjistit na mnoha místech. Návod píšu pro Linux, ale pod Windows jsou programy obdobné.

Obecný postup: 1. stáhnete si z telefonu originální balík Dialer.apk, 2. upravíte jej a 3. nahrajete zpět do telefonu.

Přihlásíte se do telefonu přes "adb shell" popřípadě "adb root", abyste se podívali kde máte originální balíček pro volání Dialer.apk:

# find / -name Dialer.apk

Mně jej našlo v místě "/system/priv-app/Dialer/Dialer.apk" Protože disk /systém má zakázaný zápis, aby si jej uživatelé nezničili, je třeba oblast /systém přemontovat a zápis povolit příkazem

# mount /system -o remount,rw

Pozor, nyyní si můžete celý telefon vesele zničit.

Nejprve přejmenujeme originální balík, abychom o něj nepřišli a protože by zároveň systém odmítl jeho budoucí aktualizaci bez originálního podpisu. Pokud by se cokoliv zvrtlo a upravený balík později nenaběhl, vždy můžete tento přejmenovaný balík přejmenovat na zpět a budete mít telefon jako na počátku.

# mv /system/priv-app/Dialer/Dialer.apk /system/priv-app/Dialer/DialerOrig.apk

Nyní se z telefonu odhlásíte pomocí CTRL-D a stáhnete si balík do počítače:

$ adb pull /system/priv-app/Dialer/DialerOrig.apk

APK balík je obyčejný zip, ale my potřebujeme dekodovat i javascripty do jakéhosi asembleru, který lze editovat a to uděláme nastrojem apktool. Nainstalujeme si jej příkazem

$ sudo apt install apktool

a pak balík dekódujeme příkazem

$ apktool d DialerOrig.apk

vytvoří se nám adresář DialerOrig se zdrojovými soubory. Nyní si najdeme ve kterém xml souboru je vypnuto nahrání v řetězci call_recording_enabled

# grep -R call_recording_enabled DialerOrig |grep xml

V mém případě se jedná o soubor DialerOrig/res/values/bools.xml a nahrávání zapnejeme tak, že na daném řádku změníme false na true tak aby řádek vypadal:

<bool name="call_recording_enabled">true</bool>


Nechcete-li ale notifkaci natvrdo vypnout, tuto část přeskočte. Radoval jsem se z toho dva dny, než mi začalo lézt na nervy neustálé notifikace ukládaných nahraných souborů. V telefonu notifikace nešly vypnout a tak jsem pátral a zjistil, že klíčový řetěze je call_recording_notification_with_label_title. Najdete si adresu na kterou ukazuje a zakomentujete řádky, které jsou zodpovědné za notifikaci

$ grep -R call_recording_notification_with_no_label_title DialerOrig

ukáže se hromada řádek s jazýkovými mutacemi a pak řádky, které budou obsahovat žádanou adresu. V mém případě např. 7f1100d9

....
DialerOrig/smali_classes6/android/support/v7/viewpager/R$string.smali:.field public static final call_recording_notification_with_no_label_title:I = 0x7f1100d9


Nyní se pokusíme najít, kde je adresa využitá a to pokud možno mimo ony tuny deklarací. Po příkazu:

$ grep -R 0x7f1100d8 DialerOrig|grep -v "field public"

se my ukázaly pouhé dva řádky z nichž jen jeden s asemblerovou koncovkou .smali, což byl žádoucí soubor. V mém případě se jednalo o soubor:

DialerOrig/smali_classes13/com/android/incallui/call/CallRecorder.smal

Ten si otevřete a najděte řádek s příslušnou adresou 0x7f1100d8 a zakomentujete mříží volání funkce jejíž adresu jsme našli - tedy v mém případě jsem zkusil zakomentovat dva řádky:

const v4, 0x7f1100d8
new-array v5, v3, [Ljava/lang/Object;
iget-object v7, v0, Lcom/android/dialer/callrecord/CallRecording;->phoneNumber:Ljava/lang/String;
aput-object v7, v5, v6
# invoke-virtual {v2, v4, v5}, Landroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
# move-result-object

Tím se podařilo vypnout veškeré notifikace o uloženém nahrávání.

Nyní je třeba upravený balík opět přeložit do apk a to příkazem:

$ apktool b DialerOrig

Je normální, že nově zkompilovaný balík uložený v adresáři DialerOrig/dist/DialerOrig.apk je asi poloviční velikosti než originální.

Aby šel balík nahrát do telefonu je nutné je podepsat. K tomu potřebujete certifkační autoritu, kterou lze vyrobit příkazem:

$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

a následně balík podepíšete:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore DialerOrig/dist/DialerOrig.apk alias_name

a zbývá poslední krok, nahrát balík do telefonu. Je vhodné před nahráním v telefonu ukončit aplikaci Dialer, přes "Vynucení ukončení" nebo jednoduše restartujete telefon a balík nainstalujete pomocí příkazu:

$ adb install DialerOrig/dist/DialerOrig.apk


Pokud se cokoliv pokazí. Stačí nový balík z telefonu odinstalovat. Přes ADB přemontovat opět /systém partition jako zapisovatelnou, soubor /system/priv-app/Dialer/DialerOrig.apk přejmenovat na původní a telefon restartovat.

Poznámka na konec. Nahrávání svých vlastních hovorů je v některých zemích, jako třeba Německo, zakázáno. To, ve kterých zemích je nahrávání telefonem znemožněno je definováno v souboru res/xml/call_record_states.xml. U nás je díky Bohu legální si nahrávat sám sebe, protože člověk nikdy neví, kdy se mu to může hodit jako důkaz.

Doufám, že návod někomu pomůže.
radim-lente
Kolemjdoucí

Odeslat příspěvekod KiruCZ 12. 8. 2021 20:28

Proč to dělat takhle složitě u Samsungu to jde daleko jednodušeji např u galaxy S20 stačí nahrát přes odin stejnou verzi indickou XID home csc jako je momentálně v telefonu a v nastavení telefonu přibude zpátky nahrávání hovorů, dále co jsem vysledoval tak do řady S10 stačí nahrát thajskou THL Home csc.
Tenhle způsob praktikuju už na S10e a S10 Lite (THL) a na své S20 (XID)
KiruCZ
Junior

Odeslat příspěvekod m4rk3J 12. 8. 2021 23:18

Tak u Xiaomi taky, stačí si stáhnout MIUI od Xiaomi.eu a nebo mít vlastně starší model. Ty Google aplikace mě mrzely, tak jsem zrovnna včera flashnul neoficiální MIUI :D

Ale jako návod se to pro někoho určitě bude hodit, takže za mě fajn.
m4rk3J
Junior

Odeslat příspěvekod qwepo753 13. 8. 2021 02:46

U Samsungu vim, ze stacilo vlozit Thaiskou SIM a provest Hard Reset. To se mi zda uplne nejjednodussi. Bohuzel u jinych vyrobcu to nefunguje. Ten návod 99,99 % uživatelů nezvládne a já také ne. Ale tvurce návodu by nám mohl postnout svůj upravený dialer.apk nejlépe v takové verzi, aby byl jednoduše instalovatelný bez složitých příkazů.
qwepo753
Kolemjdoucí

Odeslat příspěvekod radim-lente 13. 8. 2021 10:30

Upravený balík DialerNew.apk mi nešlo nahrát - protože nejsou povoleny přípony apk, zip, bak... ale

vzhledem k tomu, že původní balík byl v mém případě z distribuce MookKee a že se jedná o decompilaci binárního kodů z .dex souborů obsažených v apk do asembleru , do souborů formátu .smali a .xml, tak pochybuji, že tento balík bude fungovat obecně na jiných zařízeních.

Bližší ukázka práce se .smali je třeba na https://book.hacktricks.xyz/mobile-apps ... li-changes

Využít ale indické distribuce je určitě jednodušší :-).
radim-lente
Kolemjdoucí