Blog

Hack the Game – Papa Pear bajo HTTPS (Facebook)

Buenas a todos! En este nuevo post de la serie “Hack the Game” vamos a ver como podríamos hacer el juego “Papa Pear” (De los mismos que Candy Crush) mucho mas sencillo modificando como siempre las peticiones que mandamos y las respuestas que nos genera el servidor. En este caso y debido a que ya me lo han pedido unos cuantos, he decidido coger este juego porque todas las comunicaciones con el servidor iban por HTTPS y quiero explicar como seria el proceso en este caso.

Para poder realizar de forma correcta la interceptación de los datos es necesario que instalemos los certificados de Charles (El proxy que estamos utilizando durante toda la serie). Esto se hace de forma distinta según el navegador, personalmente creo que lo mas sencillo es sin duda hacerlo con Firefox, pero para gustos los colores así que aquí os dejo el enlace donde tenéis los pasos que debéis seguir para cada navegador.

En caso de que no instaléis nada únicamente veréis algo parecido a los siguiente…

papapear_0

 

Lo que ocurre es que al ir por HTTPS va cifrado, y el proxy no es capaz de entender los paquetes, por ello deberemos de instalar como he dicho antes el certificado de Charles para que nos permita interceptar las comunicaciones ya que aunque el trafico seguirá siendo HTTPS, en este caso estará utilizando el certificado del propio proxy y por ello sera capaz de entender los paquetes.

Es fácil ver cuales serán los dominios que estemos interceptando con el proxy mediante SSL debido a que en estos no saldrá el puerto 443 al final, sencillamente https:// como vemos en la imagen a continuación, donde estamos interceptando papapear.king.com…

papapear_1

 

Bueno, ahora que hemos visto porque si no instalamos los certificado de Charles no podemos interceptar trafico HTTPS, y como diferencia este del que si que estamos interceptando mediante el proxy vamos a ver como se instalaría para el caso de Firefox, que como he dicho es el mas sencillo…

Para ello sencillamente tendremos que descargarnos el Add-On de la web de Charles, concretamente de aquí.

papapear_2

 

Después tendríamos que pulsar sobre la opción de instalar los certificados como se muestra a continuación…

papapear_3

 

Una vez echo esto cuando nos intentemos conectar al juego mediante Facebook o a cualquier otra aplicación por primera vez nos avisara de que el certificado no es confiable (Lógicamente no esta firmado ya que es del propio proxy), le damos a aceptar y confiar en dicho certificado y ya podremos interceptar las comunicación por HTTPS que queramos.

Para poder interceptar una conexión que va por HTTPS una vez hayamos echo todo lo anteriormente explicado únicamente tendremos que pulsar sobre la opción “SSL proxying” como se muestra a continuación (aparte lógicamente de poner el breakpoint para que nos permita modificar las peticiones)…

papapear_4

 

Una vez echo esto ya estamos en plenas condiciones de interceptar todo el trafico que queramos por HTTPS como si fuera por HTTP (En cuanto a que vemos los parámetros).

Vamos a ver ahora que la seguridad del juego “Papa Gear” en Facebook es prácticamente idéntica a la de “Farm Heroes”, que como se vio en el anterior post era nula. Pero ademas de tener exactamente todos los mismos fallos que el anterior (Posibilidad de tener vidas infinitas, bonus infinitos, desbloquear cualquier bonus…) tiene otros que también son interesantes y muy posiblemente pueda ser también aplicados a otros juegos como el Farm Heroes, aunque no me ha dado tiempo a probarlo.

En este caso vamos a ver como podríamos desbloquear el nivel que queramos y conseguir la puntuación que queramos en dos niveles SIN NECESIDAD TAN SIQUIERA DE JUGAR!

Lo primero, veamos como seria posible desbloquear el nivel que quisiéramos…

Para ello deberemos jugar cualquier nivel hasta pasárnoslo para generar la petición (Que puede variar según sea un nivel que ya nos habíamos pasado o no pero que para esto no nos importa) similar a la que vemos  a continuación…

[{
 "id": 0,
 "method": "CustomEventTrackingApi.trackFrameRate",
 "params": [{
 "gameStartTimestamp": 1391763495805,
 "ms_0_5": 22,
 "levelId": 11,
 "ms_5_10": 102,
 "ms_10_15": 796,
 "ms_15_20": 3157,
 "ms_20_25": 1220,
 "ms_25_30": 344,
 "ms_30_35": 76,
 "ms_35_40": 42,
 "ms_40_45": 16,
 "ms_45": 55
 }]
}, {
 "id": 1,
 "method": "StarLevelApi.synchronizeLevels",
 "params": [
 [{
 "score": 94470,
 "unlockTime": 1391695909869,
 "id": 11,
 "stars": 3,
 "locked": false
 }]
 ]
}, {
 "id": 2,
 "method": "StarLevelApi.synchronizeLevels",
 "params": [
 [{
 "score": 0,
 "unlockTime": 1391763600380,
 "id": 12,
 "stars": 0,
 "locked": false
 }]
 ]
}, {
 "id": 3,
 "method": "BoosterApi.unlockBooster",
 "params": [7604]
}, {
 "id": 4,
 "method": "BoosterApi.unlockBooster",
 "params": [7102]
}, {
 "id": 5,
 "method": "OpenGraphPublisherApi.publishFriendBeaten",
 "params": [{
 "levelId": 11,
 "friendFacebookIds": ["1137495407", "1404056134", "100001800772374"]
 }]
}, {
 "id": 6,
 "method": "StarLevelGameRoundApi.endGame",
 "params": [11, 1391763495805, 94470, 3, 0]
}, {
 "id": 7,
 "method": "CustomEventTrackingApi.trackEndGameRoundEvent",
 "params": [{
 "totalBounces": 54,
 "longestBounceTime": -1,
 "directBucketHits": 0,
 "gameStartTimestamp": 1391763495805,
 "bucketRimHits": 18,
 "levelId": 11,
 "numberOfWallBounces": 13,
 "multiplierHits": 2,
 "wakeUpPegHits": 0,
 "splitPegHits": 0,
 "papaFireHits": 0,
 "papaGrandeHits": 4,
 "bounce50": 0,
 "bounce5BucketEdges": 0,
 "removeAllAcorns": 0,
 "removeAllBabyOnions": 1,
 "removeAllCarrots": 0,
 "initialPears": 16,
 "removeAllChilis": 0,
 "pearsLeft": 3,
 "removeAllMiniChilis": 0,
 "bucketsLit": 0,
 "bothSidesBounces": 0,
 "veggiesCollected": 3,
 "xBallsInPrelitBucket": 0,
 "veggiesToCollect": 3,
 "pinstRemoved": -1,
 "pinsToRemove": -1
 }]
}, {
 "id": 8,
 "method": "OpenGraphPublisherApi.publishCompletedLevel",
 "params": [{
 "score": 94470,
 "levelId": 11,
 "stars": 3
 }]
}]

En la parte que se muestra a continuación es donde se sincronizan los niveles que llevamos y se habré uno nuevo, en este caso he jugado el nivel 11 y por lo tanto se me desbloquearía el 12 lógicamente sin ninguna puntuación ni nada…

papapear_5

 

Pero… Es trivial que en vez de empezar el nivel 12 con 0 empecemos con la puntuación que queramos, para ello solo tenemos que dejar la petición de la siguiente manera…

papapear_6

 

Una vez echo aunque pasa lo mismo que en los anteriores post, y es que hasta que el juego no se vuelva a sincronizar con el servidor no actualizara esos datos, por lo que únicamente tendríamos que actualizar la pantalla para ver que de repente nos hemos pasado el nivel 12 sin ni siquiera haber jugado y ademas con la puntuación que quisiéramos.

papapear_7

 

Para poder desbloquear el nivel que quisiéramos únicamente tendríamos que cambiar el nivel 12 por el 100 por ejemplo, poniendo este como nivel tope de nuestra partida hasta el momento (Aunque no nos desbloqueara los anteriores) como se ve a continuación…

papapear_8_2

 

Vamos a ver ahora como seria posible modificar la puntuación de la partida en la que nos encontramos en ese momento para poder como hemos dicho antes mediante una petición pasarnos dos niveles con la puntuación que nosotros queramos.

Para ello tenemos que mirar muy bien la misma petición que antes, y ver las siguientes partes…

papapear_9

 

 

papapear_10

 

 

papapear_11

 

 

papapear_12

 

 

papapear_13

 

 

papapear_14

 

Como veis, en todas esas partes de la petición aparecen una serie de datos que deberemos cambiar para que la petición cuele como verdadera y podamos ponernos la puntuación que queramos sin necesidad tan siquiera de jugar, y en lo que os debéis de fijar y cambiar (Siempre con el mismo valor) son el “levelId”, “score” y en el id 6, el primer parámetro que pertenece al nivel y el tercero que es la puntuación.

Si lo hacéis podréis poneros la puntuación que queráis, y repetir esta petición las veces que queráis para ir subiendo de niveles, ademas podéis utilizar como hemos visto antes la parte de sincronizacion de niveles que va en la misma petición para poder avanzar 2 niveles con una sola petición.

Esto sin duda es un gran fallo que tiene el juego, ya que ahora si que si podemos hacer lo que queramos. Después hay otros fallos que he omitido como evitar que te quiten vidas y demás porque son triviales en comparación.

Espero que os haya gustado y en dos semana habrá mas 😉

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos


					
					
  1. Ahiezer Alvares
    Ahiezer Alvares02-25-2014

    Realmente sorprendente como la seguridad de los juegos online es nula

Leave a Reply

*

    No Twitter Messages