Querido Diario…

Desperté durante la noche, no sabía exactamente que hora era. Había soñado la Villa Navideña en Mexicali, con renos; y después una escena muy extraña sobre el Krampus, la versión antagónica de Santa Claus. Después estaba en casa, escuchaba a mi mamá llamarme, pero no había electricidad, sólo veía la luz colarse por las ranuras de las puertas de madera… y desperté…

Tenía las manos frías del miedo, y el dolor en la garganta que no me había dejado desde que me metieron el tubo en la garganta en el hospital. Saqué el celular de debajo de la almohada, y me detuve antes de escribir; no había a quién.

Sobre el escritorio no estaba mi computadora, estaba la computadora que sonaba a turbina de avión y tenía muchos focos de colores. Entonces recordé que tenía un banco que hackear.

No tenía nada mejor que hacer, incluso, no tenía ni siquiera ganas de pensar en escapar. Al menos, aquí estaba ocupado en algo; y con la leve posibilidad de que al fallar, tal vez rompiesen mi maldición. Me puse de pie y fui al baño. Al volver, tome la computadora y me fui a la sala. Sabía que de todas formas estaría rodeado de seguridad, a la señora brasileña, no le importaría si me iba a un sito con más luz.

Lo primero que se me ocurrió fue buscar algo en el código fuente que me llevase a explotar la aplicación. Así que decompile la aplicación:

$ apktool d AppBank.apk -o appbank

Como, mencioné antes, el AndroidManifest.xml es un archivo muy importante, porque contiene el nombre del paquete, actividades, servicios, broadcasts, receivers, permisos de uso e información de librerias externas. Podemos buscar esta información haciendo uso de un grep:

$ less AndroidManifest.xml | grep "package"

Una vez que lo hayamos encontrado, podremos navegar el directorio en donde se encuentra el código fuente de la aplicación: /smali/jakhar/aseem/appbank

Aquí ya se puede explotar el código, y encontraremos algunas cosas que vienen en texto claro e incidicios del funcionamiento, pero para ser honestos ¿quién lee MSIL?, lo mejor es decompilar:

$ ./jadx appbannk.apk -d appbank_d

Se ven muchos errores, pero no importa, esos warnings en su mayoría son cosas que no encuentra el decompilador, como librerias. Ahora si, «cd appbank_d» y podemos empezar a explorar el código en claro.

Cuando uno está del lado del atacante, es más sencillo hacer un análisis de una aplicación; podemos pasar mucho tiempo, cuando uno está del lado que defiende, es más conveniente hacer detecciones rápidas. Es cuando me gusta usar SourceTrail.

SourceTrail importa toda la estructura de una aplicación, y nos muestra flujos, métodos, clases. De esa forma, podemos tener una idea más o menos genera de como funciona, y hacer búsquedas más sencillas. Incluso se puede conectar con un IDE, pero para eso se tiene que tener el proyecto bien armado o sino sólo nos encontraremos relaciones rotas.

Lo primero que hago cuando reviso código es buscar clases que suenen interesesantes, tratandose de un banco «MoenyDispatcher», «TokenAuthentication», «TransactionDispatcher», «Swift», «XSSWrapper», suenan bien.

En el caso de Android, también es importante tener en cuenta métodos que usen Android Native Library (JNI). JNI es algo que se encarga de manejar la comunicación entre las librerias nativas y el código en Java.

Un ejemplo común son los inputs, como este:

Cualquier cosa que leemos, la pasamos a través de una libreria nativa. Si examinamos las librerias, nos encontraremos con esto:

Una lista de las librerias compiladas para diferentes arquitecturas.

Dentro de todo esto a veces nos podemos encontrar información hardcodeada, como claves de cifrado principalmente, pero a veces algo más sensible.

Había un avance, pero no lo suficientemente importante. En realidad, aun no sabía ni siquiera como saltaría de la aplicación móvil, al banco. Me senté un momento en el sofá sólo a pensar, estábamos en uno de los pocos edificios de San José. Me dio algo de sed, dado que era un prisionero, sacaría el mejor partido de mi situación, así que fui hacia la cocina y busqué en el refrigerador algo que beber.

Encontré jugo, no sé exactamente de que era, era algo naranja. Cuando se está en Sudamérica, es difícil saber que estas comiendo. Todas las frutas son deliciosas, y la mayoría de ella no las conocemos en México.

Cerré la ventana y sentí un resplandor de luz azul; era un acuario que dividía una barra entre la cocina y el comedor. Era un acuario marino, pero aun sin nada, me le quedé viendo, recordando cuando extraño tener peces. Recordé cuando alegré dijiste «ella se llama Samantha», un Disco Heckel, que curiosamente resultó si ser hembra:, de los cuatro, Samnatha era mi favorita, sólo porque era tuya.

Mis pensamientos se disiparon cuando escuche su voz.

- Ele ainda não tem nada, dizem que ele está amadurecendo, enquanto ele está todo morto

Mire a un lado, era levemente más alta que yo, de inmediato supe que era familiar de la señora que habla portugués; se parecía en todo, pero varías décadas más joven. Excepto por los ojos, ella los tenía café oscuro. Su adicción al gimnasio se notaba en cada parte de ella, altiva.. tanto que intimidaba.

- Isso não está certo. Desde o primeiro momento, um aquário tem vida - dije, mientras le di un empujoncito para que se asomase al acuario - Você consegue ver esses pelinhos verdes nos corais? São algas, algas verdes. Isso significa que ele está em execução há cerca de uma semana ou duas
- Dois
- Dois - asentí - são algas que se alimentam de fosfatos, fosfatos que existem graças a resíduos de matéria orgânica de algo
- De algo?
- Sim, algo vivo

Mi explicación pareció haberle convencido, nos quedamos los dos mirando el acuario. Hasta que ella me tomo del brazo y me invitó a sentarme en un diván. Abrió el refrigerador, sacó más jugo, se sirvió un vaso y volvió a rellenar el mío.

- Por que você precisa esperar tanto tempo antes de colocar o peixe? - rompió el silencio una vez más
- Eles precisam cultivar várias colônias de bactérias, que destroem os resíduos. Se não fosse o esperado, o lixo envenenaria o peixe
- Eu quero peixe-palhaço. Quais são seus favoritos?
- O peixe Disco, do seu país

De nuevo se quedó en silencio todo el departamento por unos minutos, hasta que ella habló

- ¿Cual es mi país?

Su español era claro, sin acento nasal, de inmediato pude detectar que era su lengua nativa

- Suponía que Brasil, pero ahora... ya no estoy seguro
- Nací en San Paulo, así que supones bien - me dijo mientras extendía su mano - soy Evelyn
- Augusto - respondí el saludo

Nos quedamos otro rato mirando el acuario vació, las ondas de azul neón que se formaban por la corriente del filtro, entonces se levantó y me dijo que la acompañase.

Salimos del departamento, hasta ese momento no había reparado en la altura a la que estábamos, sólo sabía que estábamos en un departamento. Por los corredores había guardias por todos lados, que con sólo verla, inclinaban la cabeza hacía abajo. No sólo tenían mucho poder y dinero, también les tenían un pánico notorio.

Bajamos por el elevador hasta un sótano, allí vi algo que hizo que me diese un vuelco el corazón, de la emoción. Era una sala de tiro.

- Aquí entrenan nuestros guardias - me explicó, mientras me ponía frente a una pared de triplay repleta de armas
- ¿Estas segura?
- Si, te ves de confianza

Tomé una Glock, me puse los aisladores de sonido y disparé. Fue todo en automático, como si fuese algo natural, como si el arma fuese parte de mi, de esas cosas que jamás se olvidan; como andar en bicicleta… bueno, si supiese andar en bicicleta.

Sin embargo al primer impacto algo pasó, a pesar del aislamiento del sonido, sentí un agujero en el estomago. Los siguientes disparos continuaron más complicados. Hasta que mi mano izquierda cedió, mis costillas resintieron los culatazos; pero no lo dejé. Cambié el cartucho y disparé.

Caracas, Moscú, Morelia, Ottawa… una imagen diferente me aparecía en cada disparo; apreté los labios y disparé con más rabia, con más fuerza…

7, 8, 9… cambio…. 7, 8, 9… cambio

Respiré lo más hondo que pude, el olor a pólvora me volvía loco. Me emocionaba, al mismo tiempo que recordaba todas las ocasiones en que lo había olido, los gritos, la sangre, el sufrimiento… aunque me acercó un cartucho más; no pude hacerlo, me retiré.

- Para tu fama, es un resultado un tanto patético - miré el objetivo, tenía razón
- Bastante.... ¿tal vez un 150/300?. Te toca
- Yo no sé

Me parecía extraño, le quité la Glock de las manos, y fui por un Colt 38. Le puse una única bala, la ajuste en el inicio del carrusel y cambié el objetivo.

Le tomé los brazos por detrás, cuidando no tocar de más; no quería recibir una cachetada, o que el disparo terminase en mi; le levanté la barbilla, le dije que pusiese el estomago duro; y jaló el gatillo. Apunto a la cabeza, entró en el cuello… como sea, habría muerto el objetivo.

- Es emocionante
- Si, mientras sean objetivos de cartulina.. cuando son reales deja de ser emocionante
- Mi turno
- ¿De qué? - pregunté confundido
- ¿Quieres salir?, un poco de aire
- ¿Salir a donde? 
- Vamos a un bar, algo... ¿comes ravioles?
- Creo que tu abuela se enojaría un poco
- Nah, mi abuela es dueña de Costa Rica entera, no puedes escapar, ni siquiera podrías tomar un vuelo sin que ella lo autorice
- No se si tranquilizarme o asustarme

Me tomó de la mano y caminamos al elevador, subimos al siguiente sótano y subimos a una Cayenne. Le dio algunas instrucciones al chófer y empezamos a avanzar.

Ahora si, estaba asustado, ni siquiera Don R tenía tanta soltura como esta muchacha.

Cruzamos San José y llegamos a Escazú; apenas bajamos me sentí avergonzado de haber venido en playera y pantalón de mezclilla. Entremos a un restaurante, por fuera se veía más sencillo que cualquiera de la Ciudad de México; pero al entrar me pude dar cuenta que no era cualquier sitio.

La hostes se me acercó y me puso un blazzer.

- Caballero, creo que se sentirá un poco más cómodo
- Gracias, me sigo sintiendo igual de incómodo, pero gracias

Nos dieron la mejor mesa del lugar, lo sé por la regla de «la mejor mesa es desde donde puedes ver a todos, pero no todos te pueden ver a ti»; ella pidió ravioles y me pasó la carta de vinos. Había cosas allí que ni siquiera podría imaginar probar; pero vamos que soy mexicano, un mexicano jamás queda en ridículo.

- Esta botella de la familia Comenge, por favor
- ¿Le gusta la mineralidad?
- Más la acidez - dije, como si supiese de que me hablaban 
- Excelente elección Don Augusto

¿Cómo sabía mi nombre?…. preferí no pensar en eso.

Estaba mudo, no sé si estaba asustado de tal lujo, asustado de que esta muchacha me hubiese sacado de mi prisión, que el mesero supiese mi nombre; o asustado de que al final me dijese que debía de pagar yo.

El mesero sirvió el vino, y se me hizo muy gracioso que me sirviese primero a mi; acepté y nos sirvió a ambos. Levantó su copa para que brindásemos.

Comimos, bebimos, nos mareamos… pedimos una botella más. Y al final, me comporté como un caballero y pagué. Casi me dio un microinfarto al ver la cuenta, pero pagué.

Mientras volvíamos al departamento, vi un grupo de patrullas ir a toda velocidad seguidas de auto verde chillón, no le di mucha importancia.

Al llegar nos sentamos en el sofá, el alcohol había hecho efecto, me sentía muy relajado; borracho alegre. Es lo mágico del vino.

- ¿Te gustó la cena? - preguntó
- Si
- La pasta es mi comida favorita; adoro cuando voy en verano a Sicilia, ¿cual es la tuya?
- Los peneques
- ¿Qué es eso?
- Hum... algo así como una quesadilla rellena de queso panela, pero más gruesa y con caldillo de jitomate
- ¿Qué es una quesadilla?
- Ouuu... creo que es un poco complicado de explicar - estallamos en risas

Entonces, de pronto el ambiente se volvió serio, extrañó; me miro a los ojos, algo pasaba

- Necesito de tu ayuda
- ¿Tú de mi?
- Ayúdame a rescatar a mi abuela - no entendí
- ¿Rescatarla?
- Si, sé que ella no es quién está haciendo todo esto... ella no es así
- Hum... no es por dañar tu imagen familiar, pero... tu abuela me tiene secuestrado, y secuestró a mi amiga antes; y me acabas de decir que es dueña de todo un país
- Lo sé, pero ella no es así, algo.. no sé qué.. es lo que la obliga a hacerlo; sus socios, no sé - las lagrimas empezaron a mojar sus mejillas
- ¿Por qué crees eso?
- Porque esto es tan grande, que no puede ser sólo una persona quién mande, la debieron de amenazar

Me recargue en el sofá, si lo que decía era cierto… no, no, no…. imposible. Ni es EEUU hay relaciones criminales tan complejas.

- Dicen que tu sabes todo de todos; tú puedes averiguar si lo que digo es verdad o no, y si no lo es... 
- No soy el único, sniffear es una habilidad básica de muchas personas
- ¿Una ciudad completa? - objetó... no sabía que responder, todo esto me tomó por sorpresa
- No siempre lo que lees es bueno
- ¿Por qué no?, si puedes saber todo de todos, nadie te puede engañar, puedes saber lo que piensan a tu alrededor y adelantarte a todo
- Hum...

Recordé ese día en el sushi, cuando decidí que jamás volvería a interceptar el tráfico; como esas dos personas se burlaban de mi. Cuando yo ni siquiera sabía quienes eran. Los ojos de Carito cuando leyó aquella conversación que intercepté sólo para mostrarles como funcionaba; como me di cuenta que la gente es mala; como supe que todo había sido planeado…

- No puedo, dije... - mi corazón se hacía un nudo
- Te daré lo que quieras, lo que sea... mi abuelo también me dejó mucho dinero, todo es tuyo si rescatas a mi abuela
- No es por eso, no me interesa el dinero
- Tú eres famoso por hacerle favores a los ricos y poderosos, yo lo sé... ¡ayúdame!, por favor

Dejó de poder contener las lágrimas, me abrazó y no pude más que corresponderle el abrazo.

¿Sniffear de nuevo?, no podía quitarme esa imagen y aunque no pude verles, leer todo eso…

- Oye... - le dije al oido
- ¿Qué?
- ¿Lo qué yo quiera?
- Si, cualquier cosa; lo juro - los sollozos empezaban a calmar
- Tres cosas, primero... quiero mi computadora; tú abuela me la quitó al secuestrarme
- Pero te compró una Alienware Area 51 de $7, 000 USD
- Si, pero... yiuck... Linux, yo uso Apple
- Ok
- Dos... necesito que me ayudes a cuidar de los locos que andan dando balazos por todo San José buscándome, que los entretengan, pero que no les pase nada
- Ok
- y tres... yo te ayudo con tus peces, ¿vale?

El llanto explotó de nuevo, y su abrazo era tan fuerte que sentía sus uñas lastimando mi piel.

Después de un rato el alcohol y las lagrimas la hicieron dormir. La acomodé en el sofá y me fui a la prisión. Alguien tocó a la puerta, era un guardia, me dio mi mochila; mi computadora.

Me senté en el escritorio y voté a un lado la computadora que sonaba a turbina. Sentí en mis manos suaves las delicadas teclas que sólo Apple puede hacer, y me puse a pensar…

Pufff… la señora que habla portugues usa Whatsapp para todo, ¿desencriptar Whatsapp?… hum… el cifrado punto a punto… funciona… pero.. ¿y si manipulo la aplicación de un lado para poder controlar la forma en que la aplicación manda los datos de un lado a otro?.

Cuando se establece la comunicación con Whatsapp web, y leemos el código QR para poder enlazar el celular con el navegador; se generan las llaves privadas.

Intenté ver el flujo para la generación de la imagen con el fin de entender, pero me dolió la cabeza. En general todo se basa en un dato «secret», el cual se comparte para poder compartir la información y la private key para poder cifrar la información de punto a punto. ¡Matemáticas! [inserte aquí emoticón de la cabecita explotando]

El punto es después de ver mucho del tráfico sacando del proxy, se puede sacar las llaves. Lo importante de esto, es que Whatsapo no falló, sino simplemente yo estoy manipulando el comportamiento de la aplicación desde el cliente, en este caso el navegador.

*Probando….*

¡Oh si!

Luego me di cuenta que no era necesario que lo hiciese yo a mano, había una extensión en Burp Suite para poder hacerlo, lo cual lo hacía mucho más sencillo. Podría hacer un MITM interceptar toda la comunicación de Whatsapp y poder obtener las conversaciones de todas las personas en la misma red.

Me conecté a la red… lo deje correr. Pude ver cuando la señora que habla portugues mandó sus primeros mensajes del día… oh diablos, Evelyn.

A varios kilómetros de mi, los muchachos habían encontrado un sitio que parecia sospechoso, entraron y empezaron a catear el lugar en búsqueda de información sobre mi. Sin embargo, cuando todo parecía bien, policías llegaron; lo único que se les ocurrió fue robar un auto verde chillón y salir manejando a toda velocidad.

Todos, casi todos.. pudieron escapar, excepto Chucho… no pudo correr, y fue detenido. Todos el equipo estaba decaído, habían perdido a uno de los más fuertes del equipo. Mientras tanto, seguían sin pistas sobre mi.

Querido Diario…

Puede que sea un bug bounty hunter muy malo, pero si algo puedo hacer, es localizar personas; y como dice la historia, sniffear.

- ¿Glühwein?
- Tú lo serás uno más que yo - lo probé, sabía muy dulce y caliente - ¿por qué traías dos?
- Porque dijiste que estabas a unas calles
- ¿Y me creíste?, alguien normal habría dicho "ajá si, cómo no. Dejado en visto"
- Si algo sé, es que contigo todo puede pasar