Cheating on android

Resulta que el otro día me baje un juego para android para esos ratos muertos.
Se trata de FilmsQuiz, un juego donde sale un pequeño dibujo y tienes que acertar la pelicula. Simple, pero divertido, aunque en mi opinión tiene un par de problemillas por solucionar.
star_wars

Como podéis ver las primeras películas son realmente fáciles, luego la cosa se complica.
Resulta que llego a un momento en el que casi había descubierto todas las películas, pero no podía adivinar alguna de ellas, incluso con las pistas. No podía sacarme la imagen de la cabeza así que opte por la siguiente solución:

1. Habilite la opción de “Depuración USB” de mi teléfono.

2. Comprobé que me podía conectar al móvil usando el ADB (Android Debug Bridge):

C:\ADT\sdk\platform-tools>adb devices
List of devices attached
35358DF5B86000EC device

3. Luego busque donde estaba instalado el juego (esto no es imprescindible, pero mola):

C:\ADT\sdk\platform-tools>adb shell pm list packages | find "FilmsQuiz"
package:org.apache.cordova.FilmsQuiz

4. Normalmente por lo que he podido leer en google los archivos locales están en la carpeta /data/data/package/, así que vamos a curiosear un poco.
/!\ Se me olvido comentar que para poder realizar este proceso es necesario tener el android con permisos root (rootear el telefono):

C:\ADT\sdk\platform-tools>adb shell
shell@android:/ $ cd data/data/org.apache.cordova.FilmsQuiz
cd data/data/org.apache.cordova.FilmsQuiz
shell@android:/data/data/org.apache.cordova.FilmsQuiz $ ls
ls
app_database
cache
databases
files
lib
shared_prefs
shell@android:/data/data/org.apache.cordova.FilmsQuiz $ cd databases
cd databases
shell@android:/data/data/org.apache.cordova.FilmsQuiz/databases $ ls
ls
filmsquiz.db
filmsquiz.db-journal
tf_session_events
tf_session_events-journal
webview.db
webview.db-journal
webviewCookiesChromium.db
webviewCookiesChromiumPrivate.db
shell@android:/data/data/org.apache.cordova.FilmsQuiz/databases $

Después de tocar quí y allí un poco me llamó especialmente la atención el archivo: filmsquiz.db.

5. Así que me lo bajé:

C:\ADT\sdk\platform-tools>adb pull /data/data/org.apache.cordova.FilmsQuiz/databases/filmsquiz.db
2135 KB/s (225280 bytes in 0.103s)

6. Las bases de datos de android por defecto son SQLite (o eso creo). Así que abrí el archivo con SQLite Database Browser 2.0 B1.

filmquiz_2

Bueno a primera vista pensé que ya lo tenia, pero las películas no estaban ordenadas con lo que era un poco lio ir mirando la tabla y las imágenes.

Más curiosa es la tabla ProfileChallenge:

filmquiz_3.fw

Me pareció entender como funcionaba así que opté por ejecutar los siguientes comandos en la base de datos:

update profileChallenge
set 
time = 20
score = 100
total = (challengeId * 100)
score_status = 3
access_count = 1
sync = 3
lastSync = 3
"when" = (1393008960118 + challengeId)

Y puestos a cambiar cosas también ejecuté:

UPDATE Profile SET score = 30000 coins = 30000

Dejando la filmsquiz.db de la siguiente forma:

filmquiz_4.fw

filmquiz_5.fw

7. Finalmente dejé el archivo modificado donde lo había encontrado:

C:\ADT\sdk\platform-tools>adb push filmsquiz.db /data/data/org.apache.cordova.FilmsQuiz/databases/filmsquiz.db
3728 KB/s (225280 bytes in 0.059s)

Y aquí el resultado:

FilmsQuiz6 FilmsQuiz7

Como podéis ver automáticamente todas las películas quedan con la máxima puntuación y con el número de monedas que puse: 30000.

EXTRA:

Como extra seguí metiendo las narices en el juego:

1. Buscamos el APK:

C:\ADT\sdk\platform-tools>adb shell pm path org.apache.cordova.FilmsQuiz
package:/data/app/org.apache.cordova.FilmsQuiz-2.apk

2 . Ahora que ya tenemos el paquete procederemos a bajarlo

C:\ADT\sdk\platform-tools>adb pull /data/app/org.apache.cordova.FilmsQuiz-2.apk
5246 KB/s (14092965 bytes in 2.623s)

3. Con la aplicación dex2jar podemos pasarlo a jar, para así poder leer su código:

C:\ADT\dex2jar-0.0.9.15>d2j-dex2jar.bat org.apache.cordova.FilmsQuiz-2.apk -o org.apache.cordova.FilmsQuiz-2.jar
dex2jar org.apache.cordova.FilmsQuiz-2.apk -> org.apache.cordova.FilmsQuiz-2.jar

filmquiz7

Como veis el programa es fácilmente legible, por desgracia no tengo tanto tiempo ni conocimientos como para encontrar algo útil.

4. Por último utilizando apktool, podemos extraer todos los archivos del instalador:

$ apktool decode org.apache.cordova.FilmsQuiz-2.apk FilmsQuiz
I: Baksmaling...
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: 
I: Copying assets and libs...

Et voilà !

filmsQuiz8.fw

En la carpeta assets\www\data\ podemos encontrar toda la información de las películas, así como sus dibujos.

Con la siguiente herramienta de expresiones regulares y con esta expresión: "id":"CH_([\w]+)?"

Sacamos rápidamente la siguiente lista de películas.

Advertisements

2 Comments on “Cheating on android”

  1. xavi says:

    Molt bé!!! a veure quan pujes la teva app 🙂
    apa crack

  2. Hola. Mi empresa creo este juego por la iniciativa de unos programadores y con el objetivo de crearnos nuestras primeras experiencias en desarrollo de aplicaciones móviles.
    Nos parece muy interesante tu trabajo. Buscamos permanentemente personas para incorporarlos a nuestra empresa. Generalmente solo contratamos por referencia, pero tus méritos sirven de carta de presentación .
    Si te interesa saber mas, envíame tu cv

    Javier


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s