venerdì 22 febbraio 2013

Offuscare il codice Java di Android con ProGuard

All'interno dell SDK di Android e' contenuto uno strumento per offuscare il codice Java in modo da evitare quando descritto nel precedente post Decompilare un apk

Un file di configurazione generale e' riportato in sdk/tools/proguard/proguard-android.txt mentre un altro file di configurazione, specifico per ogni progetto, e' nella root del progetto come proguard-project.txt. La configurazione di base solitamente e' sufficiente

Per attivare l'offuscamento del codice si deve togliere il commento alla riga di Proguard in project.properties

project.properties
-----------------------------------------

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
------------------------------------------

Una volta esportata il progetto creando il file .apk si osserva la creazione della directory proguard; importante conservare il contenuto perche' con questi file e' possibile effettuare il deoffuscamento del codice




provando ad effettuare la decompilazione dell'apk mediante il metodo del precedente post utilizzando la stessa applicazione si ha che la MainActivity risulta essere

Ralink RA5370 in Linux Debian

Per un vecchio portatile con una Debian Testing, sprovvisto di antenna WiFi, mi sono comprato per pochi euro su un sito cinese l'antenna Ralink RA5370 che supporta fino a 802.11N


Il supporto per Debian e' garantito mediante l'installazione di
apt-get install firmware-ralink

per caricare il modulo manualmente si usa il comando
modprobe rt2800usb

Decompilare un APK

Ebbene si', ho perso i sorgenti di un mio programma (nello specifico Well DrawDown Test)
Purtroppo ho formattato il portatile e non mi sono accorto che il progetto non risiedeva in "workspace" (la directory di default per i progetti di Eclipse) ed ho perso il sorgente del progetto


Pero' ho ancora l'apk (o meglio e' ancora sul Play Store)
Per recuperare il codice ho proceduto cosi'

Si mette in una directory il file .apk e lo si rinomina in .zip, a questo punto di decomprime come un normale zip e si ottiene quanto segue

a questo punto si scarica il programma dex2jar e si esegue
dex2jar classes.dex

e' arrivato quindi il momento di decompilare il codice con java decompiler 
si scompatta il pacchetto e si esegui
jd-gui

si apre quindi il file classes.dex.dex2jar e come per magia si ha il codice sorgente 


non e' esattamente come lo ho scritto io perche' alcune variabili sono diventate identificativi numerici ma e' decisamente leggibile
A questo punto rimangono da estrarre i file xml utilizzando il programma apktool
Si digita 
apktool d nome_file.apk nome_file

verra' generata una sottodirectory in cui sono contenuti tutti i file xml e il contenuto della directory /res



giovedì 21 febbraio 2013

Connessione seriale HP 48GX

In questo post viene descritto come effettuare una connessione seriale con una calcolatrice HP48GX per effettuare l'upload di programmi

Non verra utilizzata la calcolatrice reale ma il suo emulatore Linux (x48) dato che non possiedo il cavo e dato che il simulatore si comporta esattamente come l'oggetto reale

Per prima cosa si deve settare la calcolatrice in Server Mode. Cio si ottiene premendo Shift Destro + tasto 1 (modalita' I/O) e selezionando con le frecce l'opzione Start Server dal menu


terminata questa operazione lo schermo sara' di questo tipo

 Si passa quindi al lato client
La comunicazione avviene mediante il protocollo Kermit per cui si deve scaricare il pacchetto  ckermit

apt-get install ckermit

si deve poi individuare sulla schermata dell'emulatore la porta di connessione (nel caso /dev/pts/1)


e si deve inserire la seguente serie di comandi
-------------------------------------------------------------------
/home/luca/) C-Kermit>set modem type direct
(/home/luca/) C-Kermit>set port ?No keywords match - oport
(/home/luca/) C-Kermit>set port /dev/pts/1 
(/home/luca/) C-Kermit>set speed 9600
/dev/pts/1, 9600 bps
(/home/luca/) C-Kermit>set carrier-watch off
(/home/luca/) C-Kermit>set flow none
(/home/luca/) C-Kermit>set parity none
(/home/luca/) C-Kermit>set block 3
(/home/luca/) C-Kermit>set control prefix all
(/home/luca/) C-Kermit>set file type binary
(/home/luca/) C-Kermit>send /home/luca/BENO
(/home/luca/) C-Kermit>finish

-------------------------------------------------------------------
con il comando send si definisce il file del programma che si intende caricare sul calcolatore

con il comando finish la calcolatrice esce dal Server Mode e si puo' lanciare il programma secondo la normale procedura

Il programma in esecuzione



Compilatore Pascal su Android

Non e' molto utile ma molto geek utilizzare un compilatore Pascal su un terminale Android anche perche' a me ricorda i tempi del Turbo Pascal 5

Una scelta puo' essere PePe Compiler che eredita molti aspetti dal Turbo Pascal ed in generale i sorgenti per TP girano anche su PePe

Tra gli esempi vi sono alcuni superclassici come il calcolo dei numeri primi e Pi Greco


Al momento non e' pero' implementata la gestione della grafica (ad onore del vero la versione per PalmOS e' decisamente piu' avanzata e gestisce la GUI) e non e' possibile generare un file eseguibile svincolata dal compilatore...in conclusione si tratta di un gran bel giochino...ma un giochino

Privilegi di root su GT-S5570i

Le istruzioni per avere i permessi di root sul Samsung GT-S5570i sono stati ripresi da questo link

per prima cosa si salva questo file nella SD Card, dopo di cio' (a telefono spento) si premuno i tasti Accensione+Volume Su+Home fino a quando appare il menu

A questo punto si sceglie l'opzione Update from SD Card e si attende il reboot


Come si puo' vedere il programma Root Checker conferma il possesso dei privilegi di root

mercoledì 20 febbraio 2013

Emu84 Emulatore HP48GX

Ho voluto provare, avendo a disposizione l'originale, l'emulatore della calcolatrice HP48GX

Il programma si chiama Emu48 e, per quanto ne so, non ha una versione Linux
Una volta scaricato l'emulatore e' necessario reperire una ROM per l'emulatore da sito hpcalc.org (io ho usato questa) ed un file KML che corrisponde all'aspetto grafico dell'emulatore stesso (a questo indirizzo il KML per la 48GX)


fatto cio' si avvia l'emulatore e ci si trova davanti la schermata della figura precedente
Ovviamente trattandosi di un emulatore basato su una ROM estratta da una calcolatrice reale il comportamento sara' esattamente quello reale...l'unica differenza e' nel modo di caricare i dati (sarebbe stupido usare la porta seriale virtuale)

Sempre su hpcalc.org e' possibile scaricare programmi per tutta una serie di calcolatrici programmabili HP.
Una volta ottenuto il programma in formato binario (il file inizia con  un header del tipo HPHP48...) si puo' semplicemente trascinare il file sul diplay LCD dell'emulatore oppure da menu Edit/Load Object

Si vede apparire parte del codice del programma
A questo punto si clicca il pulsante alla estrema sinistra della terza fila dall'alto ('), poi doppio clic sul pulsante alpha e si inserisce il nome del programma (che sara' tra apici). Terminato si preme STO per salvarlo

Per recuperare il programma dalla memoria ed eseguirlo si preme poi il tasto VAR e si vede apparire nella riga del menu in basso al display il nome scelto (in questo caso e' MAND come Mandelbrot)



premuto il tasto funzione bianco sottostante il menu di interesse il programma viene messo in esecuzione


Lo stesso programma e' disponibile (Droid48) anche su Android (di una lentezza disarmante..piu' per colpa del telefono/Android  che dell'emulatore)


Frugando un po' ho trovato un emulatore per HP48 per Linux che si chiama X48
Si installa direttamente da pacchetto deb (non e' presente nei repository) e si deve inserire la rom nella directory .hp48

A differenza di Emu48, per caricare i programmi sull'emulatore si deve usare la porta seriale virtuale mediante il protocollo kermit come se fosse una calcolatrice fisica (un po' fastidioso)



Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...