giovedì 24 agosto 2023

Published agosto 24, 2023 by Django Faiola with 0 comment

Come correggere l'encoding nei JSON di Facebook

Facebook ha una bellissima funzione che permette di scaricare su richiesta l'archivio dei tuoi dati personali.

Dal menu Impostazioni seleziona "Le tue informazioni su Facebook" e infine seleziona "Scarica le tue informazioni". Ora puoi richiedere un download.

Non è lo scopo di questo post elencare tutte le opzioni disponibili nella fase di creazione della copia di backup di Facebook; in sintesi è possibile filtrare la quantità di dati per periodo, categorie, qualità dei contenuti multimediali e per finire il formato. Due formati di presentazione dei dati sono disponibili: HTML e JSON. 

Il formato JSON è il nostro caso di studio e a mio avviso il formato consigliato da scegliere per un'analisi più completa (basti pensare ai timestamp che nel formato JSON sono di valore numerico UTC mentre nell'HTML sono rappresentazioni localizzate di stringhe di difficile interpretazione).

Tuttavia se le stringhe contengono caratteri Unicode (es. le lettere accentate), i parser JSON non sono in grado di ricostruire le stringhe originali.  

HTML

JSON

A prima vista sembra che Facebook rappresenti i caratteri in UTF-8 in modo non standard. Infatti, se prendiamo come riferimento il testo "può" nel formato HTML, il corrispondente testo in JSON è "può". Cosa c'è di sbagliato? Questa è la rappresentazione del testo in esame del file JSON in HxD Hex Editor:

Il carattere "ò" è rappresentato dalla sequenza "\u00c3\u00b2" una coppia di caratteri Unicode che il parser interpreta come Latin-1 (che mappa esattamente i 256 caratteri ai 256 possibili valori di byte) "ò", invece dovrebbe essere un singolo carattere "\uc3b2". Questo significa che ogni carattere non ASCII è codificato due volte usando la sequenza di escape "\u00HH". Nel nostro caso il carattere "\uc3b2" è scritto come "\u00c3" (Ã) e "\u00b2" (²).

Soluzione

E' possibile correggere questa "anomalia" in due modi:

  1. Decodifica del JSON, codifica della stringa in Latin-1 e infine decodifica in UTF-8;
  2. Leggere il file come binario, individuare e sostituire tutte le doppie sequenze "\u00HH\u00HH" con l'unica sequenza "\uHHHH" e infine decodifica  come JSON.

WhatsAppIZZA utilizza il metodo 2: usa una semplice regular expression per eseguire il match e poi la sostituzione dei valori.

(?i)\\u00([a-f0-9]{2})

Nel nostro caso "\u00c3\u00b2", dai match c3 e b2 ottiene "\uc3b2" che in UTF-8 è proprio il carattere "ò".

Read More

giovedì 10 agosto 2023

Published agosto 10, 2023 by Django Faiola with 0 comment

Identificazione App in multiutente

dfAPKdngrader come identifica le app in multiutente? e quelle in modalità clone con la tecnologia nativa?

La logica di base è molto semplice. In primo luogo chi sono gli utenti configurati sul dispositivo?

adb shell pm list users
Users:
        UserInfo{0:Owner:13} running
        UserInfo{10:New user:10}

in questo caso sono presenti 2 utenti:

  1. id=0; name=Owner; flags=0x13 
  2. id=10; name=New user; flags=0x10

per ogni utente viene eseguito il comando per ottenere la lista di tutti i package installati:

adb shell pm list package -3 --user 0
package:com.whatsapp
package:fr.vinted
package:com.google.ar.core
package:com.rebelvox.voxer
package:it.subito

adb shell pm list package -3 --user 10
package:fr.vinted
package:com.kia.eu.mykia
package:com.wallapop

come è possibile notare il comando --user 10 mette in evidenza che i package com.kia.eu.mykiacom.wallapop sono stati installati solo per utente 10, mentre fr.vinted è presente su entrambi gli account.

dfAPKdngrader quindi associa a ogni package la lista degli id utenti.

Per quanto riguarda la tecnologia di clonazione nativa (Samsung Dual Messenger, Samsung Secure Folder, Huawei/Honor App Twin, Huawei PrivateSpace, Xiaomi Dual Apps, Oppo Clone Apps, Vivo App Clone, OnePlus Parallel Apps, Asus Twin Apps, LG Dual App, realme App Cloner, etc.) la questione si complica un pò e varie tecniche sono state implementate per cercare di identificare quella in uso e non per tutti i brand. dfAPKdngrader non è in grado di capire al 100% se l'utente è realmente un utente clone e l'identificazione è del tutto sperimentale.

Huawei/Honor App Twin

Sempre con la mia cavia Huawei Android 7 (Nougat), ho attivato la clonazione "App Gemella (App Twin)" di WhatsApp. Per poter identificare l'utente associato all'app gemella, in primo luogo dfAPKdngrader identifica il costruttore.

adb shell getprop ro.product.manufacturer
HUAWEI

Lista degli utenti

adb shell pm list users
Users:
        UserInfo{0:Proprietario:13} running
        UserInfo{10:Gemella:4000010} running

Da test effettuati (non è sicuro al 100%), sembra che l'utente clone è sempre identificato con l'id 10. Il nome dell'utente è una stringa localizzata "Gemella" per l'italiano "App Twin" per l'inglese.

Come si può vedere il programma mostra il badge (giallo) per indicare che è un app in multiutente e il badge (lavanda) per l'app clonata.

Samsung

Identificazione del costruttore

adb shell getprop ro.product.manufacturer
SAMSUNG

Samsung permette di clonare un'app con due tecnologie: "Dual Messenger" e "Secure Folder".

Lista degli utenti "Dual Messenger"

adb shell pm list users
Users:
        UserInfo{0:Pippo:13} running
        UserInfo{95:DUAL_APP:20000030} running

Il nome dell'utente è una stringa fissa "DUAL_APP", mentre per l'id è 95, variabile? Per i due dispositivi testati ho riscontrato sempre 95. Per ora l'identificazione Dual Messenger è basata solo sul nome fisso "DUAL_APP".

Lista degli utenti "Secure Folder" 

adb shell pm list users
Users:
        UserInfo{0:Pippo:13} running
        UserInfo{150:Secure Folder:10021030} running

Entrambi, nome dell'utente "Secure Folder" e id 150 sono fissi.

LG Dual App

Lista degli utenti
adb shell pm list users
Users:
        UserInfo{0:Pippo:13} running
        UserInfo{97:dual:1030} running

Da ricerche basate sul web, il nome dell'utente è fisso "dual" mentre l'id è variabile in un range 90..99. Valori più frequenti dell'id sono 97 e 98.

Tutto il resto...

Chi vuole dare un contributo per comprendere meglio l'identificazione delle app clonate native è libero di postare i suoi dati. Grazie in anticipo.

Riferimenti

Read More

sabato 5 agosto 2023

Published agosto 05, 2023 by Django Faiola with 0 comment

Aggiungere un'app a dfAPKdngrader

Vuoi aggiungere una tua app a dfAPKdngrader?

Molto semplice, pochi passi e l'app è disponibile nel programma. Vediamo come inserire per esempio WhatsApp:

  1. Rinomina il file della tua app "nuova app.apk" in "com.whatapp.apk" (packageName.apk);
  2. Sposta il file "com.whatapp.apk" nella cartella "APKs";
  3. Scarica l'icona in formato PNG e rinomina in "com.whatsapp.png" (packageName.png);
  4. Sposta il file "com.whatsapp.png" nella cartella "APKs";
  5. Apri il file "APKs.json" con un editor di testo (es: Notepad++);
  6. Aggiungi un nuovo oggetto alla fine dell'array packages e compila tutte le coppie proprietà/valori come segue (es: WhatsApp Messenger):
    },
    {
    "packageName": "com.whatsapp",
    "marketName": "WhatsApp Messenger",
    "category": "Communication",
    "versionCode": 450146,
    "versionName": "2.11.431",
    "minSdk": 7,
    "abiList": "armeabi, armeabi-v7a, x86, mips",
    "isCustom": true
    "state": "custom"
    }
  7. Salva il file ed esci;
  8. Esegui dfAPKdngrader.

APK Info

Andrea Lazzarotto ha sviluppato uno script in python "APK Info" che analizza un file .apk, ne verifica l'autorizzazione per il backup e infine genera il codice da inserire nel file di configurazione "APKs.json". Stupendo un po' di lavoro manuale in meno!

Note:

La coppia proprietà/valore "isCustom": true "state": "custom" è obbligatoria per indicare che l'applicazione è di tipo personale.

I possibili valori di "abiList" sono: noarch, armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64.

Se non desideri scaricare e associare l'immagine alla tua app puoi saltare i punti 3 e 4, verrà assegnata l'icona di default.


Read More
Published agosto 05, 2023 by Django Faiola with 0 comment

dfAPKdngrader (Forensic extraction tool for Android Backup APK Downgrade method)

 Introduzione

Progetto nato il 27 ottobre 2021 con l'idea di creare un nuovo strumento di semplice utilizzo e robusto allo stesso tempo come supporto valido per la comunità forense open-source/freeware in grado di eseguire il metodo del downgrade delle app su dispositivi Android.

Di recente ho ripreso il progetto iniziale con l'intento di potenziarlo, non dico al pari di quelli commerciali, ma non meno valido di questi. Dopo aver speso tanto, tanto tempo, sono riuscito a portarlo a un buon livello.

dfAPKdngrader è compatibile con Android OS 5.0 o superiore, supporta sia le app a singolo APK che i Bundle/Split, avvisa se l'app è installata in multiutente, esegue il ripristino automatico o manuale delle app in caso di downgrade fallito e per concludere solo le app che sono eleggibili per il downgrade, ovvero che hanno superato tutti i test di verifica, sono mostrate nella scheda APPLICAZIONI INSTALLATE DOWNGRADABILI.

Compatibile con Android 14 dalla versione 0.3.3.

Ultima versione

Windows | Linux

Il software è proprietario (Freeware - closed source) e per l'uso commerciale considera una piccola donazione valida come autorizzazione implicita al suo utilizzo.

Elenco delle app supportate

Attualmente supporta 400+ applicazioni di terze parti.

  1. 1km
  2. 3BMeteo
  3. 99acres
  4. ABOUT YOU
  5. adidas Running
  6. AfreecaTV
  7. Airalo
  8. Airbnb
  9. AlfredCamera
  10. Algosa
  11. Alibaba.com
  12. AliExpress
  13. Alipay
  14. ALL.com (Accorhotels.com)
  15. Allegro
  16. AM - Ashley Madison
  17. Amazon Alexa
  18. Amazon Music
  19. Amazon Prime Video
  20. Amazon Seller
  21. Amazon Shopping
  22. Amberfog for VK
  23. American Airlines
  24. Aqua Mail
  25. Aruba PEC
  26. ASICS Runkeeper
  27. ASKfm
  28. ASOS
  29. Audiomack
  30. Auto.ru
  31. AutoNavi Gaode
  32. AutoScout24
  33. Azar
  34. Badoo
  35. Baidu Browser
  36. Baidu Map
  37. Baidu Netdisk
  38. BAND
  39. BBC News
  40. Beyond Menu
  41. Bigo Live
  42. Bikemap
  43. BiP
  44. BlaBlaCar
  45. BlackBerry Messenger
  46. Bloom (YouLove)
  47. Bolt
  48. Bolt Driver (Taxify Driver)
  49. Bonjour RATP (RATP)
  50. bonprix
  51. BookMyShow
  52. Booksy
  53. Box
  54. Boxer
  55. BoyAhoy
  56. Bring!
  57. Brosix
  58. Bumble
  59. Burger King Italia
  60. Burner
  61. CallApp (CallApp Contacts)
  62. CamSam
  63. CamScanner
  64. Careem
  65. Cartão Continente
  66. Cashify
  67. Chalo (zophop)
  68. Chat & Date
  69. ChatON
  70. CheckMyTrip
  71. Cloud (Cloud Mail.Ru)
  72. Coffee Meets Bagel
  73. Cookpad
  74. CSL
  75. Curb
  76. CyberGhost VPN
  77. DAILYHOTEL (데일리호텔)
  78. Daraz
  79. Daum
  80. Deliveroo
  81. Deliveroo Rider
  82. Depop
  83. Dhgate
  84. Disco
  85. Dolap
  86. Dolphin Browser
  87. Domino's Pizza France
  88. DoorDash
  89. droom
  90. Dropbox
  91. Dubsmash
  92. DuckDuckGo Privacy Browser
  93. Duolingo
  94. EatSure (Faasos)
  95. ebay
  96. ebay Annunci
  97. eBay Kleinanzeigen
  98. efootwear.eu
  99. eHarmony
  100. Endomondo
  101. enjoei
  102. eToro
  103. Euronics
  104. Evernote
  105. Expedia
  106. Eyecon
  107. FaceApp
  108. Facebook
  109. Facebook Messenger
  110. Familo (Familonet)
  111. Favor
  112. Feeld
  113. Fever
  114. Finally
  115. Fineco
  116. FireChat
  117. Firefox Browser
  118. FITAPP
  119. Fitbit
  120. Fiverr
  121. Flipboard
  122. Flyp
  123. FM WhatsApp
  124. foodora (OnlinePizza)
  125. foodpanda
  126. Foody
  127. FREENOW (mytaxi)
  128. FREENOW for drivers (mytaxi)
  129. FreeTone
  130. Fresh To Home
  131. GB WhatsApp
  132. Geocaching®
  133. Getcontact
  134. GialloZafferano
  135. Glovo
  136. Gmail
  137. GMX Mail (Mail)
  138. GO SMS Pro
  139. Goibibo
  140. Gojek
  141. Google Chrome
  142. Google Drive
  143. Google Maps
  144. Google Meet
  145. Google Talk
  146. Grab Driver
  147. Grab Taxi
  148. Grindr
  149. GroupMe
  150. Groupon
  151. GrubHub
  152. Hacoo (Hacoo SaraMart, Doop, SaraMart)
  153. happn
  154. HelloFresh
  155. Hike News & Content
  156. Hinge
  157. Hollister
  158. Hostelworld
  159. Houseparty
  160. Huawei Backup
  161. Hungama
  162. Hushed
  163. ICQ New
  164. idealista
  165. iFood comida e mercado em casa
  166. ilMeteo
  167. Imgur
  168. immowelt
  169. imo
  170. Indeed
  171. inDriver
  172. Instagram
  173. Intesa Sanpaolo Mobile
  174. Italo Treno
  175. ixigo
  176. Jack'd
  177. Jaumo
  178. JD Sports
  179. JingDong
  180. JioCinema
  181. Joongna
  182. Jumia
  183. Just Eat (ITA)
  184. Justdial
  185. K-9 Mail
  186. KakaoMetro
  187. KakaoNavi
  188. KakaoStory
  189. KakaoTalk
  190. Kaktus
  191. Kaufland
  192. KAYAK
  193. Keepsafe Photo Vault
  194. kik
  195. Klarna
  196. Klook
  197. Laiwang (来往)
  198. Lalamove
  199. Lark Player
  200. Lazada
  201. letgo
  202. Libero Mail
  203. Lidl
  204. Lightning
  205. Like
  206. Lime (LimeBike)
  207. LINE
  208. LinkedIn
  209. Listonic
  210. Lovely
  211. LovePlanet
  212. LOVOO
  213. Mail Master
  214. Mail.ru
  215. MakeMyTrip Hotels, Flight, Bus
  216. Mamba
  217. Match (match.com)
  218. Maxthon browser
  219. McDonald's
  220. MediaWorld
  221. Meetic
  222. Meetup
  223. Mercado Libre
  224. MeWe
  225. Microsoft Outlook
  226. Mileage Tracker & Log - MileIQ
  227. Mingle2
  228. MOMO
  229. momondo
  230. Mooney App
  231. Moovit
  232. Mrsool
  233. Muzz (muzmatch)
  234. My Airtel
  235. MyFitnessPal
  236. Myntra
  237. MyPertamina
  238. MYPEUGEOT APP
  239. NateOn UC
  240. NAVER Blog
  241. NAVER Cafe
  242. NAVER Mail
  243. NAVER Map
  244. NAVER MYBOX
  245. NAVER Search
  246. Neenbo
  247. Nextcloud
  248. Nike Run Club
  249. noon
  250. NumBuster!
  251. OfferUp
  252. OK
  253. OkCupid
  254. Ola
  255. Omio (GoEuro)
  256. Once
  257. ONE NAVI
  258. ooVoo
  259. OpenSooq (السوق المفتوح)
  260. OpenTable
  261. Opera
  262. Opera Mini (Android)
  263. Opera Mini (Native)
  264. Orbitz
  265. Ourtime Date, Meet 50+ Singles
  266. ownCloud
  267. OZON (OZON.ru)
  268. Parler
  269. PayByPhone
  270. PayPal
  271. pCloud
  272. PedidosYa
  273. Pegasus
  274. Periscope
  275. Phone Tracker By Number
  276. Pinterest
  277. PlantNet Plant Identification (Pl@ntNet)
  278. Plenty of Fish
  279. Pluto TV
  280. Pocket
  281. Polarsteps
  282. Postepay
  283. Prezzi Benzina
  284. priceline
  285. Puffin Browser
  286. Pull&Bear
  287. Pulse for Booking.com partners
  288. PUMATRAC
  289. PURE
  290. QQ
  291. QQ
  292. QQ International
  293. QQmail
  294. Radarbot
  295. Rail Russia (ЖД Билеты)
  296. Rapido
  297. ROMEO
  298. Ruhavik
  299. Ryanair
  300. Samsung Health
  301. SATUSEHAT Mobile
  302. Save Location GPS
  303. Scalapay
  304. Secondamano
  305. SHAREit
  306. SHEIN
  307. Shop Samsung
  308. Shopee
  309. Shopify
  310. Showroomprive
  311. Signal Private Messenger
  312. SinglesAroundMe
  313. SKOUT
  314. SkyDrive/OneDrive
  315. Skype
  316. Skype for Business
  317. Skyscanner
  318. Slack
  319. Snapchat
  320. Snapdeal
  321. SNCF Connect (Voyages-sncf.com)
  322. Social Deal
  323. Sogou Map
  324. Speedtest by Ookla
  325. Spicy
  326. Star Taxi
  327. Steam
  328. Subito.it
  329. Surge
  330. Swiggy
  331. Sygic GPS Navigation
  332. Tagged
  333. talabat
  334. TamTam
  335. Tango
  336. TaoBao
  337. Tappsi Easy (Tappsi)
  338. TAXI 18300
  339. TAXI Deutschland
  340. taxi.eu
  341. TaxiMe Driver
  342. Tchibo
  343. Telegram
  344. Telegram X
  345. Telepass
  346. Tellonym
  347. Text Free
  348. Text Me
  349. TextNow
  350. textPlus
  351. Textra SMS
  352. The Weather Channel
  353. TheFork
  354. Threema
  355. TicketSwap
  356. TigerConnect (TigerText)
  357. TikTok
  358. TikTok (Asia)
  359. Tinder
  360. Tiscali Mail
  361. TMall (天猫)
  362. Todoist
  363. Tokopedia
  364. TomTom AmiGO (Speed Cameras)
  365. Too Good To Go
  366. Tradera
  367. Trafi
  368. Traveloka
  369. Trendyol
  370. Trenitalia
  371. Trip.com
  372. Tripadvisor
  373. TripCase
  374. Trivago
  375. Truecaller
  376. Tumblr
  377. Tumile
  378. Turo
  379. Twitch
  380. Twitter
  381. UC Browser
  382. Unicorn HTTPS
  383. Unlimited Texting
  384. Vault - Hide Pics
  385. Vaulty
  386. Veepee
  387. Venmo
  388. Viber Messenger
  389. Vimeo
  390. Vine Camera
  391. Vinted
  392. Vivino
  393. VK
  394. Voxer Walkie Talkie Messenger
  395. Waiter
  396. Wallapop
  397. Wallet
  398. WangXin (旺信)
  399. Wapa
  400. Wattpad
  401. Waze
  402. WearPro
  403. Weather & Radar
  404. Weather Underground
  405. weather24 (wetter.com)
  406. WEB.DE Mail (Mail)
  407. WEBTOON
  408. WeChat
  409. Wego
  410. Weibo
  411. Weibo (International)
  412. WhatsApp Messenger
  413. Where is my Train
  414. Whisper
  415. Whoosh
  416. Wickr Me
  417. Wikiloc
  418. willhaben
  419. wine-searcher
  420. Wire
  421. Wish
  422. WowApp
  423. Wunderlist
  424. Xabber
  425. Xe (Currency)
  426. XTB (xStation)
  427. Yahoo Mail
  428. Yahoo Messenger
  429. Yandex Disk
  430. Yandex Go (Yandex Taxi)
  431. Yandex Mail
  432. Yandex Maps
  433. Yandex Navigator
  434. Yandex Weather
  435. Yanolja (야놀자)
  436. Yassir
  437. Yelp
  438. Yemeksepeti
  439. Yixin (易信)
  440. Yr
  441. Yubo (Yellow)
  442. Yuka
  443. YY
  444. Zalando
  445. Zalo
  446. Zangi Messenger
  447. Zello
  448. Zepp Life (Mi Fit)
  449. Zepto:10-Min Grocery Delivery*
  450. Zipcar
  451. Zoiper
  452. Zomato
  453. ZOOM Cloud Meetings
  454. zooplus
  455. zulily
Read More

venerdì 4 agosto 2023

Published agosto 04, 2023 by Django Faiola with 0 comment

APK Downgrade Manuale - Parte 2

 

Introduzione

Nel post APK Downgrade Manuale - Parte 1 è stata mostrata la procedura su come eseguire il downgrade delle applicazioni di terze parti nel caso di singolo package installato sul dispositivo. Come procedere nel caso in cui il package è diviso in più file?

Procedura manuale del downgrade (Bundle/Split)

Dal mio vecchio smartphone (la mia cavia) con Android Nougat proviamo a scalare l'applicazione Deliveroo: consegna di cibo che so per certo è un pacchetto diviso. Vecchia versione utilizzata 2.54.0 precedentemente scaricata e salvata sul computer con il nome del file "com.deliveroo.orderapp.old.apk".

Eseguire il prompt dei comandi.

Lista dei package installati di terze parti

adb shell pm list package -3
package:pedometer.steptracker.calorieburner.stepcounter
package:com.shazam.android
package:com.whatsapp
package:fr.vinted
package:uk.co.novaware.telepass.android
package:com.deliveroo.orderapp
package:com.instagram.android
package:com.twitter.android
package:io.yuka.android
package:com.zhiliaoapp.musically
package:com.topjohnwu.magisk
package:com.glovo
package:com.wallapop
package:com.snapchat.android

Lista path del package com.deliveroo.orderapp

adb shell pm path com.deliveroo.orderapp
package:/data/app/com.deliveroo.orderapp-2/base.apk
package:/data/app/com.deliveroo.orderapp-2/split_config.arm64_v8a.apk
package:/data/app/com.deliveroo.orderapp-2/split_config.it.apk
package:/data/app/com.deliveroo.orderapp-2/split_config.xxhdpi.apk
Come si può vedere l'applicazione deliveroo è divisa in 4 file.

Copia dell'apk originale sulla workstation

adb pull -a /data/app/com.deliveroo.orderapp-2/base.apk
adb pull -a /data/app/com.deliveroo.orderapp-2/split_config.arm64_v8a.apk
adb pull -a /data/app/com.deliveroo.orderapp-2/split_config.it.apk
adb pull -a /data/app/com.deliveroo.orderapp-2/split_config.xxhdpi.apk

Se viene riscontrato un errore del tipo

adb: error: remote object '/data/app/com.deliveroo.orderapp/base.apk' does not exist

allora bisogna creare una copia dei file prima del pull nella cartella tmp.

adb shell cp /data/app/com.deliveroo.orderapp-2/*.apk /data/local/tmp/
adb pull /data/local/tmp/base.apk
adb pull /data/local/tmp/split_config.arm64_v8a.apk
adb pull /data/local/tmp/split_config.it.apk
adb pull /data/local/tmp/split_config.xxhdpi.apk

Disinstallazione dell'app originale dal dispositivo preservando i dati dell'utente

adb shell pm uninstall -k com.deliveroo.orderapp

Riavvio del dispositivo

adb reboot

Downgrade

adb push com.deliveroo.orderapp.old.apk /data/local/tmp/
adb shell pm install /data/local/tmp/com.deliveroo.orderapp.old.apk
adb shell rm /data/local/tmp/com.deliveroo.orderapp.old.apk

Backup

adb backup -f deliveroo.ab -apk -obb -keyvalue com.deliveroo.orderapp

Inserire la password per esempio "1234". Il backup può essere eseguito anche (consigliato) utilizzando direttamente l'utility di backup bu.

Ripristino dell'applicazione originale

Nel caso in cui la copia degli originali sulla workstation è stata eseguita direttamente senza l'ausilio della cartella tmp, ovvero solo tramite una serie di pull,  bisogna creare una copia di questi sul dispositivo.

adb push base.apk /data/local/tmp/
adb push split_config.arm64_v8a.apk /data/local/tmp/
adb push split_config.it.apk /data/local/tmp/
adb push split_config.xxhdpi.apk /data/local/tmp/

Utilizzando i file originali precedentemente copiati nella cartella tmp, per ripristinare l'app originale bisogna creare un nuovo package di installazione come segue:

adb shell pm install-create -r
Success: created install session [800467548]

adb shell pm install-write 800467548 base.apk /data/local/tmp/base.apk
Success: streamed 29701113 bytes

adb shell pm install-write 800467548 split_config.arm64_v8a.apk /data/local/tmp/split_config.arm64_v8a.apk
Success: streamed 21107947 bytes

adb shell pm install-write 800467548 split_config.it.apk /data/local/tmp/split_config.it.apk
Success: streamed 147865 bytes

adb shell pm install-write 800467548 split_config.xxhdpi.apk /data/local/tmp/split_config.xxhdpi.apk
Success: streamed 418214 bytes

adb shell pm install-commit 800467548
Success

Android Backup (.ab)

Il file di backup .ab (Android Backup) è proprietario con magic numbers "ANDROID BACKUP", dati compressi con algoritmo deflate e cifrati con AES CBC se impostata la password di backup. Esistono vari tool per convertire il file .ab in .tar, uno di questi è Android Backup Extractor oppure con il tool integrato in dfAPKdngrader.

Read More
Published agosto 04, 2023 by Django Faiola with 0 comment

APK Downgrade Manuale - Parte 1

Introduzione

Oggi è sempre più difficile estrarre prove da smartphone con Android 7 o superiore e non sempre è così facile ottenere i privilegi di root per eseguire un'estrazione filesystem o meglio eseguire un'estrazione fisica decriptata del dispositivo. 

Fare un'estrazione logica con gli strumenti di backup forniti dal costruttore, Samsung Kies/Smart Switch, Huawei HiSuite, Xiaomi Mi Backup, etc. o semplicemente sfruttare il backup nativo Android via ADB può portare a un risultato che non è quello tanto "sperato", l'amato/odiato WhatsApp per esempio è escluso dal backup nativo.

Non resta che tentare di scalare le app di interesse ed eseguire il backup nativo, metodo noto come APK downgrade.

Procedura manuale del downgrade (singolo package)

Prima di procedere al downgrade manuale bisogna verificare se il dispositivo è sbloccato o quantomeno essere in possesso del PIN e/o password di sblocco, attivare le opzioni sviluppatore, nello specifico abilitare Debug USB, modificare tutte le opzioni che permettono di rendere possibile l'estrazione dei dati senza intoppi (modalità aereo, resta attivo etc.)...già fatto? vero! hai provato già gli altri metodi di estrazione.

Proviamo a scalare l'applicazione Vinted: vendi e compra vestiti utilizzando la vecchia versione 6.19.2.0 precedentemente scaricata e salvata sul computer con il nome del file "com.vinted.old.apk".

Eseguire il prompt dei comandi.

Lista dei package installati di terze parti

adb shell pm list packages -3
package:com.whatsapp
package:fr.vinted

Lista path del package fr.vinted

adb shell pm path fr.vinted
package:/data/app/fr.vinted-vui9dpo9lDF-F3aDKrvrSA==/base.apk

Copia dell'apk originale sulla workstation

adb pull -a /data/app/fr.vinted-vui9dpo9lDF-F3aDKrvrSA==/base.apk
/data/app/fr.vinted-vui9dpo9lDF-F3aDKrvrSA==/base.apk: 1 file pulled, 0 skipped. 110.4 MB/s (33533699 bytes in 0.290s)

Disinstallazione dell'app originale dal dispositivo preservando i dati dell'utente

adb shell pm uninstall -k fr.vinted
Success

Riavvio del dispositivo

adb reboot

Questo permette di bypassare il seguente messaggio di errore "Failure [INSTALL_FAILED_VERSION_DOWNGRADE]" generato quando si tenta di installare la vecchia versione senza riavviare.

Downgrade

adb push fr.vinted.old.apk /data/local/tmp/
fr.vinted.old.apk: 1 file pushed, 0 skipped. 518.3 MB/s (14644009 bytes in 0.027s)

adb shell pm install /data/local/tmp/fr.vinted.old.apk
Success

adb shell rm /data/local/tmp/fr.vinted.old.apk

Backup

adb backup -f vinted.ab -apk -obb -keyvalue fr.vinted
WARNING: adb backup is deprecated and may be removed in a future release
Now unlock your device and confirm the backup operation...

Inserire la password per esempio "1234". Il backup può essere eseguito anche (consigliato) utilizzando direttamente l'utility di backup bu.

Ripristino dell'applicazione originale

adb push base.apk /data/local/tmp/
base.apk: 1 file pushed, 0 skipped. 240.2 MB/s (33533699 bytes in 0.133s)

adb shell pm install -r /data/local/tmp/base.apk
Success
adb shell rm /data/local/tmp/base.apk

Android Backup (.ab)

Il file di backup .ab (Android Backup) è proprietario con magic numbers "ANDROID BACKUP", dati compressi con algoritmo deflate e cifrati con AES CBC se impostata la password di backup. Esistono vari tool per convertire il file .ab in .tar, uno di questi è Android Backup Extractor oppure con il tool integrato in dfAPKdngrader.

Read More

martedì 1 agosto 2023

Published agosto 01, 2023 by Django Faiola

Android Backup APK Downgrade

Introduzione

Il backup nativo di Android è stato per anni uno dei metodi più comuni di raccolta dei dati delle app utilizzato dagli esperti forensi. Ad oggi e più precisamente dalla versione 5.0 (Lollipop) tale metodo produce una raccolta molto limitata dei possibili dati acquisibili in quanto la maggior parte degli sviluppatori di applicazioni di terze parti, tenuto conto della sicurezza dei dati personali, hanno disabilitato l'autorizzazione di backup; vedi per esempio WhatsApp, Facebook, etc.

Cos'è l'APK downgrade?

Gli investigatori ed esaminatori per poter bypassare questo ostacolo hanno messo a punto un metodo detto APK downgrade che consiste, detto in parole semplici, nello scalare l'app con una vecchia versione che ha la proprietà di backup abilitataallowBackup='true' nel file AndroidManifest.xml.

Il metodo può essere schematizzato nei seguenti passi:

  1. copia dell'app originale sulla workstation;
  2. disinstallazione dell'app originale dal dispositivo preservando i dati dell'utente;
  3. installazione temporanea della vecchia versione compatibile che consente il backup;
  4. backup;
  5. ripristino dell'app originale sul dispositivo.

Il passaggio chiave di questo metodo forense è quello di preservare i dati utente durante la disinstallazione dell'app originale. Nel caso di whatsapp per esempio, la riga comando è: 

adb shell pm uninstall -k com.whatsapp

dove -k è il parametro che permette di preservare i dati e com.whatsapp è il package che si vuole disinstallare. 

Purtroppo il downgrade delle applicazioni installate di terze parti non è sempre possibile e soprattutto non è infallibile. Esistono molte variabili in gioco, le forti personalizzazioni dell'Android stock, incompatibilità delle ABIs (Application Binary Interface), cambio del "package name" nel tempo, app con permesso di backup disabilitato sin dalla prima versione, etc. sono solo alcuni dei problemi che non permettono l'utilizzo di questo metodo.

Come ha ben illustrato Heather Mahalik (Senior Director of Digital Intelligence and Forensics at Cellebrite) nel suo blog When to Use the Android APK Downgrade Feature in Cellebrite UFED il downgrade deve essere utilizzato come una sorta di "ultima spiaggia" dopo aver esaurito tutti gli altri metodi di estrazione con scarsi risultati.

L'APK downgrade permette di ottenere dati rilevanti da svariate applicazioni senza avere i privilegi di root, ma come ho detto sopra ha i suoi limiti: 

  • Bisogna essere in possesso di un dispositivo sbloccato o quantomeno con PIN e/o password di sblocco noti (richiesti durante la fase di riavvio);
  • Possibile perdita delle autenticazioni su alcune app (è richiesto di nuovo il login anche dopo aver ripristinato l'originale);
  • Perdita delle posizioni delle app nella schermata home (rimosse durante la disinstallazione);
  • Alcuni dati potrebbero andare persi (non dell'utente).

Conclusioni

Il downgrade delle app è un metodo fantastico, la sua utilità non si discute e le migliori case software del settore forense lo hanno inserito nei loro prodotti con svariati nomi: Belkasoft X (APK downgrade), Cellebrite UFED (Android Backup APK Downgrade), Magnet Acquire/Axiom (ADB con l'opzione "Try do downgrade it to..."), Oxygen Forensic Detective (APK downgrade), MOBILedit Forensic (App downgrade), GMDSOFT MD Next (Android App Downgrade) e XRY (App downgrade).

Nella comunità forense, open-source e freeware, vi sono alcuni software/script che "vantano" di eseguire il downgrade delle app ma il mio "piccolo" strumento forense user-friendly dfAPKdngrader (freeware) fa davvero il suo dovere. 

Read More
Published agosto 01, 2023 by Django Faiola

Welcome

Appunti di Informatica Forense

Django è il mio vero e unico nome: tratto dal film Django (1966) di Sergio Corbucci, uno dei migliori Spaghetti Western che vede il leggendario Franco Nero protagonista dell'omonimo film. Chiudo questa breve parentesi con un piccolo omaggio al mio celebre omonimo cinematografico.

Benvenuti, questo blog nasce in primo luogo come punto comune di raccolta per la distribuzione di programmi (Freeware) da me creati per la comunità forense, approfondimenti e supporto agli stessi; in secondo luogo per la condivisione degli appunti sulle ricerche relative all'analisi di artefatti, reverse engineering e tutto ciò che è connesso alla Digital Forensics con particolare attenzione alla Mobile Forensics.

Non sono un blogger. Ho impostato una semplice struttura di base, il giusto per poter condividere i miei appunti e scrivere qualche articolo, quindi perdonatemi se non è così bello 😄 

I commenti sono sempre benvenuti e apprezzati, la condivisione della conoscenza di più! 

Django Faiola

Read More