No suelo gastar mucho tiempo con juegos en el móvil pero he de reconocer que siempre acabo enganchándome a alguno. En esta ocasión tengo bastante vicio con TriviaDos, un trivial de toda la vida por turnos para jugar en línea contra un contrincante remoto, ya sea conocido o aleatorio. Así que, aparte de jugar, gano algo de culturilla general... ;)
Hace unos días me llamó la atención el anuncio del primer torneo de TriviaDos que ofrece premios a los ganadores, ¡los dos primeros valorados en 1000€!.
Por un momento pensé en apuntarme pero, vistas las estadísticas de los jugadores top durante los primeros días, sus porcentajes de acierto en cada categoría y el número de partidas de cada uno, simplemente se me quitaron las ganas...
Sabía que un ser humano con un coeficiente intelectual normal y el tiempo limitado no podría si quiera soñar con clasificarse entre los 100 primeros. Pero, ¿alguien que tuviera conocimientos de seguridad informática podría "hacer trampas" y ganar el concurso?. Después de un vistazo a la aplicación de Android parece que sí...
Lo que os voy a mostrar en esta entrada es simplemente cómo modificar TriviaDos para ganar unos segundos de tiempo para responder a cada pregunta. Os dará una ligera ventaja pero no será determinante para que superéis a todos los rivales.. o eso espero. No me hago responsable de su uso ni de cualquier otra modificación derivada. Sólo espero que los dos chicos de Pandereta refuercen la seguridad de su aplicación. Vamos a ello...
Lo primero que haremos será descargar el APK de la aplicación desde el Google Play, por ejemplo con Real APK Leecher:
Para los no iniciados, decir que el Formato APK es una variante del formato JAR de Java y se usa para distribuir e instalar componentes empaquetados para la plataforma Android. Básicamente es un comprimido ZIP que puede ser abierto con herramientas como 7-Zip, Winzip, WinRAR o Ark. En nuestro caso abrimos el fichero TriviaDos.apk con 7-zip y extraemos el fichero classes.dex:
En Android, el código fuente de Java también se compila en archivos .class, pero después mediante la herramienta “dx“ son convertidos a un único archivo dex (Dalvik Executable) que se ejecuta en la máquina virtual Dalvik. Este fichero se puede descompilar por ejemplo con las utilidades del proyecto smali:
Ahora toca revisar la estructura de directorios y ficheros .smali con los opcodes de Dalvik. Si lo prefieres puedes transformar el fichero ejecutable de Dalvik a un Jar y descompilar los .class a .java para ver un poco a más alto nivel. Para nuestro objetivo bastará con buscar constantes relacionadas con funciones como CountDownTimer y variables bautizadas con la palabra "tiempo" o similar. Si nos centramos en el diálogo de las preguntas daremos con ello. Simplemente, en los ficheros TrivialPreguntnasDialog*.smali sustituiremos:
Es decir, sin ni siquiera modificar el tipo hemos cambiado el valor de tiempoPregunta al doble y el valor de tiempoPregunta por el máximo posible para 16 bits. Por tanto hemos pasado 15 a 30 segundos para responder cada pregunta.
Una vez modificado el valor de las variables tendremos que recompilar todo el código con smali y generar un nuevo fichero classes.dex:
Después con 7-zip volveremos a añadir o sustituir el fichero dentro del paquete TriviaDos.apk:
No obstante, para instalar el apk con el nuevo classes.dex, tendremos que firmarlo pues recordemos que los archivos (apk, zip) tanto actualizaciones como aplicaciones y firmwares solo pueden instalarse en los móviles Android si han sido previa y debidamente firmados. Es una medida de seguridad que otorga validez al archivo aunque en la práctica es más un requisito que una garantía.
Eso sí, necesitaremos antes generar un par de claves pública/privada mediante OpenSSL. En Windows simplemente descargamos el paquete y lo descomprimimos, por ejemplo en c:\openssl. Dentro del directorio ejecutaremos:
Ahora para firmarlo usaremos la herramienta SignApk.jar incluida en el Android platform source bundle, y ejecutaremos:
Por último desinstalamos el apk original e instalamos el nuestro. Y comprobamos el tiempo observando la barra de progreso ;)
Hace unos días me llamó la atención el anuncio del primer torneo de TriviaDos que ofrece premios a los ganadores, ¡los dos primeros valorados en 1000€!.
Por un momento pensé en apuntarme pero, vistas las estadísticas de los jugadores top durante los primeros días, sus porcentajes de acierto en cada categoría y el número de partidas de cada uno, simplemente se me quitaron las ganas...
Sabía que un ser humano con un coeficiente intelectual normal y el tiempo limitado no podría si quiera soñar con clasificarse entre los 100 primeros. Pero, ¿alguien que tuviera conocimientos de seguridad informática podría "hacer trampas" y ganar el concurso?. Después de un vistazo a la aplicación de Android parece que sí...
...Un Quesito para atraerlos a todos y atarlos en las tinieblas. |
Lo primero que haremos será descargar el APK de la aplicación desde el Google Play, por ejemplo con Real APK Leecher:
Para los no iniciados, decir que el Formato APK es una variante del formato JAR de Java y se usa para distribuir e instalar componentes empaquetados para la plataforma Android. Básicamente es un comprimido ZIP que puede ser abierto con herramientas como 7-Zip, Winzip, WinRAR o Ark. En nuestro caso abrimos el fichero TriviaDos.apk con 7-zip y extraemos el fichero classes.dex:
En Android, el código fuente de Java también se compila en archivos .class, pero después mediante la herramienta “dx“ son convertidos a un único archivo dex (Dalvik Executable) que se ejecuta en la máquina virtual Dalvik. Este fichero se puede descompilar por ejemplo con las utilidades del proyecto smali:
java -jar tools/baksmali.jar -o decompiled/classout/ input/classes.dex
Ahora toca revisar la estructura de directorios y ficheros .smali con los opcodes de Dalvik. Si lo prefieres puedes transformar el fichero ejecutable de Dalvik a un Jar y descompilar los .class a .java para ver un poco a más alto nivel. Para nuestro objetivo bastará con buscar constantes relacionadas con funciones como CountDownTimer y variables bautizadas con la palabra "tiempo" o similar. Si nos centramos en el diálogo de las preguntas daremos con ello. Simplemente, en los ficheros TrivialPreguntnasDialog*.smali sustituiremos:
.local v6, tiempoFinal:D
const-wide/high16 v0, 0x4034
por .local v6, tiempoFinal:D
const-wide/high16 v0, 0x7530
Y .line 29
const/16 v0, 0x3a98
iput v0, p0, Laul/irm/triviados/dialogos/TrivialPreguntasDialog;->tiempoPregunta:I
por .line 29
const/16 v0, 0x7FFF
iput v0, p0, Laul/irm/triviados/dialogos/TrivialPreguntasDialog;->tiempoPregunta:I
Es decir, sin ni siquiera modificar el tipo hemos cambiado el valor de tiempoPregunta al doble y el valor de tiempoPregunta por el máximo posible para 16 bits. Por tanto hemos pasado 15 a 30 segundos para responder cada pregunta.
Una vez modificado el valor de las variables tendremos que recompilar todo el código con smali y generar un nuevo fichero classes.dex:
java -Xmx512M -jar tools/smali.jar -o output/classes.dex decompiled/classout/
Después con 7-zip volveremos a añadir o sustituir el fichero dentro del paquete TriviaDos.apk:
No obstante, para instalar el apk con el nuevo classes.dex, tendremos que firmarlo pues recordemos que los archivos (apk, zip) tanto actualizaciones como aplicaciones y firmwares solo pueden instalarse en los móviles Android si han sido previa y debidamente firmados. Es una medida de seguridad que otorga validez al archivo aunque en la práctica es más un requisito que una garantía.
Eso sí, necesitaremos antes generar un par de claves pública/privada mediante OpenSSL. En Windows simplemente descargamos el paquete y lo descomprimimos, por ejemplo en c:\openssl. Dentro del directorio ejecutaremos:
openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -config c:\openssl\openssl.cf -out request.pem
openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt
Ahora para firmarlo usaremos la herramienta SignApk.jar incluida en el Android platform source bundle, y ejecutaremos:
java -jar signapk.jar certificate.pem key.pk8 TriviaDos.apk TriviaDos_modificado.apk
Por último desinstalamos el apk original e instalamos el nuestro. Y comprobamos el tiempo observando la barra de progreso ;)
jaja..! Grande Vicente! Saludos! ^^
ResponderEliminarA todo esto, me ha salido en el captcha la palabra "Vice". xD Pero para vicios el "4 Fotos 1 Palabra". Lol!
ResponderEliminarhttps://play.google.com/store/apps/details?id=de.lotum.whatsinthefoto.es
Ke bueno! Tenía pensado echar un vistazo a este juego, te me has adelantado jejeje. Muy buen post e investigación Vicente.
ResponderEliminarMuchas gracias!! esto es sólo una ínfima muestra de lo que se puede hacer con la aplicación y la importancia que tiene tener en cuenta la seguridad, más aún cuando hay un concurso de por medio...
ResponderEliminarSaludos
Vicente eres un crack , pero triviados ya me aburre aora juego otro parecido que se llama Preguntados de Etermax .. En iphone haber si se te ocurre algo vale saludos
EliminarEn securityartwork no dijeron que era triviados, pero ellos ya hablaron de este problema hace algunos días...
ResponderEliminarSaludos
si lo acabo de verla, no sé como se me pasó leerla antes :'(
ResponderEliminaryo creo también que es Triviados pero, si contactaron con los desarrolladores de la aplicación, ¿por qué no usaron ProGuard u otra técnica para al menos ofuscar el código?
no encuentro la primera linea que hay que cambiar ;) la segunda si la he encontrado^. Sera que como lo he actualizado hace poco ha cambiado el archivo? de todas manera gracias por el aporte.
ResponderEliminarun saludo
puedes subir el modificado?
ResponderEliminarGracias
Siiii que buena idea sube el programa hackeado plis^^
ResponderEliminarun saludo
recientemente modificaron la versión y tengo que sacar un rato para echarle un vistazo :P
ResponderEliminarhola otra vez^^
ResponderEliminaral final cambie otra linea por probar
^^ y me surge otro problema. me da error cuando quiero reempaquetar.
C:\Documents and Settings\Shabda\Mis documentos\Downloads\TriviaDos>java -Xmx512
M -jar tools/smali.jar -o output/classes.dex decompiled/classout/
Error: Unable to access jarfile tools/smali.jar
que hago mal?
gracias un saludo
hola shabda, parece que el problema es que el fichero jar de smali no se encuentra en la ubicación que indicas...
ResponderEliminarpues no lo entiendo tg todos los archivos en la ubicacion de hecho he podido desempaquetar el archivo pero empaquetarlo tras su modificacion no me deja.
ResponderEliminarun saludo
Vicente, ¿puedes poner un enlace con el triviados modificado?
ResponderEliminarel "triviado modificado" en el post ya corresponde a una versión anterior y no te dejará jugar porque al iniciar la app lo primero que se comprueba es si es la versión actual. Se puede falsear la versión? se puede modificar también el tiempo en la última versión? pues no lo he probado, pero ahí tienes la semilla para hacerlo tú mismo....
ResponderEliminarTe agradezco tu rápida respuesta,pero eso que propones se escapa de mis posibilidades, es como si me hablaras en chino,y yo fuera sordo y mudo.
ResponderEliminarTendrías que hacer un tutorial para torpes y aún así no te garantizaría que lo consiguiera.
Gracias de todas formas.
pues siento no poder ayudarte. El objetivo de este post es el estudio de la ingeniería inversa de las aplicaciones en Android, no facilitar directamente una aplicación para hacer trampas sin ni siquiera entender lo que hace...
ResponderEliminar"Regala un pescado a un hombre y le darás alimento para un día, enseñale a pescar y lo alimentarás para el resto de su vida." ;)
Que triste ganar a base de trampas.
ResponderEliminarDemuestra inteligencia cero.
Y todavía los que ganan asi, se sentiran orgullosos...
Creo que la idea era enseñar como hacer una modificación de una aplicación de Android, con un ejemplo. Si la cuestión hubiera sido hacer trampas nada más, hubiera subido la aplicación modificada y Santas Pascuas. (Y además de tramposos no hubiéramos aprendido nada).
ResponderEliminargracias por el capote Juancho. En Internet hay gran cantidad de mods de juegos que ofrecen a quien lo usa hacer trampas sin más. Aquí no, aquí el objetivo es aprender cómo se realizan para ver el funcionamiento y las debilidades de las aplicaciones en Android...
ResponderEliminarHola, yo quisiera hacer trampa con la aplicacion dominoes, lo tengo descompilado, pero no se respecto a las modificaciones necesarias en el smali para despues compilar y firmar. Es decir, quiero modificar la jugada cuando de tantas pone como puntuacion cero... mas detalles en mi correo
ResponderEliminargallito.loquito.2012@gmail.com
Gracias
Pierde mucha emoción haciendo trampas en Triviados
ResponderEliminarQUE PENA ME DAIS....JUANCHOS Y DEMAS....BUSCANDO LAS MANERAS DE NO SEGUIR EL JUEGO....EXCUSAS PARA EN DEFINITIVA,...no PERDER......QUE ES LO QUE OS JODE....ACOMPLEJADOS , DIRIA YO.....PERDER EN UN JUEGO....QUE DISGUSTO,...YA PODRIAIS PERDER EL TIEMPO BUSCANDO ENFERMOS EN LA RED......
ResponderEliminarte equivocas @anonimo. Estamos mostrando una manera de hacer trampas para que los desarrolladores y el resto de jugadores tomen conciencia de la importancia de la seguridad también en juegos. Si quisieramos hacer trampas para ganar simplemente no te explicaría el proceso en un blog...
ResponderEliminarUna pena que algunos se fijen en el dedo cuando les señalas a la luna.
ResponderEliminarPor otro lado,impresiona que sea tan sencillo hackear la seguridad de las apps.
Gran trabajo
gracias @Principe Aaloy, no obstante no tengo iPhone así que seguiré investigando Android :-D
ResponderEliminarNadie te obliga a jugar a este juego. Hay juegos de coches, de disparos. Si no sabes no juegues. Pierdes mas tiempo en hacer trampas q en buscar un juego q se adapte a tus posibilidades. Hay muchas formas de hacer tampas aquí. La tercera forma distinta q oigo, y lo q me da q pensar es q cuando me ganan es pq estan haciendo trampas y se me quitan las ganas
ResponderEliminarHe aquí un documento que prueba la existencia de las trampas
ResponderEliminarhttp://www.youtube.com/watch?v=eGearF4bvwo
Alguien lo hizo a lo bestia en el GSICKMINDS, e incluso os mencionaron a vosotros y a los de security-art-work
ResponderEliminarHola!!!, una pregunta. Por qué antes subia el porcentaje en 2 ó 3 decimas por partida ganada y ahora solo 1?.
ResponderEliminarSi tengo el 71% y para llegar al 72% tengo que
ganar 100 partidas y no perder ninguna o me
quitan 3!.
Alguien sabe de esto?. Gracias!
Hay que seguir investigando el tema, porque a mi tambien me da varios errores antes subia mas el porcentaje y ahora solo sube 1, un saludo!
ResponderEliminarHay que ver, así es que no ganaba yo nunca una partida! Contra esto no ganas ni de broma... Y yo pensando que era lag.
ResponderEliminar