Dump RAM procesu v LineageOS

Dump RAM procesu v LineageOS
« kdy: 23. 05. 2025, 15:16:19 »
přepsal jsem si nějakou konfiguraci programu v smartphonu (defacto řádkový seznam položek). Pogram běží a ještě se chová podle původního nastavení .  Zkoušel jsem samozřejmě v textovém poli Ctrl+Z a nebo zkopírovat datadir av něm hledat záznamy. bohužel tam nejsou. A soubor, kde měl být ten konfig právě obsahuje už nový data (tedy jeden znak !  ??? náhodně napsaný ). složka /data/data/com.aplikace.id  nic neobsahuje (prázdné složky cache a code_cache)

 Potřeboval bych udělat, poradit. Program totiž funguje podle staré konfigurace. což je záruka,záchrana. Ale zaboha se mi nepodařilo získat data z paměti. Taky vyplává, že na systému mám root
Nevím jestli LineageOS nemá nějaký memory protect nebo Trust nebo selinux, ale ještě se mi to nepovedloNeexistuje ani  /dev/kmem.
Protože veškeré následující pokusy selhaly :
 - ./pmdump.android.arm  funguje čáštečně: vytvoří 600MB/92 MB dat (bez parametrú / --anon) pro proces co "má 160MB" ale na závěr napíše Error during send. Mám pocit, že výsledný blob obsahuje jen kód. Obrovská část jsou binární nuly . na začátku jsou data, názvy  jawa balíky , binární exe smetí, , nějaký stringy(odhadem 10%), pak nuly, v druhym souboru se objeví další data ještě podruhý ale taky je to tak 5%. . samozřejmě jsem to prohledal i v utf-16.
- pomocí termuxu jse!m nainstaloval lldb a gdb (pod userem protože root neznám příkaz pkg), ale je nevím jak vyřešit problém slepice a vejce, jak ho spusti pod rootem (kromě pkg chybí i ty programy zbalíčku a dokonce i proklatý less). ale když ho spustím pod userem, hlásí to  CANNO LINK EXECUTABLE lldb (library libxml12.so.16 not found)... in namespace (default) a pro gdb hlásí : CANNOT Link executable gdb : library libexpat.so.1 not found: needed by executable
-nejde číst /proc/3427/mem : IO Error
-maps jde číst (z toho

-pátral jsem i v /proc/3427/fd : plné symlinků. mě zajímaly tty které vedou na "anon_inode[...], ale nešlo je přečíst : cat 82 ; No such device or address


Vyplývá z toho, že to potřebuju udělat v běžícím systému.
Nezkoušel jsem
Frida
Lime


https://github.com/kp7742/MemDumper jsem nezkoušel


taky se mi nepovedlo zjistit, existuje nástroj přímo v adb, který umí udělat dump paměti procesu? (to znamená něco na způsob(příklad) adb-get-serialno oproti adb shell uname)
« Poslední změna: 23. 05. 2025, 15:21:28 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »



Re:Dump RAM procesu v LineageOS
« Odpověď #2 kdy: 27. 05. 2025, 14:15:01 »
Víte někdo, jak bez uzavření(ukončení) aplikace přimět android vyflushnout RAM procesu? To co jsem získal byly nějaký nekompletní data?
jde vůbec za běhu zevést nějaký modul ko do androida, aby šlo danou věc udělat?

RDa

  • *****
  • 2 992
    • Zobrazit profil
    • E-mail
Re:Dump RAM procesu v LineageOS
« Odpověď #3 kdy: 27. 05. 2025, 18:45:32 »
Vsak si napis modul, a zkompiluj prekladacem(verzi) vuci jadru ktere aktualne v zarizeni mas a mel by byt zaveditelnej.. pokud tomu nebude branit nejaka security policy nebo podepisovani

Re:Dump RAM procesu v LineageOS
« Odpověď #4 kdy: 03. 06. 2025, 13:23:00 »
Do ha**u. Všechno je v ha**lu. Dnes v 12:44 z neznámého důvodu program jako by reloadnul konfiguraci . v konfigu souboru je ten jeden znak! Nebyl ani ukončen, jak je u androidu zvykem, Pid má stejné.


Re:vytažení dat z dumpu procesu LineageOS
« Odpověď #5 kdy: 06. 06. 2025, 17:36:30 »
Ty dumpy paměti mám, byl by někdo schopný v tom najít data? Mám 3 verze
 anon 93MB (gzip 300kB)
 s nějakým parametry r,a,d,h (300MB), gzip 13MB
plnou 600MB , gzip 130MB ( 730kB gz)

Něco se tam dajít ná, ale neřekl bych že to je 1:1 obsah toho (memory mapped ) souboru. Spíš nějaké fragmenty


Dají se tam najít posledně accessované položky  nekompletní část  záznamů jiného souboru (který nebyl smazán/přepsán)

Zkoušel jsem to hledat přes strings, pak přes less... Pár věcí tam vidím třeba 10 z 150 záznamů...
Taky nevím, jestli je to do nějaké struktury konvertované (tries, b-tree), zbytek stringů jsou nesmysly


otázka je zda ten dump program měl přístup k všemu

RDa

  • *****
  • 2 992
    • Zobrazit profil
    • E-mail
Re:Dump RAM procesu v LineageOS
« Odpověď #6 kdy: 07. 06. 2025, 10:21:25 »
pokud je to z /dev/pmem, tak je to linearni z pohledu fyzicke pameti .. v tom se blbe orientuje pac jsou stranky napreskacku

pokud je to vmem, tak to mi prijde spise maly, pokud ten soubor neni nejak sparse nebo by prisel s mapou, ktere stranky patri kam

a co jako hledas v tom??

Re:Dump RAM procesu v LineageOS
« Odpověď #7 kdy: 08. 06. 2025, 21:25:18 »

Použil jsem tento program pmdump v režimu network( na nějaký port, na NASu přes nc -L port > soubor.bin, jak je uvedené v popisu na githubu.. Akorát pokaždý telefon po nějaké době zahlásil Error during send. ten program podle htop zabírá 2.2% z 4GB RAM, 82644 z RES, 37622 z SHR a
Ten parser jsem nezkoušel na ty výstupní soubory.

šlo o textové pole "additional hosts", kam ručně přidávat vlastní filtry, co řádek , to záznam (volitelně uvozený > nebo ! pro nebo ruční A záznam  whitelist) , bohužel pod ním nebylo něco jako Save. neukládá se to v reálném čase při psaní, ale asi při kliknutí na Restart  nebo já nevim, proč se to uložilo (zapsalo do souboru na FS) zrovna v okamžiku kdy omylem neznámým způsobem jsem asi 150 řádků nahradil jedním písmenem"u". (kromě předpřipravených listů umí přidat seznamy ze svých souborů a ještě navíc i právě poslední seznam "po ruce", který jde editovat přímo v UI)

a netuším, jestli v dumpu by se měl vyskytovat memory maped původní soubor  nebo char[] proměnná s přečteným souborem a nebo jen nějaká interní reprezentace "zkompilovaného"/"zkombinovaného filtru" ve formě stromu, nebo nějakého indexu. 

jde o tento program v této verzi https://github.com/IngoZenz/personaldnsfilter/tree/1.50.47.0/app/src/main/java - nenahradilelný program pro android = DNS blokátor, který umí wildcard, CNAME detekci, víc režimů, víc seznamů filtrů

soubor začíná
Kód: [Vybrat]
PMDUMP_FILE_WITH_HEADER„  ÎI   Ŕ  Ŕ2    rw-p     00:00           
[anon:dalvik-main                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Fo 0oo  ( rw-p     00:00         
   [anon:dalvik-/apex/com.android.art/javalib/boot.art                                                                                                         

a jde tam vidět i nějaké mnoho stringů v programu("statické ui" i dynamické z settings) , i těch načtených z config souboru, pak je tam trošičku z aktuálně povolených nebo zablokovaných domén....

takže by se tam měly vyskytovat domény jako adnomi, youtube, google, microsoft, live, cloudfront atd.
« Poslední změna: 08. 06. 2025, 21:34:29 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »

Re:Dump RAM procesu v LineageOS
« Odpověď #8 kdy: 08. 06. 2025, 21:57:09 »
strings mi vrací spoustu "smetí" - krátké sekvence typu
Kód: [Vybrat]
8\Go
8]Go
8^Go
8_Go
8handleLocalVoiceInteractionStarted
8handleRequestDirectActions
8{Ho
8{HoX
8input_method
8NVo
8NVoZ
8 }Oo
8(`p
8-`p
8]      p
8sOF
8 tp
8tVo
8XGo

# such as the Googles DNS Servers.
sund
supplicantError
support
Surface(name=d8cb3eb StatusBar)/@0x314ce22 - animation-leash
Surface(name=1d4e585 InputMethod)/@0xd091ae8 - animation-leash
Surface(name=62b27ef NavigationBar0)/@0x6f650b3 - animation-leash
Suriname
Sverdlovsk
SVxV
 SwapPss
* swindows.net
# Switch for debug logging
\Symantec log
symbol
system
TcreateBaseContextForActivity
teams.microsoft.com
technet.microsoft.com
telu
termux
termux.astra
termux.astra.in
termux.astra.in.ua
termux.dev
termux.librehat
termux.librehat.com
termux  mentality
termux.mentality

America:Yellowknife
* analytics.mall.tv[/b]
android
android.app.NotificationChannel



ve kterym ale jdou najít kousky. (často platná doména je uvozená jedním znakem, jakýmkoli: swindows, `7d70shl7vidtft.cloudfront.net
 )

vliv na výstup hraje taky strings -e volba - což podepírá, že jde o framgentovanou nebo neorganizovaný dump paměti, ve kterym to právě bude rozkouskovaný, strings -e b, stringe -e l, strings nachází různé věci ,ve všech najdu to co hledám
« Poslední změna: 08. 06. 2025, 22:00:18 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »

RDa

  • *****
  • 2 992
    • Zobrazit profil
    • E-mail
Re:Dump RAM procesu v LineageOS
« Odpověď #9 kdy: 08. 06. 2025, 22:14:01 »
posli na mejl/soukrome zprave odkaz na uschovnu treba.

strings - muzes pridat encoding (vyzkousej vsechno co tam je mozne zadat), protoze ono to interne nemusi byt v ascii/utf8, ale klidne wide string.. nebo u32 string (javu ci jeji gugl klon neznam) a pokud jde o objekty tak ty polozky budou v rozparsovanem stavu nejspis. Puvodni obsah nejakeho souboru bys videl leda u stranek tvorici diskovou cache.

Jinak z pmem bych analyzoval asi tak, ze kdyz mam nekde ten string zajmu, tak se snad vi na jake je strance, a pak adresu teto stranky bych hledal v strankach, ktere definuji strankovani - takze pak muzes najit dalsi/predchozi stranku skrze tenhle translacni model. V x86 bych to dal rozhodne snadneji, nez na ARMu, protoze neznam ty struktury (u x86 jsme se to dokonce ucili na vejsce v jednom predmetu).

RDa

  • *****
  • 2 992
    • Zobrazit profil
    • E-mail
Re:Dump RAM procesu v LineageOS
« Odpověď #10 kdy: 08. 06. 2025, 22:18:01 »
Jinak z principu fungovani "dns blokatoru" by to mohlo fungovat i tak, ze si to zresolvuje dane adresy a ulozi do nejakeho vyhledavaciho stromu, ktery se aplikuje. Takze nejaka konfigurace nemusi byt vubec k nalezeni v pameti.

Re:Dump RAM procesu v LineageOS
« Odpověď #11 kdy: 08. 06. 2025, 23:54:58 »
No... podíval jsem se na správný soubor z těch tří = samozřejmě ten největší (700MB) a po asi 299MB nul  měl asi v posledních 30% nějaká data  ze kterých šlo ještě něco najít (nic převratného, asi heap, defacto jen aktuální log, co se ukazoval v okýnku, posledních 50 řádků, které neodpovídají tomu, co hledám  >:(), ale obsahuje to spoustu bordelu, snad natažené všechny slovníky pro autokorekci ve formě regexu (anglicky, UTF-16 ...  a n k | b a r | b a r c e l o n a | b a r c l a y c a r d | b a r c l a y s | b a r g a i n s | b a u h a u s | b a  ... | ( i d | i d a h o ) | ( i l | i l l i n o i s ) | ( i n | i n d i a n a ) | ( k s | k a n s a s ) | ( k y | k e n t u c k y ) | ( l a | l o u i s i a n a ) | ( m a | m a s s a c h u s e t t s ) | ( ) ... resp může obsahovat, tu rozšířenou sadu filtrů, ale v binární podobě...viz objev níže

Ale jak jsem se v tom začal hrabat, napadlo mě se ještě jednou podívat na disk - zkopírovat jsem si celou složku s programem , hned jak jsem ten průser zjistil . A porovnávám soubory FILTERHOSTS.TXT a dns.txt a  pro backup verzi a pro aktuální, tam rozdíl není, ale načmuchal jsem FILTERHOSTS.TXT.idx a svět div se , soubor má 18kB místo 15kB (což odpovídá) 2347/1963 položkám relativnímu rozdílu.. takže zřejmě soubor obsahuje platné položky (sloučené s 1963 položkama s základním souborem, který pořád mám)

...jenže je otázka, jak takový soubor injektovat do programu (dostat se do stavu, kdy sice byl připsan aditionalhosts a tedy  filteroval asi 1963 položek)  - to možná nebude tak složité, napadá mě killnout program, nahradit soubor a spustit,  a program by neměl dělat rebuild (jsou tam i nějaký timestampy uložený)
a zadruhé (ne nutně po sobě) jak z tohoto idx0 souboru vykřesat těch 2347 položek) Nepotřebuju mít zvlášť dns.txt a
 textové pole



(jen rekapitulace pro rychlé pochopopení : seznam 1965 domén je uložen v statickém souboru, který program načítá jako ručně přidaný zdroj. A to co jsem ztratil, je seznam v textovém políčku přímo v programu, se bohužel propsal do txt souboru na filesystemu.)

a vsadim se , že v tom dumpu najdu 1:1 kopii toho soubor FILTERHOSTS.TXT.idx/idx0.... takže teď úkolem je zjistit strukturu toho kompilátu.  No a dump paměti vlastně možná pro to ani nebyl potřeba (i když by to moc zjednodušil, kdybych v něm našel 1:1: kopii  toho textového pole)  :-\
« Poslední změna: 09. 06. 2025, 00:02:41 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »

Re:Dump RAM procesu v LineageOS
« Odpověď #12 kdy: 09. 06. 2025, 00:06:45 »
Citace
soubor má 18kB místo 15kB (což odpovídá) 2347/1963 položkám relativnímu rozdílu..
A pointa je v tom, že na konci toho největšího dumpu jsem našel
Citace
!Buildingindexfor2374entries...!
VPNrunnerthread1started!
Persistingindexfor2374entries...!
Indexcontains2345uniqueentries!Processingnewfilterfilecompleted!

...Takže snapshot znám, ale neznám strukturu... Možná, to ani nepůjde rekonstruovat do srozumitelné podoby seznamu návzů domén, pokud půjde o pole hash domén, (jednocestná funkce)...
« Poslední změna: 09. 06. 2025, 00:09:44 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »

Re:Rekonstrukce konfigurace programu
« Odpověď #13 kdy: 12. 06. 2025, 11:37:47 »
Částečný světlo na konci tunelu. Nahráním zálohovaného idx0 souboru  do složky programu a následné spuštění (nesmí se triggernout rebuild, ale když se to stane, není to fatální, stačí zkopírovat znova a spustit znova)

lze dosáhnout předchozí konfigurace programu (opakuju,  že se chová podle všech  2347 položek. Z toho 1950 položek je v samostatném souboru, který se neztratil, ale kolem 400 jich bylo v textovém poli, což je ta ztracená konfiguruace),,, jenže jde o lidsky nečitelný formát = něco jako "kompilované"/serializovanou datovou strukturu pro rychlý lookup ,aby se to nemuselo dělat při každé spuštění.

Otázka ale, jestli půjde nějak z tohoto souboru vykřesat textovou reprezentaci. Program je tedy schopný běže podle předešlého stavu, ale zaboha nemohu najít způsob jak se k zbylým nebo všem řádkům dostat. Zkoušel jsem samozřejmě create backup, ale to dělá zjevně kopii těch vstupních dat v textovém formátu(který je přepsán=ztracen)

18kB/2347=asi 9b/záznam

RDa

  • *****
  • 2 992
    • Zobrazit profil
    • E-mail
Re:Rekonstrukce konfigurace programu
« Odpověď #14 kdy: 13. 06. 2025, 09:50:41 »
Otázka ale, jestli půjde nějak z tohoto souboru vykřesat textovou reprezentaci.

Tak najdi v binarce puvodni fragmenty retezcu a mrkni zda je to necim dekorovany pred a po. A pak musis pochopit co ty binarni data znamenaj, treba to muze byt pointer na dalsi fragment.

Pokud je neco rozkouskovany na maly fragmenty - neni to treba REGEX a pak jeho "prelozena" forma? Tj. muzes idenfikovat knihovnu na regexy a podivat se jak maji interni format reseny.

Pak uz zustava pouze vzit hrubou silou fragmenty a zkusit je hledat "na internetu", zda neexistuji podobna pravidla, takze by sis to nemusel skladat sam. Zde je predpoklad - ze budou ve zdrojaku toho programu, jako hardcoded rules?