Blog

Como ganar siempre al Candy Crush en Facebook

Buenas a todos! En este nuevo post vamos a ver como seria posible ganar siempre al juego “Candy Crush” en Facebook y vamos a entender como funciona esta aplicación por dentro. Hace tiempo leí un articulo sobre esto que después he ido alargando y descubriendo mas cosas que se basaban en lo mismo. El articulo sobre el que me base es: http://www.stavros.io/posts/winning-candy-crush/

1

 

Bien lo primero, ¿que es el “Candy Crush”? Pues es un juego al que puedes jugar desde tu cuenta en Facebook o que te puedes descargar para tu smartphone, sincronizarla por ejemplo con Facebook y continuar tu partida. Básicamente el juego trata de hacer combinaciones de colores, cuantos mas hagas mejor, y para ello tienes una serie de vidas que se van recuperando (cada partida gasta una vida), y ademas para cada partida tendremos una cantidad de movimientos máximos. Pero… Descubriremos en este post como hacer este juego muuucho mas fácil para tener resultados como estos…

2

 

Así que vamos a empezar, para poder realizar todo es necesario contar con un proxy, yo al igual que en el articulo que os mencione antes voy a utilizar “Charlie” que nunca lo había probado y la verdad que me ha gustado mucho ya que te saca muy en claro las respuestas del servidor en JSON que es lo que vamos a necesitar.

3

 

Lo primero que tenemos que hacer es descargar el proxy de la web que sale en la imagen, una vez echo esto lo arrancamos y directamente se pone a la escucha de todas las peticiones como podemos observar…

4

 

Como he dicho este proxy tiene una cosa muy cómoda y es capturar las respuestas que nos devuelve el servidor para poder modificarlas, pero para poder capturar los paquetes y poder modificarlos es necesario que pongamos breakpoints en los dominios de los paquetes que queremos interceptar, para ello hacemos lo siguiente sobre el dominio que queramos (En este caso el del juego)…

5

 

Una vez echo esto comenzara a capturar todos los paquetes que enviemos y recibamos de dicho dominio.

6

 

En nuestro caso la mayoría de las veces nos importaran las respuestas del servidor como por ejemplo la siguiente donde podemos ver que el servidor nos esta mandando información como la cantidad de vidas que tenemos y demás…

x

 

Pues bien, este juego lo que hace son peticiones y con las respuestas en JSON introduce los datos en el juego para que nosotros podamos jugar, por lo que es tan sencillo como cambiar el parámetro “lives” dentro de la respuesta del servidor de 5 por ejemplo a 55 y tendremos 55 vidas. Un detalle importante es que deberemos cambiarlo en cada peticiones que tenga el parámetro vidas ya que sino se produce un error, pero veremos luego como automatizarlo ;)! Como vemos en la siguiente imagen al cambiar el 5 por 55 vemos que…

7

 

Pues que tenemos 55 vidas! De esta forma podríamos jugar de forma continua sin necesidad de esperas, pero… El juego seguía siendo un poco aburrido y decidí seguir mirando, tras echar un ojo a las peticiones vi que cuando iniciábamos un nivel nuevo el servidor nos devolvía algunos parámetros interesantes como podían ser la cantidad de colores que había en el nivel, las puntuaciones necesarias para obtener las medallas y algunas cosillas mas, aquí os dejo la respuesta del servidor en un JSON:

{
 "currentUser": {
    "userId": 1660136720,
    "lives":55 54,
    "timeToNextRegeneration": -1,
    "gold": 0,
    "unlockedBoosters": [],
    "soundFx": false,
    "soundMusic": false,
    "maxLives": 5,
    "immortal": false,
    "mobileConnected": true,
    "currency": "EUR",
    "altCurrency": "EUR",
    "preAuth": false
    },
 "levelData": "{\"numberOfStartMovesUntilPiano\":0,\"chameleonCandySpawn\":0,\"pepperCandyMax\":0,\"numberOfPianoStartMoves\":0,\"gameModeName\":\"Classic moves\",\"protocolVersion\":\"0.1\",\"useTotalWeightToTriggerPiano\":false,\"useSplitWeightToTriggerPiano\":false,\"numberOfColours\":4,\"tileMap\":[[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"],[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"],[\"18\",\"18\",\"18\",\"18\",\"18\",\"18\",\"18\",\"18\",\"0\"],[\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"0\"],[\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"0\"],[\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"0\"],[\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"2\",\"0\"],[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"],[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]],\"licoriceSpawn\":0,\"pepperCandyExplosionTurns\":0,\"licoriceMax\":0,\"mysteryCandyMax\":0,\"mysteryCandySpawn\":0,\"scoreTargets\":[750,2200,3700],\"pepperCandySpawn\":0,\"leftWeightToTriggerPiano\":0,\"moveLimit\":11110,\"randomSeed\":1088126,\"isSpecialColorEnabled\":false,\"weightToTriggerPiano\":0,\"chameleonCandyMax\":0,\"isBalanceModeEnabled\":false,\"rightWeightToTriggerPiano\":0,\"maxDiff\":0,\"portals\":[],\"abTest\":\"true\", \"abTestName\":\"Tutorial_1_a_91136\"}\n",
 "seed": 1385815187810
}

 

Pues lo que podríamos hacer seria cambiar “numberOfColours” para hacer que en vez de 6 colores nos aparecieran 3 o 4, por otro lado podríamos modificar el “moveLimit” para que en vez de tener solo 10 movimientos podamos tener como vemos en la petición 110. Si modificamos estos parámetros comprobamos que en las pantallas realmente tenemos los colores que queramos y con la cantidad de movimientos que queramos.

8

 

Como vemos el juego se ha vuelto mucho mas sencillo, pero… Aun tenemos que estar analizando las peticiones y respuestas del servidor, pues vamos a ver como podríamos automatiza esto mediante el proxy “Charlie” para que no tengamos que hacer absolutamente nada aparte de encenderlo y “jugar”.

Para ello necesitamos habilitar la opción “rewrite” del proxy…

9

 

Tras hacer esto nos aparecerán las opciones de re-escribir que tiene el proxy…

10

 

Para poner una regla de re-escritura tendríamos que seleccionar “Add”, darle el nombre que queramos, y a continuación definir como vemos en la imagen la regla que queramos sobre escribir, en mi caso cuando las vidas sean -1 que las sustituya por 1 por lo que nunca llegaremos a tener 0 vidas, por otro lado siempre le podríamos poner un 5 delante del numero de vidas que tengamos, así siempre tendremos entre 50 y 55, es decir ilimitadas 😉

11

 

Y de igual forma podríamos sustituir los colores y un largo etc que dejare que busquéis vosotros ya que solo hay que hacer exactamente lo mismo que hemos dicho hasta ahora…

12

 

Hasta aquí llega esta PoC donde hemos visto como seria posible cambiar algunos de los parámetros, aunque si probáis veréis que es posible hacer mucho mas como cambiar el tipo de partida, que podemos ponernos la puntuación que queramos al terminar la partida modificando la petición, etc… Pero eso os dejo a vosotros probar!

Espero que os haya gustado y que hayáis visto como es posible modificar la información en aplicaciones de este estilo, ya que he estado investigando y ni mucho menos es el único juego/app que lo hace de esta forma 😉

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

  1. Javi
    Javi12-05-2013

    No conocía Charles… Lo probaré!!!!

  2. Santeador
    Santeador12-13-2013

    Hola,

    Perdón por la pregunta de novato, pero… ¿Cuándo activas el rewrite y creas la sustitución de las variables, sigues dejando conectado el breakpoint? Porque me sigo necesitando hacer el “execute” en cada petición para que cargue el juego y aún así, algo me he dejado porque no logro falsear las vidas antes de empezar a probar otras variables…

    Cuando creas la regla con body, sólo hay que poner “lives”:-1 y “lives”:1 en sus respectivos lugares y listo? ¿Podrías poner la captura de ese paso en el tutorial?

    Muchas gracias por tu tiempo, un saludo.

  3. Santeador
    Santeador12-13-2013

    Nada, solucionado.

    Había puesto la modificación en el “request” y no en el “response”. Lo dicho, error de novato.

    ¡Mil gracias por ayudarme a aprender!

  4. Han
    Han06-04-2014

    Lo probé y hoy ya no funciona xD
    pero me sirvió mucho, aprendí bastante 🙂

Leave a Reply

*

    No Twitter Messages