Buenas a todos! En este nuevo post vamos a ver cómo sería posible ganar
siempre al juego "Candy Crush" en Facebook y vamos a entender cómo
funciona esta aplicación por dentro. Hace tiempo leí un artículo sobre
esto que después he ido alargando y descubriendo más cosas que se
basaban en lo mismo. El artículo sobre el que me base es: http://www.stavros.io/posts/winning-candy-crush/
Bien lo primero, ¿qué 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 más hagas mejor, y para ello tienes una serie de vidas que se
van recuperando (cada partida gasta una vida), y además 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...
Así que vamos a empezar, para poder realizar todo es necesario contar
con un proxy, yo al igual que en el artículo 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.
Lo primero que tenemos que hacer es descargar el proxy de la web que
sale en la imagen, una vez hecho esto lo arrancamos y directamente se
pone a la escucha de todas las peticiones como podemos observar...
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)...
Una vez hecho esto comenzara a capturar todos los paquetes que enviemos y recibamos de dicho dominio.
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 está mandando información como la cantidad de
vidas que tenemos y demás...
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 si no se
produce un error, pero veremos luego como automatizarlo ;)! Como vemos en la
siguiente imagen al cambiar el 5 por 55 vemos que...
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.
Como vemos el juego se ha vuelto mucho
más sencillo, pero... Aun tenemos que estar analizando las peticiones y
respuestas del servidor, pues vamos a ver cómo 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...
Tras hacer esto nos aparecerán las
opciones de re-escribir que tiene el proxy...
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 número de vidas que tengamos, así siempre tendremos entre 50 y
55, es decir ilimitadas ;)
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...
Hasta aquí llega esta PoC donde hemos
visto como sería 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 asi que… A probar ;)
Un saludo,Fuente: Flu-project
0 comentarios:
Publicar un comentario