Desarrollando un videogame: revision 2

Decidí empezar a diagramar la composición de un negocio donde los usuarios puedan viciarse con videogames, ganando y perdiendo dinero a medida que ganan o pierden.

A diferencia de una sala convencional de azar, donde los usuarios pueden poner fichas a que un valor va a salir o no, los videogames proponen dos cambios cruciales en la mecánica:

No dependen del azar, es posible predecir quien ganará.

El primero es que un usuario no depende del azar! Lo cual ya es mucho! Un usuario puede ganar gracias a su habilidad y sus experiencias previas. Con lo cual, quien más gane, será en mayor medida gracias a su habilidad.

No es necesario la creación de una banca.

Dado que la mecánica de los videogames seleccionados, implican que el usuario perdedor, pierda dinero, a fin de que el usuario ganador, gane, no es necesaria la creación de una banca. El dinero que se usa en la aplicación proviene de los mismos usuarios.

Es muy fácil ganar y perder dinero en el blockchain!

El dinero en blockchain se mueve en verdad muy rápido, es mucho más fácil de ganarlo y de perderlo, incluso las compras, son en verdad, solo algunos clicks y segundos para que el pago se realice y le llegue al vendedor.

A diferencia de las operaciones bancarizadas, el vendedor, recibe su pago ‘acá y ahora’ sin días ni semanas de esperas con el procesador de pagos. La operación pareciera ser como pagar con verdaderas monedas físicas, las cuales son enviadas en segundos, no como balances que demoran en acomodarse.


Recursos

Paso ahora a recuperar algunos recursos ya publicados hace unos días, con aplicaciones open source que podrían ser usadas de base, y solo añadir la magia del blockchain en ellas:

Referencia Nombre Código Demo
#1 Tank Anarchy Source code Demo
#2 Agar.io Source code Demo
#3 Wordchain Source code Demo
#4 Tic-Tac-Toe Source code
#5 Snake Source code Demo
#6 Curvas Source code Demo
#7 Tanks (oldie) Source code Demo
#8 Space Source code Demo
#9 Space 2 Source code Demo
#10 Mozilla BQ Source code Demo
#11 Sli Source code Demo

Una sola unidad para enviar y recibir los pagos:

Reformulé algunas veces el proceso final de creación y las piezas del rompecabezas a fin de eliminar redundancias.

No veo necesidad alguna de que cada videogame realice sus propias operaciones con el dinero y los usuarios. De esa manera una sola db podría almacenar la información y los saldos de los usuarios, los cuales se irían modificando a medida que realizan acciones en las aplicaciones.

Un nuevo usuario, sería válido para cada una de las aplicaciones o videogames publicados, y el mismo, podría recibir un correo cuando un nuevo videogame sea publicado. El mismo usuario serviría para cada una de las aplicaciones y conservaría su saldo en ellas.


Pasos y piezas a crear:

Eliminación de redundancia

Me fue posible imaginar algunas de la cosas necesarias para llevar a cabo el negocio, como ya mencioné, eliminando algunas redundancias, quizás queden más procesos los cuales podrían ser simplificados o eliminados, analicemos:

En la primera ronda sería necesario:

  1. Servidor en linea funcional (AWS).
  2. Creación del operador para usuarios y balances (main backend)
  3. Localizar y descargar videogame open source.
  4. Comprar nombre de dominio, único por aplicación.
  5. Modificaciones en el diseño general de la aplicación.
  6. Conexión del videogame con el main backen.
  7. Evaluación y consumo
  8. Publicidad y promoción
  9. Análisis, correcciones y evaluación de negocio.

Una vez armado el primero

Las cosas se vuelven un poco más rápidas, dado que los primeros 2 pasos son exclusivos para el caso. Donde luego el negocio, quedaría reducido:

  1. Localizar y descargar videogame open source.
  2. Comprar nombre de dominio, único por aplicación.
  3. Modificaciones en el diseño general de la aplicación.
  4. Conexión del videogame con el main backen.
  5. Evaluación y consumo
  6. Publicidad y promoción
  7. Análisis, correcciones y evaluación de negocio.

Los 6 pasos deberían alcanzar, no solo para crear una nueva unidad de negocios, incorporando incluso su propio “procesador de pagos”, sino que a la vez, deberían dar información clara de la performance del mismo: incluyendo las ganancias promedias generadas por cada usuario, y el cac de los mismos.


Cada una de las piezas:

#1 Servidor en linea funcional

Acá no parece ser muy difícil considerar un servicio como AWS. La mayoría de las aplicaciones corren sobre NodeJS, requieren un servidor dedicado, y escalabilidad.

Sobre cualquier cosa, la escalabilidad y la dinámica, de manera de pagar menos dinero al comenzar sin ningún usuario, y luego poder expandir con facilidad los recursos del servidor a medida que la demanda sube.

Las opciones acá consideradas aún son:

  • Amazon web services
  • Heroku
  • Azure
  • Google cloud

Las razones para que la balanza ahora mismo se incline por Amazon, son varias y no dispongo las ganas de analizarlas.


#2 Backend para usuarios y balances

Una aplicación corriendo en el mismo servidor, con la seguridad adecuada, y nunca conservando más de un 10% o 20% del dinero en el mismo.

El backend debería de usar una API para recibir “dialogo de área local” con cada una las aplicaciones armadas. En principio, podría ser creada usando PHP y Mariadb, dada la organización necesaria en la base.

Sin embargo, vale la pena considerar opciones. Quizás se pueda localizar algo más o menos formulado, y funcional ya armado.

De no ser así, no es más que un simple mecanismo de usuarios, con balances que los cuales, en lo que refiere a la versión más básica de la aplicación, solo pueden subir, cuando un usuario decide cargar o descargar su saldo.

Luego la API, se encargaría de hacer las “micro operaciones” demandadas y generadas por las aplicaciones, para lo cual no creo que sean necesarias más de una o dos funciones principales.


#3 Videogame open source.

La manera más simple de achicar la inversión inicial, usando fichines open source de una y sumarles el blockchain. No creo que haya mucho que aclarar acá.

Si la empresa crece como confiamos, llegará el día en que sea necesario o buena idea, la creación de fichines propios hechos a medida. No ahora.


#4 Compra de nombre de dominio

Creo que no es necesario describir el proceso de compra de un nombre de dominio, pero debería de poseer alguna clase de relación con la aplicación o el fichin que se va a asignar al mismo.


#5 Modificaciones en el diseño de la aplicación

Las modificaciones en el diseño de la aplicación puede que sean uno de los procesos más complicados y puedan llevar más horas de laburo.

Se consideran por solo las modificaciones que comprenden al diseño de la aplicación y no a los vinculos a ser realizados con el backend.

Algunos de las incorporaciones necesarias, implican:

  • Hacer que los fichenes corran en full screen.
  • Una barra a la derecha debería de dar un scoring general
  • La barra superior debería llevar:
    • Home
    • Cashier
    • Bankroll
    • Leaderboard
    • Help
    • Usuario y balance
    • Cerrar sesion

Muchos de los gráficos usados en el código open source podría ser reformulado, dándole un lavado de cara a la aplicación.


#6 Conexión del videogame con el main backen

El proceso no debería de ser ni simple, ni demasiado complicado. Es necesario comenzar por definir cuando un usuario va a ganar y cuando un usuario va a perder dinero.

Dado que se va a comenzar solo por videogames MP, las reglas deben ser claras y deberían de anunciarse  en algún lugar previo a comenzar una ronda.

Una vez que se definnan los vinculos de acciones y operaciones con el dinero, las funciones de conexión con la API, como podría ser:

  • 127.0.0.1/backend/index.php?uid=72124&value=+10
  • 127.0.0.1/backend/index.php?uid=98324&value=-10

Los mismos pedidos podrían ser realizados por una función wrapper que podría verse así

  • api_push(72124, +10);
  • api_push(98324, -10); 

Simulando que el usuario 72124 le gana una ronda al usuario 98324, sin pago de comisiones (0% margen).

La comunicación nunca debería de salir de la red de área local por razones de seguridad, por lo que es en realidad el backend en NodeJS, ubicada en el servidor local que se comunica con el backend en PHP en el mismo servidor.

De ningúna manera se deberá procesar un pedido por la API para reducir o subir el dinero de un usuario de no provenir desde si mismo, a excepción de las cargas y descargas de dinero que son realizadas por los usuarios mismos.

En caso de usar PHP, las variables:

$_SERVER["REMOTE_ADDR"]
$_SERVER['HTTP_CLIENT_IP']
$_SERVER['HTTP_X_FORWARDED_FOR']

Deberían de ser analizadas a fin de confirmar que el dialogo es local, previo a realizar cualquier operación. Ahora mismo, considero que el uso de llaves, más allá de las mismas llaves usadas por el HTTPS no deberían de ser necesario, siempre y cuando la comunicación sea local.


#7 Evaluación y consumo

Una vez finalizado cada uno de los pasos, con la aplicación en linea, funcional, con sus gráficos refrescados, es hora de probarla, para hacer la experiencia lo más agradable, y viciosa posible.

No es recomendable empezar la promoción sin haber llevado al máximo el proceso de evaluación. La aplicación se debería de probar varias veces por un grupo de usuarios conocidos, quienes puedan informar con sinceridad sobre su experiencia. Haciendo las modificaciones necesarias después de cada análisis en base al feedback de los usuarios.

Es probable que sea posible conseguir usuarios de prueba en los foros.


#8 Publicidad y promoción

Hecha la prueba creo que la promoción y publicidad es crucial para el negocio, creo que lo más recomendable, sería realizar un poco de “spamming” en comunidades del palo.

De donde sacar los usuarios, enumeración de recursos:

  • https://www.bitcointalk.org
  • https://www.bustadice.com
  • https://www.bustabit.com
  • https://www.bitsler.com
  • https://www.fortunejack.com
  • https://www.luckygames.io
  • https://www.primedice.com
  • https://www.fairlay.com
  • https://www.satoshidice.com
  • https://www.coinroll.com
  • https://www.777coin.com
  • https://www.swcpoker.eu
  • http://luckyb.it
  • https://duckdice.io/

Habiendo finalizado con los recursos creo que por ahora no me queda nada sin mencionar. Los pasos deberían de llevarse a cabo uno por uno, asegurándose de que las bases vayan quedando siempre sólidas.

Casino vs Keras: creación de una red LSTM.

Prediccionador 6

Las primeras 5 versiones fueron eliminadas/ no consideradas.

Ronda número 6 queriendo ganarle al casino usando AI. Para ser más específico una RNN creada por unidades LSTM.

Dado que los hechos fueron hace más de un 1 meses, voy a comenzar por el guión:

Parece que la explicación y una breve opinión personal vienen incluídas en el guión! Genial, reciclemos!

*La red del modelo puede no ser la misma a la creada por prediccionador_6 dado los diversos cambios que se fueron realizando en el proceso de creación.


El mecanismo devuelve valores que varian del 5 al 6.

Los valores cercanos al 6 suelen ser más seguros,  sin embargo, el verdadero indicador es si el valor asciende o decae en relación al valor previo.

Si el valor anda en en rangos de 6, y se desplaza hacia el 5, es recomendable no hacer nada, # a la inversa, cuando anda en rangos de 5 y avanza hacia el 6, es recomendable posicionarse.

Las unidades de LSTM suben el valor de prediccion (ynew) cuando consideran que la chance subio, del mismo modo, el valor disminuye, cuando la probabilidad desciende.

Addendum: la variación parece ser relevancia, del mismo modo que el número, quizás sería bueno hacer <ynew_previo – ynew ahora> para que calcule la diferencia.

Se usan los mecanismos del prediccionador 5 buscando mayor performance y se añade inserción de información a mariadb para análisis y revisión.

El modelo señaló como mayores: 979 valores, de los cuales:

  • Valore mayores: 556 | (56,79%)
  • Valore menores: 423 | (43,20%)
  • Diferencia: 133 | (13.59%)

Aclaraciones: al día de la fecha de edición, si bien el modelo logró hacer algunas buenas clasificaciones, al largo plazo, por lo que recuerdo falló.

El modelo, con ayuda del guion clasifico (más allá de que el modelo por si sólo no realiza clasificaciones), 979 predicciones de números mayores a 2 (el volúmen de números que fue clasificado como menores no es mencionado, sin embargo, podría recordar que serían al menos dos veces más).

De las 979 predicciones, el 56,79% fueron válidas, y el 43,20% equivocas, con una diferencia de 133 predicciones válidas, las cuales equivaldrían a la ganancia de 133 unidades.

Si alguien deseara re-evaluar el guión o el modelo creado por el mismo a fin de realizar cambios en el mismo, véase libre de hacerlo.


Download now!


Prediccionador 8

Se realizan varios cambios, pasando a usar un modelo supervisado, y cambiando de manera crucial la forma en la que las unidades de LSTM aprenden. Si mal no recuerdo no fue favorable.


Prediccionador 9

Se crea un modelo supervisado, análogo al prediccionador 8, se cambia la selección realizada a la db, y se modifica el guión a fin de realizar pruebas sobre la información ya guardada en la db, a fines de probar los modelos a mayor velocidad, sin necesidades de esperar a la próxima ronda.

Las pruebas con ai, duraron más de 3 semanas, y sin embargo, creo que podrían haber sido muchísimas más, en especial hacer uso de las redes neuronales LSTM para buscar formas, o figuras, que después podrían haber sido empleadas en las selecciones sobre los mapas de azar.

Valdría la pena profundizar con el análisis. Diversas pruebas realizadas con Orange y R no fueron incluidas dado que se consideraron de menor relevancia.

Creación y análisis de mapas de azar

Aún sigo en la búsqueda de una forma válida de reducir el azar, una insuficiencia del mismo. CWE-331.

Creo que es posible llegar a algún lado, pero más allá de eso, por ahora parece no haber nada más en que ocupar las horas… el mismo proceso de búsqueda emociona un poco!


Veamos un nuevo mapa:

El archivo css al cual hacen referencia:

Creo que ya no es necesario aclarar que no busco diseñar una aplicación, por lo que en verdad, la armonía y organización del código me dan igual.


Visualizando la información:


Simulando las perdidas y ganancias:

Una analogía del buscaminas.

Cada una de las veces que sale un valor superior a 1,000, se arma una selección, la cual en la imagen se ve en amarillo.

Los círculos colorados, corresponden a las selecciones que fallaron, las cuales no dieron en proximidad con ningún valor superior a 1,000.

La simulación de la primera ronda, nos da:

  • 32 grupos perdidos * 56 valores por grupo = 1,792 perdidas.
  • 6 grupos ganados * 1000 de ganancia = 6,000 ganadas.
  • 6 grupos ganados * 56 (perdida máxima de grupo) = 336 perdidas ~
  • Lo cual nos queda en: 3,872 unidades ganadas en 40,000
  • Aproxima a un +10%

Breve análisis del código:

  1. Se selecciona de la db los primeros 40 mil valores.
  2. Lo cual equivale a las primeras 40 mil rondas, vale la pena aclarar.
  3. Lo cual aproximan un 8% a 10% de la información disponible.
  4. Se les asigna el color negro a cualquier valor mayor a 1,000.
  5. Cualquier valor menor a 1,000 queda en blanco.
  6. El primer cuadrado corresponde al primer valor de la base.
  7. La grilla se compone de 700 pixeles de ancho.
  8. Cada linea posee 116 unidades
  9. Siendo la unidad final de la primera fila, la ronda 116.
  10. Cada selección posee 56 valores.

Expandiendo el grupo

Dado que por ahora las conclusiones parecen ser favorables, es hora de probarlo sobre el 100% de la información, lo que componen más de 600,000 rondas en la db.

Para hacer eso, veo dos opciones posibles, usando código, por medio de una selección SQL, o bien, siguiendo por el camino visual y pidiendo el 100% de la información disponible.

Por más obvio que parezca, es más fácil hacerlo por medio de SQL, pero más difícil de visualizar. Por lo que voy a pasar a crear una mapa con los más de 600,000 valores.


Primeros 100,000 valores:

Los primeros 40,000 no se veían nada mal, no? Al expandir un poco el mapa podemos ver como varias perdidas se avalancha sobre los grupos de 56 unidades, y un valor superior a 1,000 que casi, se podría decir que acaricia un grupo muy cercano, de manera que casi sería recomendable cambiar la forma.

Como se darán una idea corroborado que la selección y el mapa no funcionaron, he decidido considerar la prueba como fracasada.

Aunque a la vez, inconclusa, dado que para confirmar al 100% la invalidez, se deberían seguida aún muchos más pasos, comenzando por probar cada uno de los valores, y variar las formas.

Sin embargo, mi opinión personal, es que las probabilidades de que eso funcione de algún modo, acaban de reducirse de manera considerable.


Conclusiones:

Predecible o impredecible? Al día de la fecha, y  considero el mecanismo como impredecible, habiéndolo probado por diversos modos.

Alguna manera de sacar un pequeño margen a favor?

Es quizás, de alguna manera probable, por medio del uso adecuado de la probabilidad y gran información acumulada, alcanzar alguna forma de balance en las probabilidades de ganar, un pequeño margen.

Es posible descargar una copia de la db desde aquí.

Alguna manera de ganar varias veces seguidas o una buena chance de ganar mucho dinero rápido con menos riesgo?

Comenzando a poner fichas una vez que salieron un mínimo de 8 valores menores a 2 en fila, sin números mayores en el medio, y duplicando las fichas por dos cada vez que se pierde, sin fin.

Considerar un mínimo de 12 posiciones: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512  y recuerde que para perder 2es necesario un bankroll de (210 ) -1, lo cual equivale a 1023 unidades.

De modo que si uno deseara ganar un promedio de 10,000 unidades diarias, debería de disponer de 1,023000 BTC disponible de bankroll.

Mi recomendación se basa en que la cadena más larga de números menores a dos en secuencia, observada al día de la fecha es de 19 números menores seguidos, por lo cual:


Comenzando una vez que se hayan acumulado al menos 8 valores inferiores a 2 de forma seguida, con el dinero necesario para duplicar la primera posición (1 unidad) al menos 12 veces en caso de perder, lo cual correspondería a una cadena de 20 unidades seguidas, lo cual, de acuerdo a la db, aún nunca ha sucedido en más de 663061 rondas.


Sin embargo, para ser sincero, el hecho de que no haya sucedido nunca, en mi opinión personal, no implica que su probabilidad sea del 0%, ni que de manera necesaria, su probabilidad sea reducida.

Aquí, vale la pena mencionar dos cosas:

La primera es que una cadena de 19 valores seguidos ya ha sucedido, y que si bien desconozco el generador de numeros pseudorandom usado y la semilla del mismo, diría con mucha seguridad que llegada la hora, el generador es capaz de crear una cadena aún más larga, por lo cual, quizás sea considerable modificar los valores de demora previa y el mismo bankroll disponible.

La segunda, y quizás de mayor relevancia, es que las cadenas mayores a 7, las cuales promedian de 7 a 12, y son el comienzo del mecanismo que menciono, no suelen suceder con mucha frecuencia, por lo cual no se podría esperar ganar más de 10 unidades en un día normal.

Salir una vez alcanzado el doble del dinero inicial, si es que lo ha logrado hacer. La probabilidad de ganar el doble del dinero inicial desde ya no es favorable, por lo cual se puede considerar en menos del 10% de los usuarios, sin embargo vale la pena considerar que muchos no poseen ni idea alguna de como reducir sus riesgos.

No es para nada lógico creer es posible aplicar el mecanismo por siempre, dado que llegada una ronda, el generador romperá su propio record de 19 números inferiores en fila, y creará el próximo, el cual, vale la pena mencionar, no posee necesidad alguna de ser igual a 20, bien podría ser, 21, 22, ó 23.

Qué sucede con las redes neuronales?

Si bien el avance de las redes neuronales es increíble, y en especial algunas ramas como las redes LSTM, una vez más, mis disculpas, parece que aún nadie pasó wikipedia al español….

En mi experiencia no fue posible conseguir más que algunas risas cuando mi ordenador decidió que la opción ideal era poner fichas a favor del casino!

Quizás el día de mañana las redes neuronales sean capaces de desglosar información de una forma que al día de hoy no podamos ni imaginar, sin embargo, por ahora, sin la configuración adecuada, podría asegurarles que no me fue posible conseguir que mis modelos realicen predicciones algo azarosas.

En breve subiré copias de los 3 guiones armados en py, los cuales pueden ser usados, para crear 3 modelos los que a la vez, hacen uso de selenium para observar los valores que van saliendo y realizar predicciones en vivo.

Wisdom of crowd?

Tampoco. Usé una versión del crawler para sacar información sobre cada una de las rondas y el dinero de cada player. Logré comprobar que la mayoría pierde y al igual que su promedio.  Mis disculpas, wikipedia sigue en inglés!

 

Desayunando azar

Equipado con la información de cada uno de los “números ganadores”, o una db con la información de miles de rondas de un casino, es posible realizar diversas queries en búsquedas de secuencias o ordenes en la información.


Analizando el azar.

Sobre George Marsaglia y Diehard

Algunas colecciones o librerías fueron creadas hace algunos años, a fin de analizar secuencias, que a simple observación parecen ser generadas al azar.

Al día de la fecha, no hay disponible información en español sobre las librerías Diehard, ni mucho menos TU01lease “Prueba U. versión 01”, creada por el señor George Marsaglia – de las cuales solo es imposible localizar información en Inglés, Ruso y Japonés.

En lineas generales, dichas librerías, se componen de un grupo de pruebas las cuales hacen posible evaluar la calidad de una secuencia de valores “al azar”. Como sería obvio esperar, las librerías son por lo general usadas para corroborar y verificar secuencias de valores al azar, a fin de crear secuencias más seguras. Del mismo modo, las librerías son capaces de localizar “fallas” o algunas formas en las secuencias dadas.

Sería recomendable que cualquier casino online realice dichas pruebas a fin de corroborar que en verdad no hay riesgo que de un usuario pueda predecir los próximos números.


 

Analizando la información con imágenes

Pasando la información a un mapa

Dado que como seres humanos nos es más simple analizar una imagen que una secuencia de miles de números, decidí usar un mecanismo clásico para visualizar las secuencias, asignando pequeños pixeles blancos a los valores inferiores y pixeles negros a los valores superiores.

De esa manera, pasemos a analizar una secuencia de 100 unidades, donde los valores menores a 2, son considerados píxeles claros, y los mayores a 2, píxeles oscuros:

  • 15.49, oscuro
  • 7.42, oscuro
  • 1.04, claro
  • 2.71, oscuro
  • 1.95, claro
  • 4, oscuro
  • 4.4, oscuro
  • 1.52, claro
  • 28.69, oscuro
  • 7.44, oscuro
  • 1.1, claro
  • 1.1, claro
  • 1.41, claro
  • 1.04, claro
  • 1.66, claro
  • 8.44, oscuro
  • 1.55, claro
  • 2.39, oscuro
  • 2.9, oscuro
  • 1.66, claro
  • 2.7, oscuro
  • 7.53, oscuro
  • 2.04, oscuro
  • 1.97, claro
  • 1.35, claro
  • 1.83, claro
  • 2.63, oscuro
  • 2.81, oscuro
  • 1.06, claro
  • 2.81, oscuro
  • 21.74, oscuro
  • 1.53, claro
  • 2.04, oscuro
  • 3.94, oscuro
  • 1.9, claro
  • 1.26, claro
  • 1.61, claro
  • 1.31, claro
  • 49.3, oscuro
  • 16.9, oscuro
  • 2.05, oscuro
  • 1.85, claro
  • 15.22, oscuro
  • 1.12, claro
  • 1.57, claro
  • 1.51, claro
  • 7.58, oscuro
  • 1.73, claro
  • 1.17, claro
  • 1.46, claro
  • 1.64, claro
  • 6.72, oscuro
  • 18.69, oscuro
  • 8.95, oscuro
  • 19.9, oscuro
  • 2.98, oscuro
  • 54.82, oscuro
  • 3, oscuro
  • 3.06, oscuro
  • 1.66, claro
  • 1.03, claro
  • 1.03, claro
  • 10.57, oscuro
  • 1.4, claro
  • 1.98, claro
  • 1.05, claro
  • 2.44, oscuro
  • 1.29, claro
  • 1.21, claro
  • 3.72, oscuro
  • 6.18, oscuro
  • 4.41, oscuro
  • 1.25, claro
  • 3.25, oscuro
  • 2.46, oscuro
  • 6.75, oscuro
  • 2.11, oscuro
  • 1, claro
  • 1.58, claro
  • 1.02, claro
  • 1.99, claro
  • 2.3, oscuro
  • 2.14, oscuro
  • 3.46, oscuro
  • 1.58, claro
  • 1, claro
  • 1.23, claro
  • 2.16, oscuro
  • 3.63, oscuro
  • 2.43, oscuro
  • 1.71, claro
  • 3.27, oscuro
  • 1.23, claro
  • 2.18, oscuro
  • 1.87, claro
  • 1.76, claro
  • 1.55, claro
  • 2.56, oscuro
  • 1.14, claro
  • 1.66, claro

Por más absurdo que parezca, es posible simplificar esa serie en solo un puñado de pixeles:

El pequeño cuadrado, conformado de 10 unidades de largo por 10 unidades de ancho, brinda información sobre 100 rondas. Es claro que uno podría asignar un abanico de grises, a fin de visualizar aún más información sobre los valores.

 Analicemos ahora un mapa más grande:

La imagen que vemos, posee información sobre 9,000 rondas. De ser de alguna manera necesario, enumeraría cada uno de los números, a fin de que puedan apreciar el largo de la información, y lo muy comprimida que se observa.


Buscando posibles operaciones

Claro perdemos, oscuro, ganamos.

Ahora que ya vimos como podemos condensar la información en un mapa, podemos considerar algunas secuencias para ganarle al dichoso casino.

Lo primero a considerar, que podría ser obvio, es que los espacios claros nos hacen perder, y es en los oscuros donde ganamos.

Dicho eso, asumamos que vamos a realizar una Martingala, solo que en vez de duplicar a la próxima ronda, haremos uso de diversas formas y espacios para colocar las fichas, veamos de nuevo el video del comienzo:

El encuadre: los valores fueron localizados, de manera inicial, y sin demasiado análisis, en una grilla de 600 x 600 pixeles, y cada unidad, fue definida en 6 pixeles, incluyendo los bordes, de manera que cada fila, dispone de 100 valores.

Considerando que hay 100 valores por fila, podemos decir con seguridad que serán 90 filas de 100, generando así el mapa de 9,000 unidades, más allá de lo difícil que pueda ser visualizarlo de esa manera.

La selección: esos pequeños cuadrados de color son el modelo con el cual vamos a realizar la progresión, de manera que si el cuadrado cae sobre un espacio blanco, perdemos, y duplicaremos las fichas para la próxima posición de la selección / el modelo seleccionado.


Revisando el modelo por medio de la imagen:

Es posible revisar el modelo de selección desde la imagen, solo a fines de darnos una idea de como funciona el mecanismo. Es claro que el proceso debe de ser llevado a una función, para luego analizar millones de formas usando ecuaciones sobre la db.

Primera imagen: Las posiciones 1, 2 y 3, de las 9 posiciones que conforman el grupo, al caer sobre casilleros blancos (casilleros inferiores a 2), son consideradas rondas perdidas. La posición se gana una vez que se alcanza la ronda #4, por lo que el final de la secuencia no se lleva a cabo.


Segunda imagen: no es más que una simulación válida de como se vería en realidad, dado que una vez que se ganó la ronda no es necesario seguir con la forma.


Tercera imagen: se puede ver una secuencia de secuencias, diversas formas siendo corridas a la par. Las formas/procesos no han sido cerradas al alcanzar el valor superior, por lo que la imagen no es una simulación válida, más que sirve para visualizar las posibles superposiciones y varias formas en paralelo.


Para finalizar: podemos una simulación más aproximada. Incluyendo un 32 (corresponde a 25 en poderes de dos). Y una superposición casi al final de la imagen, donde una posición es correspondida por dos secuencias, sumando 12, lo que corresponde a la suma de las dos secuencias 23 + 22

En caso de que la superposición persevere, las formas al cabo de unas rondas, bifurcaran sus caminos, anulando la superposición.

Llegado acá: quizás sea bueno recordar, que cada fila, dispone de 100 valores. De manera que la segunda posición, por más cerca que de la impresión de ubicarse de la primera, es en realidad, hecha, no 100, sino 200 rondas después (algo más de una hora después para el casino analizado). Del mismo modo , la #3 posición, posee un margen de 400 rondas, que sería calculable en un poco más de 2 horas de espera.


Traduciendo la forma a una ecuación.

Habiendo diseñado la primera forma, el próximo paso es pasarla a una función a fin de validarla, de corroborar las veces que gana y pierde al procesarla a la información previa. Comencemos:

  • #1 posición corresponde al round #1.
  • #2 posición, corresponde al round #201 (doble descenso)
  • #3 posición corresponde al round #401 (doble descenso)
  • #4 posición corresponde al round #403 (doble derecha)
  • #5 posición corresponde al round #405 (doble derecha)
  • #6 posición: corresponde al round #605 (doble descenso)
  • #7 posición: corresponde al round #805 (doble descenso)
  • #8 posición: corresponde al round #807 (doble derecha)
  • #9 posición: corresponde al round #809 (doble derecha)

Por lo que la forma se podría expresar como:

  1. x
  2. x + 200
  3. x + 400
  4. x + 402
  5. x + 404
  6. x + 604
  7. x + 804
  8. x + 806
  9. x + 808

En caso de perder el grupo, la perdida sería de 511 unidades, dada los nueve indices de la cadena. Fácil de calcular haciendo -1 sobre el próximo poder.


Pasando la función a SQL

Pasemos la operación a SQL para comenzar con las pruebas:

Lo que nos devuelve:

round value class creacion
1 15,49 high 2018-01-27 14:03:54
201 18,61 high 2018-01-27 15:59:57
401 69,42 high 2018-01-27 17:20:03
403 11,18 high 2018-01-27 17:21:47
405 2,3 high 2018-01-27 17:22:39
605 8,17 high 2018-01-27 18:36:23
805 2,5 high 2018-01-27 19:53:36
807 2 high 2018-01-27 19:54:33
809 1,41 low 2018-01-27 19:56:02

Se puede observar una diferencia de casi 6 horas desde la primera ronda hacia el final de la serie de 9. La aplicación que opere deberá usar una db para llevar la información bien organizada.


Simplificando la SQL:

Dado que con solo 1 valor mayor al dos, ya sabemos que la secuencia funcionó,  y considerando que la operación deberá de ser realizada más de medio millon de veces, podemos simplificar aún más la selección a fin de agilizar el proceso.

Lo que nos devuelve solo un valor!

round class_cadena
1 high, high, high, high, high, high, high, high, low

Ahora que ya creamos la selección en SQL, el próximo paso, es la creación de un guión que incluya la selección, y realice pruebas sobre cada uno de los 600,000 records, a fin de calcular, en primera medida, las veces que pierde, las veces que gana y la diferencia.


Evaluando el modelo:

La primera versión del código, a la cual decidí llamar “shape_eval.php” preparada para correr en cli php, se ve así:

Podemos correr el código sin más… “php -f shape_eval.php” y… llevarnos la agradable sorpresa de que la primera forma da mucha pelea! sin embargo, no logra ganarle en el largo plazo a la banca.


La primera secuencia perdida, se ve en la ronda 1675, para cuando lleva ganadas, 1,674 rondas (o bien el mismo número en dólares) y luego pierde 511 unidades.

En el largo plazo el dinero acumulado, crece y decrece, pero no alcanza valores considerables.

[round] => 1673
[class_cadena] => hi, hi, low, low, low, hi, low, low, low
[dinero] => 1673

[round] => 1674
[class_cadena] => hi, low, hi, low, hi, hi, low, low, low
[dinero] => 1674

[round] => 1675
[class_cadena] => low, low, low, low, low, low, low, low, low
[dinero] => 1163

Podemos confirmar la perdida, usando la seleccion SQL previa con el valor 1675.


Subiendo la velocidad del guión

A fin de probar una infinidad de formas posibles, queremos que el código corra y nos de la información lo más rápido que pueda.

Conservamos la primera versión, dado que nos da la información necesaria para una revisión manual y  pasamos a crear una nueva copia del código para realizar algunos cambios:

$ php -f quick_shape_eval.php
Ronda: 1675, Dinero: 1163

La nueva versión nos da la información sin demoras.


Nuevas figuras, creación de formas

El código que lo genera no es más que una nueva forma. Al parecer las formas en verdad producen grandes variaciones.

Observaciones: se aplica una variable desplazador, a fin de mover la segunda figura, varias posiciones, luego, se emplea una función rand a fin de generar variaciones azarosas en el desplazador.


$ php -f quick_shape_eval.php

  • Ronda: 3231, Dinero: -865, Desplazador: 18
  • Ronda: 18096, Dinero: 9904, Desplazador: 18
  • Ronda: 19703, Dinero: 7415, Desplazador: 18
  • Ronda: 24122, Dinero: 7738, Desplazador: 18
  • Ronda: 31079, Dinero: 10599, Desplazador: 18
  • Ronda: 38339, Dinero: 13763, Desplazador: 18
  • Ronda: 42237, Dinero: 13565, Desplazador: 18
  • Ronda: 43859, Dinero: 11091, Desplazador: 18
  • Ronda: 44135, Dinero: 7271, Desplazador: 18
  • Ronda: 62462, Dinero: 21502, Desplazador: 18
  • Ronda: 66130, Dinero: 21074, Desplazador: 18
  • Ronda: 67874, Dinero: 18722, Desplazador: 18
  • Ronda: 69164, Dinero: 15916, Desplazador: 18
  • Ronda: 77431, Dinero: 20087, Desplazador: 18
  • Ronda: 78524, Dinero: 17084, Desplazador: 18
  • Ronda: 78916, Dinero: 13380, Desplazador: 18
  • Ronda: 96787, Dinero: 27155, Desplazador: 18
  • Ronda: 96909, Dinero: 23181, Desplazador: 18
  • Ronda: 108596, Dinero: 30772, Desplazador: 18
  • Ronda: 108852, Dinero: 26932, Desplazador: 18
  • Ronda: 109057, Dinero: 23041, Desplazador: 18
  • Ronda: 111030, Dinero: 20918, Desplazador: 18
  • Ronda: 111478, Dinero: 17270, Desplazador: 18
  • Ronda: 119748, Dinero: 21444, Desplazador: 18
  • Ronda: 123396, Dinero: 20996, Desplazador: 18
  • Ronda: 124455, Dinero: 17959, Desplazador: 18
  • Ronda: 127590, Dinero: 16998, Desplazador: 18
  • Ronda: 133603, Dinero: 18915, Desplazador: 18
  • Ronda: 144724, Dinero: 25940, Desplazador: 18
  • Ronda: 145982, Dinero: 23102, Desplazador: 18
  • Ronda: 150853, Dinero: 23877, Desplazador: 18
  • Ronda: 157389, Dinero: 26317, Desplazador: 18
  • Ronda: 158789, Dinero: 23621, Desplazador: 18
  • Ronda: 164318, Dinero: 25054, Desplazador: 18
  • Ronda: 171312, Dinero: 27952, Desplazador: 18
  • Ronda: 172869, Dinero: 25413, Desplazador: 18
  • Ronda: 172954, Dinero: 21402, Desplazador: 18
  • Ronda: 175171, Dinero: 19523, Desplazador: 18
  • Ronda: 187356, Dinero: 27612, Desplazador: 18
  • Ronda: 189630, Dinero: 25790, Desplazador: 18
  • Ronda: 191617, Dinero: 23681, Desplazador: 18
  • Ronda: 200002, Dinero: 27970, Desplazador: 18
  • Ronda: 200229, Dinero: 24101, Desplazador: 18
  • Ronda: 212277, Dinero: 32053, Desplazador: 18
  • Ronda: 216709, Dinero: 32389, Desplazador: 18
  • Ronda: 222839, Dinero: 34423, Desplazador: 18
  • Ronda: 229282, Dinero: 36770, Desplazador: 18
  • Ronda: 229714, Dinero: 33106, Desplazador: 18
  • Ronda: 230079, Dinero: 29375, Desplazador: 18
  • Ronda: 230603, Dinero: 25803, Desplazador: 18
  • Ronda: 230704, Dinero: 21808, Desplazador: 18
  • Ronda: 244536, Dinero: 31544, Desplazador: 18
  • Ronda: 248401, Dinero: 31313, Desplazador: 18
  • Ronda: 254168, Dinero: 32984, Desplazador: 18
  • Ronda: 254246, Dinero: 28966, Desplazador: 18
  • Ronda: 258557, Dinero: 29181, Desplazador: 18
  • Ronda: 260179, Dinero: 26707, Desplazador: 18
  • Ronda: 262689, Dinero: 25121, Desplazador: 18
  • Ronda: 263019, Dinero: 21355, Desplazador: 18
  • Ronda: 265546, Dinero: 19786, Desplazador: 18
  • Ronda: 266976, Dinero: 17120, Desplazador: 18
  • Ronda: 267080, Dinero: 13128, Desplazador: 18
  • Ronda: 273700, Dinero: 15652, Desplazador: 18
  • Ronda: 277167, Dinero: 15023, Desplazador: 18
  • Ronda: 280853, Dinero: 14613, Desplazador: 18
  • Ronda: 304613, Dinero: 34277, Desplazador: 18
  • Ronda: 307634, Dinero: 33202, Desplazador: 18
  • Ronda: 308924, Dinero: 30396, Desplazador: 18
  • Ronda: 309982, Dinero: 27358, Desplazador: 18
  • Ronda: 314732, Dinero: 28012, Desplazador: 18
  • Ronda: 317613, Dinero: 26797, Desplazador: 18
  • Ronda: 319695, Dinero: 24783, Desplazador: 18
  • Ronda: 322440, Dinero: 23432, Desplazador: 18
  • Ronda: 330094, Dinero: 26990, Desplazador: 18
  • Ronda: 336068, Dinero: 28868, Desplazador: 18
  • Ronda: 339955, Dinero: 28659, Desplazador: 18
  • Ronda: 341990, Dinero: 26598, Desplazador: 18
  • Ronda: 349877, Dinero: 30389, Desplazador: 18
  • Ronda: 352397, Dinero: 28813, Desplazador: 18
  • Ronda: 359724, Dinero: 32044, Desplazador: 18
  • Ronda: 366472, Dinero: 34696, Desplazador: 18
  • Ronda: 375968, Dinero: 40096, Desplazador: 18
  • Ronda: 382842, Dinero: 42874, Desplazador: 18
  • Ronda: 382903, Dinero: 38839, Desplazador: 18
  • Ronda: 383146, Dinero: 34986, Desplazador: 18
  • Ronda: 388984, Dinero: 36728, Desplazador: 18
  • Ronda: 389027, Dinero: 32675, Desplazador: 18
  • Ronda: 390477, Dinero: 30029, Desplazador: 18
  • Ronda: 395623, Dinero: 31079, Desplazador: 18
  • Ronda: 398773, Dinero: 30133, Desplazador: 18
  • Ronda: 403242, Dinero: 30506, Desplazador: 18
  • Ronda: 404540, Dinero: 27708, Desplazador: 18
  • Ronda: 405695, Dinero: 24767, Desplazador: 18
  • Ronda: 416663, Dinero: 31639, Desplazador: 18
  • Ronda: 417750, Dinero: 28630, Desplazador: 18
  • Ronda: 417885, Dinero: 24669, Desplazador: 18
  • Ronda: 423093, Dinero: 25781, Desplazador: 18
  • Ronda: 423322, Dinero: 21914, Desplazador: 18
  • Ronda: 425134, Dinero: 19630, Desplazador: 18
  • Ronda: 427026, Dinero: 17426, Desplazador: 18
  • Ronda: 431638, Dinero: 17942, Desplazador: 18
  • Ronda: 436953, Dinero: 19161, Desplazador: 18
  • Ronda: 439344, Dinero: 17456, Desplazador: 18
  • Ronda: 448850, Dinero: 22866, Desplazador: 18
  • Ronda: 449248, Dinero: 19168, Desplazador: 18
  • Ronda: 449290, Dinero: 15114, Desplazador: 18
  • Ronda: 451003, Dinero: 12731, Desplazador: 18
  • Ronda: 454174, Dinero: 11806, Desplazador: 18
  • Ronda: 458870, Dinero: 12406, Desplazador: 18
  • Ronda: 461360, Dinero: 10800, Desplazador: 18
  • Ronda: 468043, Dinero: 13387, Desplazador: 18
  • Ronda: 468505, Dinero: 9753, Desplazador: 18
  • Ronda: 479012, Dinero: 16164, Desplazador: 18
  • Ronda: 483270, Dinero: 16326, Desplazador: 18
  • Ronda: 484982, Dinero: 13942, Desplazador: 18
  • Ronda: 486061, Dinero: 10925, Desplazador: 18
  • Ronda: 486824, Dinero: 7592, Desplazador: 18
  • Ronda: 487129, Dinero: 3801, Desplazador: 18
  • Ronda: 490896, Dinero: 3472, Desplazador: 18
  • Ronda: 491291, Dinero: -229, Desplazador: 18
  • Ronda: 505451, Dinero: 9835, Desplazador: 18
  • Ronda: 517919, Dinero: 18207, Desplazador: 18
  • Ronda: 517920, Dinero: 14112, Desplazador: 18
  • Ronda: 524365, Dinero: 16461, Desplazador: 18
  • Ronda: 526280, Dinero: 14280, Desplazador: 18
  • Ronda: 535773, Dinero: 19677, Desplazador: 18
  • Ronda: 540430, Dinero: 20238, Desplazador: 18
  • Ronda: 544392, Dinero: 20104, Desplazador: 18
  • Ronda: 548472, Dinero: 20088, Desplazador: 18
  • Ronda: 557763, Dinero: 25283, Desplazador: 18
  • Ronda: 565300, Dinero: 28724, Desplazador: 18
  • Ronda: 568509, Dinero: 27837, Desplazador: 18
  • Ronda: 573013, Dinero: 28245, Desplazador: 18
  • Ronda: 574357, Dinero: 25493, Desplazador: 18
  • Ronda: 575661, Dinero: 22701, Desplazador: 18
  • Ronda: 580807, Dinero: 23751, Desplazador: 18
  • Ronda: 586002, Dinero: 24850, Desplazador: 18
  • Ronda: 588750, Dinero: 23502, Desplazador: 18
  • Ronda: 591143, Dinero: 21799, Desplazador: 18
  • Ronda: 591243, Dinero: 17803, Desplazador: 18
  • Ronda: 591644, Dinero: 14108, Desplazador: 18

Será resumido…


Creo que a fin de finalizar la idea, o al menos la publicación, a modo de darle un cierre a la visualización de azar, sería bueno poner la imagen final que logré generar procesando cada uno de los valores, desde el comienzo, al día de hoy.

La imágen posee buena resolución y pesa alrededor de los dos megas, asumo que puede ser usada como referencia si se desearan buscar formas en el mapa. Cada unidad se compone de 6 pixeles.

 

La maquina que programa hombres.

Supongamos que han pasado algunas decenas de años, y alguien ha logrado la forma, de crear una maquina, como si fuera un casco, el cual ubicado en la cabeza del usuario, es capaz de cambiar sus creencias con solo un click.

El usuario, quien va a una clínica para realizar el proceso, se coloca el casco, y comienza la re programación.

¿Desearía Ud no desear fumar nunca más? En caso de seleccionar sí, una secuencia de pulsos será enviada por el casco, a fin de que Ud nunca más desee encender un cigarrillo.

[ Realizar cambios ] [ conservar ]

( * ) En caso de que así no lo fuera, puede volver para reforzar la programación, sin cargo, usando solo su número de socio y clave de acceso.

¿Desería Ud ser menos ambicioso? En caso de seleccionar sí, una secuencia de pulsos será enviada por el casco, la cual reducirá su nivel de ambición,

Aviso: como consecuencia subirá su nivel de conformismo, puede que algunos enlaces o creencias análogas se vean modificadas.

[ Reducir ambición ] [ conservar ]

Se han localizado miedos a diversas enfermedades y condiciones médicas: incluyendo Alzheimer, Parkinson, y las infecciones de Malaria.

[ Desea eliminar los miedos localizados? ] Ƀ0.2
[ O prefiere aplicar vacunas para eliminar las chances en un 97%? ] Ƀ 3.2
[ Conservar mis miedos ]

A un precio accesible, la maquina de reprogramación, puede hacer que Ud sea quien en verdad quiere ser… o quien le hicieron creen, que ud en verdad quiera ser.

Vale la pena mencionar que el nuevo modelo, no poseía ninguna relación con la Terapia de choques del siglo XX.

El mecanismo hacía uso de redes neuronales, descargando y recreando modelos neuronales, únicos para cada individuo, reconociendo sus formas, y aplicando modificaciones a medida, primero en una realidad simulada por ordenador, donde el modelo ya había sido creado, y luego reproduciendo los mismos cambios, solo si el usuario así lo deseaba, en el mismo cerebro del individuo, verificando a cada epoch, si los cambios deseados habían sido aplicados de la manera deseada.

Al igual que un recién nacido libre de un modelo de bien o mal, de blanco o negro, la realidad como una desvinculada serie de episodios, unidas solo por un hilo principal. Quizás la maquina no sea solo, más que una analogía de la sociedad.

Una vida armoniosa

Desearía poder decir que la mayoría de mis ocurrencias le deben las gracias a una niñez y adolescencia armoniosas, el clonazepam, el paxil, una vida ordenada, con buen descanso, merienda y cena; pero la verdad es que más bien, le debo las gracias a mis excesos de cafeína, redbull, alucinógenos ligeros, bebidas alcohólicas, una vida desorganizada y la mismísima bipolaridad.

No recuerdo haber cenado un solo día del mes a la misma hora, en verdad, muchas veces recuerdo no haber cenado. En lo que refiere al almuerzo, venga, si vamos a hablar de la primera comida después del desayuno, eso fue muchas veces pasadas las 2 de la mañana.

A medida que lo pienso, y procuro recordar, pareciera volverse cada vez más difícil hablar de almuerzo y cena. Eso claro, sin mencionar, el desorden propio de los horarios.

Algunos amigos, a veces recomiendan buscar el orden. Pareciera haber alguna mágia o, digamosle “buena vida”, “buen vivir” al vivir en orden. Claro, con orden casi siempre significa con horarios.

Horarios de irse a dormir, horarios para comenzar el día, horarios para desayunar, almorzar, merendar, cenar. Horarios para ir a la oficina, horarios para salir de la oficina.

Pensé que si fueran programas, serían variables ancladas y globales, números que nunca cambian.

Del mismo modo deberían de ser los ingresos de la persona modelo. La persona modelo, quien dispone siempre de un dinero a fin de mes, el cual es, en gran medida, más o menos el mismo dinero que para la misma fecha, del mes pasado, cobrado, solo para no variar, en el mismo banco.

¿Qué hay de especial en la formula? ¿Podría alguien a caso, en cualquier caso, conseguir algo nuevo haciendo, y volviendo hacer día a día las mismas cosas, con los mismos números y el mismo orden?

Volví a mirar el piso, me desangraba. La bala en el brazo derecho parecía haber pegado en un mal lugar y la sangre corría a medida que perdía la conciencia.

El edificio. El blanco, el pendrive. El guardia. La alarma, la policía. El pedido.

En cualquier caso, nunca sería como ellos, pensé. Las luces y las enfermeras. La clínica, el quirófano. Cualquier persona que no viva con sus propias reglas, no debería vivir. Volví a respirar, miré mi brazo y el médico de guardia parecía haberme salvado la vida. Hacían presión sobre el brazo.

La bala? El médico?

Perdida de información en cva.anses.gov.ar

Para seguir con la colección de vulnerabilidades y fallas de sugirdad, en resposible disclosure, podemos añadir un segundo problema que logramos resolver en los servidores de cva.anses.gov.ar.

Comienzo del mail:


Hola señores! cómo les va?

Les escribo porque encontré algo que verdaderamente me llamó la atención, ubicado en los sistemas de http://www.cva.anses.gov.ar (Campus Virtual de Anses). La aplicación web pide una imagen ubicada en una fuente externa, algo notorio que no había visto en servicioscorp, al menos no con una imagen.

En la imágen se puede ver remarcado, el pedido que realiza cva.anses.gov.ar hacia p4000494.ferozo.com en una comunicación no encriptada, la imágen no se encuentra disponible en el servidor, y devuelve un error 404. Sin embargo, la comunicación HTTP envía información sobre los usuarios que se encuentran navegando y usando cva.anses.gov.ar, cómo se puede ver en la próxima imágen:

Los encabezados de la solicitud, muestran algunas de las variables que son enviadas hacia el servidor externo, como información del navegador de los usuarios, la procedencia del tráfico y unas cookies vinculadas al nombre de dominio en este caso. Más allá de esta información, el servidor remoto, posee la hora en la cual la imagen es pedida, y la dirección de IP de cada una de las conexiones, en otras palabras, el servidor remoto es capaz de ver la dirección de IP de cada uno de los usuarios, lo cual hace posible una medición del volumen del tráfico, y la hora a que los usuarios navegan por la web.

De manera adicional, la imagen está ubicada en la cabecera de la web, por lo cual es cargada a lo largo de toda la aplicación web, realizando este pedido siempre, y no solo una vez, desde una posición específica.

La sorpresa más grande fue al acceder al a p4000494.ferozo.com y ver que el subdominio de una empresa privada, resolvía en el dominio http://delosperonistas.com/

De esta manera, quien fuera que fuese el dueño de http://delosperonistas.com/ podría estar analizando los patrones de navegación, y posiblemente, información sensible de cada uno de los usuarios que visita y navega por la web del Campus Virtual de Anses. Permitiéndole sacar métricas y estadísticas de su uso. Me pareció que podría resultar de utilidad hacer una búsqueda sobre el nombre de dominio:


  • Admin Name: Lautaro Mallo
  • Admin Organization: Lautaro Mallo
  • Admin Street: diag 75 n° 1056 3° 2°
  • Admin City: La Plata
  • Admin State/Province: Buenos Aires
  • Admin Postal Code: 1900
  • Admin Country: ar
  • Admin Phone: +54.891646
  • Admin Phone Ext:
  • Admin Fax:
  • Admin Fax Ext:
  • Admin Email: lautaromallo@gmail.com

Es importante mencionar, que este sitio web, además se encuentra alojado en una empresa privada nacional (www.donweb.com), y no en los servidores de anses, la cual también tiene acceso a la información previamente mencionada.

Para finalizar el mail, las buenas noticias son que todo esto se puede corregir, borrando la siguiente línea de código, ubicada en (http://www.cva.anses.gov.ar/theme/styles.php/essential/1523459378/all)
que además de generar estas circunstancias, no posee ninguna utilidad práctica:

Espero que les sirva;
Saludos cordiales y buen fin de semana,
Chris,

Vulnerabilidades remediadas en cva.anses.gov.ar

A fin de variar un poco con la información publicada, y para que no sean solo ideas de negocios y problemas lógicos, decidí comenzar a publicar algunas vulnerabilidades y fallas de seguridad.

En una colección que voy a clasificar como responsible disclosure, donde se publicarán vulnerabilidades y fallas de seguridad las cuales ya hayan sido remedidas, las cuales, sin embargo, pueden ser usadas para la comprensión y análisis de algunos problemas comunes.

Sin más preludio, he aquí la información:


Buenos días señores,

Les envío una vez más un breve informe ad honorem, el cual considero que podría servirles, sobre un grupo de fallas de seguridad que hacen posible acceder a información sensible desde la aplicación ubicada en cva.anses.gov.ar. El problema comienza por el uso genérico de nombres de usuario y passwords, dado que son generados en base a información de dominio público.

La aplicación sirve como un “campus” a fin de brindar cursos y formación para los empleados de Anses, a fin de acceder de poder inscribirse en los cursos, o bien acceder a la información brindada, es necesario un usuario válido.

Explorando un poco las diversas secciones, se localizó un PDF, en el cual se puede observar que el nombre de usuario se conforma de 10 símbolos, al igual que el password del mismo. Lo cual dio lugar a suponer que el password del usuario era igual o bien, similar al nombre de usuario. A la vez, el formulario de acceso, informa que los nombres de usuario corresponden con los números de legajo.

Se usó una aplicación localizada en Anses seguridad a fin de conseguir una base de números de legajos, a fin de obtener un formato válido de los mismos, con estos mismos usuarios, se comenzarían las pruebas a fin de analizar la posibilidad de que los passwords, en algún caso correspondieran con el usuario. Vale la pena mencionar, que al realizar una búsqueda sin especificar ningún valor (sin DNI, nombre ní números), la aplicación parece devolver cada uno de los records disponibles.

Se realiza la primera prueba con un posible usuario localizado en Anses seguridad.

Dado que el password no había sido nunca cambiado, fue posible acceder a la aplicación e incluso cambiar el password del usuario. Luego de realizar las pruebas el password fue re-definido a su valor original. Un usuario malicioso, podría realizar un cambio masivo de passwords o publicar información personal, sensible o maliciosa usando las credenciales de diversos usuarios.

La aplicación confirma que el password fue remplazado. Podemos añadir que previo a realizar el cambio de password, la aplicación debería de haber enviado un mail de confirmación a la casilla del usuario, a fin de verificar el proceso, lo cual hubiera hecho imposible cambiar el password, sin conseguir un previo acceso a su email.

Una véz en validado con el usuario en la aplicación es posible remplazar el email, remplazar información personal del usuario, o incluso publicar información en la aplicación, la cual daría lugar a vulnerar más usuarios, o ganar aún más acceso.

La dirección de email del usuario y diversos campos e información del usuario podrían ser manipuladas, a fin de realizar maniobras vinculadas a la ingeniería social, re-direccionar a los usuarios hacia webs maliciosas, y más.

Una segunda imágen que fue sacada desde un segundo usuario.

Desde la sección de cursos es posible ver el calendario de cursos y programas de Anses, los que ya fueron realizados, al igual que los que serán realizados. Lo cual se podría considerar como una exposición de información sensible.

Al igual que el calendario, es posible ver información y desarrollos propios de Anses. En el mismo grupo podemos incluír la comunicación privada de los usuarios.

Si bien la aplicación busca forzar que el password sea remplazado en el primer acceso, es posible evadir el mecanismo, y proceder sin cambiar el password, haciendo click en un nuevo enlace. De esa manera, muchos usuarios pueden acceder por primera vez y no cambiar el password. Es recomendable que la aplicación fuerce a los usuarios a cambiar el password previo a usar la aplicación, una vez que inician la sesión por primera vez.

A fin de calcular el volumen del problema, se realizaron pruebas por medio de una secuencia de código, usando burp. Se probó la seguridad de 1,636 usuarios, de los cuales, 170 fueron vulnerables (10.39%), dado que el password nunca había sido remplazado, o bien, había sido remplazado usando el mismo password. Las lineas marcadas en la imagen corresponden con usuarios vulnerables.


Usuarios vulnerables

información parcial, sobre 1,636 usuarios, de los cuales, 170 fueron vulnerables (10.39%)

N° de L. Nombre Dirección de email Password
11044 Graciela Liliana Diaz gldiaz@anses.gov.ar 11044
989735 Veronica Sandra Lopez verosanlopez@anses.gov.ar 989735
989702 German Agustin Medina gamedina@anses.gov.ar 989702
902314 Ariana Dafne Peralta adperalta@anses.gov.ar 902314
902386 Marcela Fabiana Schiariti mfschiariti@anses.gov.ar 902386
902585 Alejandra Irene Lefortt ailefortt@anses.gov.ar 902585
902911 Silvia Veronica Ieracitano svieracitano@anses.gov.ar 902911
902665 Miguel F. Arias Evans mfariasevans@anses.gov.ar 902665
903087 Beatriz Del Carmen Nagorr bcnagorr@anses.gov.ar 903087
902682 Juan Alejandro Mendez jamendez@anses.gov.ar 902682
903252 Nanci Judith Enrico njenrico@anses.gov.ar 903252
902584 Maria Veronica San Juan mvsanjuan@anses.gov.ar 902584
902323 Fernando Daniel Moran fernandodmoran@anses.gov.ar 902323
902574 Mariela Luisa Trejo mltrejo@anses.gov.ar 902574
902898 Maricel Virginia Chiraulo mchiraulo@anses.gov.ar 902898
903138 Nestor Daniel Gonzalez nestordgonzalez@anses.gov.ar 903138
902756 Jorge Hernan Vignolo jhvignolo@anses.gov.ar 902756
903057 Ernesto S. Bavio Figueroa ebavio@anses.gov.ar 903057
902618 Walter Gustavo D. Aguilar wgdaguilar@anses.gov.ar 902618
902347 Maria Victoria S. Bajarlia mvbajarlia@anses.gov.ar 902347
902688 Emiliano Andres Brolese eabrolese@anses.gov.ar 902688
903068 Juan Maria Mondelo jmmondelo@anses.gov.ar 903068
902638 Pablo Daniel Battaglia pbattagliavaldecantos@anses.gov.ar 902638
903038 Paula Souza Alexandre 903038@mail.com 903038
903045 Maria Guadalupe Martinez  mgbuisanmartinez@anses.gov.ar 903045
903198 Liliana Hernandez Miri lhernandezmiri@anses.gov.ar 903198
903267 Mariel L. Olivera Cordoba mloliveracordoba@anses.gov.ar 903267
902401 Francisco H. Petrissans fhpetrissansventos@anses.gov.ar 902401
902652 Patricia Beatriz Fraccarolli pbfranccaroli@anses.gov.ar 902652
902793 Maria E. Ballivian Jimenez meballivian@anses.gov.ar 902793
902632 Ricardo M. De Ao Alvarez rmdeanoalvarez@anses.gov.ar 902632
902685 Fernandez M. Gomez mfgomez@anses.gov.ar 902685
902750 Mariela Alejandra Gonzalez marielaalejandragonzalez@anses.gov.ar 902750
903187 Veronica Gabriela Cisterna vgcisterna@anses.gov.ar 903187
902706 Norberto Vicente Pingitore nvpingitore@anses.gov.ar 902706
902980 Miriam Alejandra Rodriguez mirianrodriguez@anses.gov.ar 902980
902507 Lorena M. De Los A. Suarez marialsuarez@anses.gov.ar 902507
903013 Silvana Natalia Rodriguez snrodriguez@anses.gov.ar 903013
902769 Matias Alejandro Swistun maswistun@anses.gov.ar 902769
903155 Mariana Veronica Palermo mvpalermo@anses.gov.ar 903155
903184 Mauricio Edgardo Bianchi melbianchi@anses.gov.ar 903184
902511 Luciano F. Fernandez 902511@anses.gov.ar 902511
903042 Silvia Patricia Mendieta spmendieta@anses.gov.ar 903042
903056 Noelia Fernanda Plattner nfplattner@anses.gov.ar 903056
902359 Francisco Sicardi  fscicardi@anses.gov.ar 902359
902715 Maria Virginia Rodriguez mvrodriguez@anses.gov.ar 902715
902747 Guadalupe P. Georgiadis gpgeorgiadis@anses.gov.ar 902747
902907 Santiago Ezequiel Areal 902907@anses.gov.ar 902907
902987 Silvina Mariel Bauhoffer silviabauhoffer@anses.gov.ar 902987
903197 Ramona Antonia Ontiveros rontiveros@anses.gov.ar 903197
902442 Hector Horacio M. Lagorio hlagorio@anses.gov.ar 902442
902922 Irma Maria Susana Pereyra imspereyra@anses.gov.ar 902922
903126 Claudia Alejandra Soloaga casoloaga@anses.gov.ar 903126
903180 Horacio Guillermo Herrera hgherrera@anses.gov.ar 903180
902697 Emilio Walter Ramon Adur ewradur@anses.gov.ar 902697
902852 Horacio Maximiliano Frua hmfrua@anses.gov.ar 902852
903226 Maria Francisca Saravia mfsaravia@anses.gov.ar 903226
902341 Gustavo M. Sagastume gmsagastume@anses.gov.ar 902341
902407 Luis Gustavo Castro Millan lcastromillan@anses.gov.ar 902407
902983 Maria Victoria Forgione mvforgione@anses.gov.ar 902983
903026 Estela Graciela Rodriguez egrodriguez@anses.gov.ar 903026
902543 Maria Cristina Santangelo 902543@mail.com 902543
902557 Patricia Alba Alzugaray paalzugaray@anses.gov.ar 902557
902599 Marcela Elvira Bustamante mebustamante@anses.gov.ar 902599
902791 Oscar Enrique Schneider oeschneider@anses.gov.ar 902791
902853 Norma Beatriz Saradjian nbsaradjian@anses.gov.ar 902853
902889 Alejandro Federico Ragosta 902889@anses.gov.ar 902889
902935 Martin Alejandro Sliwa martinsliwa@anses.gov.ar 902935
903104 Maria Cristina Fuensalida 903104@mail.com 903104
902532 Pablo Sebastian Porcel pporcel@anses.gov.ar 902532
902900 Marta Susana Sigmaringo msigmaringo@anses.gov.ar 902900
902916 Angelica Dorotea Manzano amanzano@anses.gov.ar 902916
902723 Diana Marisa Pietrantueno dmpietrantueno@anses.gov.ar 902723
903133 Claudio Osvaldo Palmeiro copalmeiro@anses.gov.ar 903133
903216 Cecilia Anabela Schelske cschelske@anses.gov.ar 903216
903245 Natalia Alejandra Neo naneo@anses.gov.ar 903245
903259 Maximiliano Inchaurraga minchaurraga@anses.gov.ar 903259
903269 Fernando Nestor Chaparro fnchaparro@anses.gov.ar 903269
902472 Gabriela Laura De Santis gldesantis@anses.gov.ar 902472
902565 Valeria M. D Alessandro vmdalessandro@anses.gov.ar 902565
902615 Orlando Oscar Figueroa oofigueroa@anses.gov.ar 902615
902730 Norma Gorizia Galliano 902730@mail.com 902730
902910 Daniela Del Valle Oyola danielaoyola@anses.gov.ar 902910
902926 Mariela Carla Cadranel mccadranel@anses.gov.ar 902926
902958 Diego Humberto Mambretti diegomambreti@anses.gov.ar 902958
903243 Viviana Mabel Gallardo vmgallardo@anses.gov.ar 903243
902803 Stella Maris Lorenzino smlorenzino@anses.gov.ar 902803
902856 Rosana Griselda Ibaez rgibaniez@anses.gov.ar 902856
902915 Laura Fabiana Rebagliati lfrebagliatti@anses.gov.ar 902915
902528 Ariel Guillermo Pereyra agpereyra@anses.gov.ar 902528
902809 Celina Graciela Robledo cgrobledosamayoa@anses.gov.ar 902809
902928 Griselda Eliana Bajouth gebajouth@anses.gov.ar 902928
903253 Cristian Miguel Leuffen cmleuffen@anses.gov.ar 903253
902344 Cristina Menendez Barrero cobarreromenendez@anses.gov.ar 902344
902508 Maria Agustina Gonzalez 902508@mail.com 902508
902617 Gustavo Fabian Pugliese gfpugliese@anses.gov.ar 902617
902887 Mirta Beatriz Cabezon mbcabezon@anses.gov.ar 902887
903073 Carlos Alberto Castillo cacastillo@anses.gov.ar 903073
902335 Gustavo Fernando Lopez gfgrisolialopez@anses.gov.ar 902335
903099 Maria Del Carmen Perez mdcperez@anses.gov.ar 903099
903125 Alberto Martin Novo Guell amnovoguell@anses.gov.ar 903125
902315 Ximena Aixa Ampugnani xaampugnani@anses.gov.ar 902315
902454 Delicia Irlanda Correa idcorrea@anses.gov.ar 902454
902580 Laura Elizabeth Romero leromerolorenzon@anses.gov.ar 902580
902832 Jorge Guillermo Pieiro jgpineiro@anses.gov.ar 902832
902929 Diego Martin Barrientos dmbarrientos@anses.gov.ar 902929
902981 Roberto Adrian Roman 902543@mail.com 902981
902991 Maximiliano Astudillo mastudillo@anses.gov.ar 902991
903025 Fanny Elizabeth Colque fecolque@anses.gov.ar 903025
903064 Ricardo Nestor Gaite rngaite@anses.gov.ar 903064
903161 Javier Alberto Mercuri jmercuri@anses.gov.ar 903161
903236 Marcelo Alejandro Pea mpenia@anses.gov.ar 903236
902346 Romina Laura Coronel rlcoronel@anses.gov.ar 902346
902742 Julieta Gismondi Barros jgismondibarroso@anses.gov.ar 902742
902914 Marta Alicia Yuanasi myuanasi@anses.gov.ar 902914
903058 Claudia Mabel Figueroa claudiamfigueroa@anses.gov.ar 903058
902413 Carlos Oscar Kozlowski ckozlowski@anses.gov.ar 902413
903209 Maria Andrea Cavallini macavallini@xxxxxxxxx 903209
903265 Leandro Gabriel Campo lcampo@anses.gov.ar 903265
902354 Julio Cesar Bergottini jcbergottini@anses.gov.ar 902354
902321 Karina Andrea Scalise kascalise@anses.gov.ar 902321
902364 Monica Edith Flores mflores@anses.gov.ar 902364
902455 Norma Amelia Guerra naguerra@anses.gov.ar 902455
902759 Gustavo Diego Tassano gdtassano@anses.gov.ar 902759
902781 Leonardo Akio Hattori 902781@anses.gov.ar 902781
902782 Graciela Cota Buzaglo gbuzaglo@anses.gov.ar 902782
903258 Pablo Javier Canals pcanals@anses.gov.ar 903258
902327 Fabian Armando Ponce faponce@anses.gov.ar 902327
902594 Angel Pablo Giachello 902594@mail.com 902594
902997 Silvia Estela Lera selera@anses.gov.ar 902997
903145 German Teodoro Knees gtknees@anses.gov.ar 903145
902732 Sandra Noemi Mayol snmayol@anses.gov.ar 902732
902744 Julio Horacio Tejero jhtejero@anses.gov.ar 902744
902699 Jorge Nestor Mayorga jmayorga@anses.gov.ar 902699
902569 Rita Anali Barzola rabarzola@anses.gov.ar 902569
903240 Federico Muoz Femenia 903240@anses.gov.ar 903240
903158 Veronica Filipponi vfilipponi@anses.gov.ar 903158
902325 Laura Noemi Cortese lncortese@anses.gov.ar 902325
902420 Hilda Ines Ricaurte hricaurte@anses.gov.ar 902420
902588 Hector Adolfo Seri 902588@anses.gov.ar 902588
902864 Maria Cecilia Pomo mcpomo@anses.gov.ar 902864
903306 Luca Ftima Iglesias lfiglesias@anses.gov.ar 903306
902927 Juan Ignacio Armas jarmas@anses.gov.ar 902927
903233 Cesar Adrian Ibaez caibanez@anses.gov.ar 903233
902370 Carlos Jose Galmes cjgalmes@anses.gov.ar 902370
902901 Violeta Contreras vcontreras@anses.gov.ar 902901
903162 Ivan Elias Garrido igarrido@anses.gov.ar 903162
903182 Daniela K. Rodeyro dkrodeyro@anses.gov.ar 903182
902989 Alicia Monica Armas smarmas@anses.gov.ar 902989
903018 German Casteluccia gcasteluccia@anses.gov.ar 903018
902490 Marisol Cardoso mcardoso@anses.gov.ar 902490
902689 Julia Ester Lera jelera@anses.gov.ar 902689
902748 Osvaldo Mattias 902748@mail.com 902748
903059 Mariana Lorenzo mlorenzo@anses.gov.ar 903059
902885 Eva Indira Leaez eleanez@anses.gov.ar 902885
902666 Teresita Carou tcarou@anses.gov.ar 902666
902775 Maria Cristina Santangelo 902543@mail.com 902775
902977 Juan Jose Bulens jjbulens@anses.gov.ar 902977
903147 Cristina Collazo ccollazo@anses.gov.ar 903147
903110 Silvia Mendoza 903110@mail.com 903110
903142 Natalia Carro ncarro@anses.gov.ar 903142
902411 Enrique Pifarre epifarre@anses.gov.ar 902411
903186 Matias Laroze mlaroze@anses.gov.ar 903186
902431 Ana Maria Foglia amfoglia@anses.gov.ar 902431
903210 Lorena Castillo lcastillo@anses.gov.ar 903210
902622 Alejandra Dussau apdussau@anses.gov.ar 902622
903088 Alejandra Politi apoliti@anses.gov.ar 903088
902789 Agustina Celoria aceloriaanses.gov.ar@anses.gov.ar 902789
903242 Martin Lopez lopezmartin@anses.gov.ar 903242
902497 Beatriz Amigo bamigo@anses.gov.ar 902497
902785 Beatriz Matas bmatas@anses.gov.ar 902785
903115 Mauro Costa mcosta@anses.gov.ar 903115
902917 Analia Luca analialuca@anses.gov.ar 902917
903037 Alejo Urbani aurbani@anses.gov.ar 903037

El análisis de los 1,636 usuarios demoró menos de 10 horas, y luego se suspendió la aplicación, dado que consideramos que sería posible calcular, o al menos aproximar un indice. Vale la pena mencionar que para un usuario malicioso, sería posible el remplazo de los passwords de cada uno de los usuarios vulnerables, conformando los mismos un aproximado de 10.39%, forzaría a él área de IT a hacer un remplazo global de los passwords de cada uno de los usuarios dado el riesgo implicado.

En cualquier caso es recomendable realizar un análisis más amplio, a fin de poder definir la seriedad del caso, y poder confirmar si en verdad hablamos de un 10% de usuarios vulnerables.


Para finalizar, quisiera mencionar que desde un solo usuario vulnerable, sería posible probar de ganar acceso al servidor, o bien, elevar los privilegios a fin de conseguir aún mayor acceso, a la aplicación, al servidor o incluso a la red, dado que el código usado (Moodle) dispone de una amplia colección de fallas de seguridad, las cuales no han sido probadas una a una, pero de seguro conllevan algunos riesgos adicionales para el subdominio. Como podrán observar, varias de las vulnerabilidades fueron localizadas e informadas en el 2017 y 2018, por lo cual no me sorprendería si alguna de las mismas fuera aplicable al caso.


Sumario de posibles consecuencias:

  • Cambio masivo de passwords, bloqueando el acceso a miles de usuarios.
  • Acceso a información confidencial de empleados del organismo.
  • Impersonificación, uso de los canales de comunicación para propagar desinformación.
  • Escalabilidad de la vulnerabilidad, combinando el acceso con diversas fallas de seguridad.
  • Vigilancia, o posible robo de información sensible.

Sumario de recomendaciones:

  • Redefinir las policies de passwords, haciendo que los passwords genéricos no usen información de acceso público.
  • Realizar modificaciones necesarias en la aplicación, a fin de que no sea posible evadir el cambio de password.
  • Al cambiar el password genérico la aplicación debería de enviar una confirmación por email, previa a realizar el cambio pedido.
  • Del mismo modo, la aplicación debería de pedir confirmación por email al realizar cambios en la información personal.
  • Considerar remplazo masivo de passwords dada la chance de que varios de los mismos ya hayan sido vulnerados.
  • Inclusión de CAPTCHAS seguros que prevengan el uso de código para realizar pruebas secuenciales.

Considero que Anses se vería beneficiada por un mecanismo que haga posible la comunicación rápida y eficaz de las fallas de seguridad localizadas, para luego ir revisando y supervisando cada caso de manera individual.

Para concluir, aprovecho la ocasión para mencionar, como podrán apreciar, que me hallo disponible y con ganas de poder celebrar un nuevo acuerdo que haga posible resumir con las pruebas de seguridad sobre las aplicaciones, redes y servidores de Anses, o incluso ofrecerme a fin de resumir los procesos de análisis desde las oficinas. En lo personal creo que aún quedan muchas cosas por realizar y creo que sería una buena idea abordarlas y remediarlas con la seriedad y urgencia requerida, dadas las condiciones.

Como, siempre, espero que les sirva la información brindada y quedo a disposición para lo que requieran!
Saludos cordiales;
Chris C. Russo

Desarrollando un videogame: revision 1

Una idea de negocios con videogames y blockchain.

Después de lo que creo que fueron unas 8 semanas que he pasado queriendo comprender la lógica empleada por un generador de azar de un casino online, decidí darme a mi mismo una pausa indefinida.

Es difícil de decir si en verdad hice algún progreso analizando más de medio millón de valores, dado que en verdad no logré crear ninguna función que logre ganarle a la casa.


El negocio

Sin embargo, de la información que logré recopilar, el dinero generado por el casino, es sin dudas una de las variables que más sorprende. Más de medio millon de dólares mensuales. Imposibles de fiscalizar. Tax free. Más aún dependiendo del valor de la moneda, podría superar con facilidad el millón mensual.


Classic + Blockchain

Lo cual me llevó a pensar en reciclar algunos de los clásicos, los “All Time Classics Games” he incorporarles un poco de blockchain por acá y allá.

La idea es simple, armar un mínimo de 10 videogames online, y modificarlos, de manera que los usuarios que ganan, ganen dinero y los que pierdan, pierdan!


¿Por qué empezar con 10 y no solo con uno?

La principal razón para evaluar con 10 aplicaciones a la vez, es dado que considero que las chances de que funcione al menos 1 en 10 son mayores a las chances de que funcione 1 en 1.

El proceso comenzaría por buscar videogames ya programados, los cuales se puedan correr desde el navegador.

Un servidor dedicado es necesario para poder correr con fluidez, las diversas conexiones y necesidades de una aplicación masiva. Sin embargo, dado que el volumen de usuarios no será grande al comienzo, sería posible hacer andar diversas aplicaciones en el mismo servidor.


Proceso de creación

  • 1 Servidor dedicado (asumo que AWS)
  • 10 aplicaciones ya funcionando que sean open source.
  • 1 programador JS que pueda modificar las aplicaciones.

El programador (quien no podría ser yo dado que mi experiencia en el campo es casi nula) debería solo realizar las modificaciones que sean necesarias a fin de que:

  1. Se creen usuarios, incluyendo un password, previo a comenzar.
  2. Se ponga un mínimo de dinero en BTC, para comenzar.
  3. Gane dinero (específico para cada caso)
  4. Pierda dinero (específico para cada caso)
  5. La casa comisione un 1% cuando un usuario gana.
  6. Sacar o poner dinero.

Como se puede observar, la única diferencia sería en los casos 3 y 4, las cuales serían específicas para cada aplicación.

Más allá de eso, los mecanismos para crear el usuario y realizar las operaciones en BTC son siempre las mismas y deberían de ser recicladas.

Considerando que dichas funciones pueden ser usadas de forma indiscriminada para cada uno de los casos, y que en verdad no es necesaria la creación de nuevas aplicaciones, gracias a la magia del open source, se podría decir que el 80% del laburo ya viene hecho.

Por lo que solo quedaría en enfocarse en:

  • Localizar las aplicaciones.
  • Probarlas y subirlas.
  • Realizar las modificaciones necesarias para “hacerlas blockchain”.
  • Realizar la publicidad necesaria a fin de conseguir los primeros usuarios.

Recursos

Comencemos por enumerar links hacia las apps que podrían servir:

Referencia Nombre Código Demo
#1 Tank Anarchy Source code Demo
#2 Agar.io Source code Demo
#3 Wordchain Source code Demo
#4 Tic-Tac-Toe Source code
#5 Snake Source code Demo
#6 Curvas Source code Demo
#7 Tanks (oldie) Source code Demo
#8 Space Source code Demo
#9 Space 2 Source code Demo
#10 Mozilla BQ Source code Demo
#11 Sli Source code Demo

Procesos a ser realizados desde acá:

(1) El primer paso radica en descargar una copia de alguno de los videogames ya localizados en los links, y subir una copia del mismo al servidor.

(2) Luego el programador debe realizar cualquier modificación que se considere necesaria, aunque no es recomendable perder demasiadas horas en eso.

(3) Para finalizar solo añadir blockchain y promocionar, a fin de ver como responde el público!

¿Donde se puede realizar la publicidad?

No creo que sea recomendable hacer publicidad en google o facebook, aunque quizás sea buena idea probar. Es posible realizar publicidad por foros vinculados a BTC, redes privadas en facebook y demás.

Quizás sea recomendable la incorporación de mecanismos, que bonifiquen con BTC a los usuarios quienes refieren a un nuevo usuario. Lo ideal sería realizar los mecanismos de referral una vez definido el CAC.


Desacoplando el programador, unificando operaciones

Creación de una aplicación única para el balance

Después de reconsiderar el proceso de creación, logré simplificarlo aún un poco más, creando una única aplicación separada, que se encargue de realizar las operaciones en blockchain de cada usuario. De esa manera, el desarrollo es aún más fácil.

Se crea una aplicación única, que se encargue de:

  • Creacion de un nuevo usuario.
  • Recibir pagos en BTC para el usuario
  • Enviar pagos en BTC del usuario hacia donde sea específicado.

Una vez creada la aplicación, una db almacenaría la información así:

Email Usuario Password Balance
veronica@email.com Veronica 7f138a09169b250e9dcb378140907378 1223654
gabriel@email.com Gabriel 7fa3b767c460b54a2be4d49030b349c7 2548123
hernan@email.com Hernan 12470fe406d44017d96eab37dd65fc14 1548548
chris@email.com Chris 26956aeb988f877c1d4361a77bef4914 8542595
lara@email.com Lara 8060daf308dfb7b0862f28df17357dbb 9812132

Aquellos records corresponderían con usuarios válidos, y con saldo disponible para cualquiera de las aplicaciones, una vez armado el mecanismo de creación de usuarios y operaciones de balance, solo se realizarían los pasos ya mencionados:

  • Subir el primer videogame.
  • Modificarlo a fin de que cuando uno pierda, se reduzca el balance.
  • Modificarlo a fin de que cuando uno gane, el balance suba.

Hackeando Casinos en Blockchain

¿Cómo ganarle a un casino?

Suena complicado, no? Más bien suena como una de esas cosas que cualquier persona normal diría que es imposible.

Hace algunas semanas se me dio por recopilar, y analizar, lo más posible cada pizca de información disponible en una “sala de azar”.

Como podrán imaginarse, en verdad no me fue como esperaba, pero creo que la experiencia valió la pena, quizás, debería de haber frenado cuando iba ganando.

Aunque quizás sea imposible definir cuando uno “va ganando” con precisión… ganando $1 dólar? ganando $100? miles o decenas de miles?

En fin, la publicación se dividió en varias secciones, a fin de conservar el orden de la narración. Espero que a alguien le sirva de algo!


Casinos en Blockchain

Quizás, una de las principales razones que me lleva a mirar con cariño e interés estos sistemas de apuestas y casinos de bitcoin, es el hecho de que al día de hoy carecen de muchas de las regulaciones aplicables a casinos convencionales y casinos online.

Por el mismo hecho uno podría esperar que el dichoso “azar” no sea el mismo que los que por lo general son aplicados en casinos regulados, uno podría esperar que no usen verdaderos generadores de azar por hardware, sino más bien funciones generadas por la aplicación.

Más allá del azar, la verdad es que armar un casino en linea es ahora más fácil que nunca. Las regulaciones que aún no caen en lugar y las monedas digitales como BTC o ETH hacen posible rápidas dinámicas que no eran posibles hace una década.

El dinero se mueve cada vez más rápido, de las monedas pasamos al papel, del papel a los bancos, dando lugar a fenómenos como visa o american express.

Haciendo que el dinero ya se no pueda agarrar… las monedas del 2018 llevan al nuevo dinero un paso más allá. Invisible, incorpóreo y de valor indefinido y movedizo.


Aviso legal y personal

Dado que no quiero hacerle perder horas a nadie, así que comencemos por aclarar, que la semana pasada perdí $40 mil dolares. Así es. Aún duele un poco.

Se podría decir que la gran mayoría del código publicado en las próximas páginas posee riesgos considerables, y sin lugar a dudas, podría generar perdidas económicas considerables.

Más allá de eso, en verdad creo que algunas secciones del mismo son valiosas o pueden servir como información educacional.

La verdad es que fueron más bien unos 6 BTC, los cuales, para el día rondaban los 40 mil dolares. Primero 3 ganados, luego 3 perdidos, 2 ganados, y 3 perdidos. Luego decidí frenar

Comenzando desde el principio, hace algunas semanas, después de una conversación con desconocidos usuarios de un foro, decidí mirar un poco más de cerca diversos casinos online para realizar apuestas con BTC y otras monedas digitales.

¿Cómo los perdí? En verdad no se que fue lo que me llevó a perder así, dado que había comenzado bien. Para describir el proceso en lineas generales:

Mirando en la db, esperaba que se genere un volumen específico de probabilidad favorable, o por decirlo más claro, esperaba que hubiera un volumen considerable de valores inferiores a 2 en las rondas previas, de manera que el equilibrio de la aplicación buscara comenzar, con valores superiores.

Comenzaba con 1,000 fichas y en caso de perder, 2,000 al próximo, en caso de perder, duplicaba las fichas en la próxima ronda.

Poderes de dos. Genial, creo que ya la conocen, de esa manera, duplicando al perder, con probabilidades de ganar del 49.5%  en cada ronda uno se puede pasar en promedio, algunas horas sin perder.

El problema por obvio que sea, sucede alcanzamos el máximo, de lo que podemos pugnar. El máximo ahora ronda cerca de los 225, lo que equivale a: 33.554.432 unidades. Por lo que llevado a la mesa, equivale a 25 rondas perdidas seguidas.

 


Mecanicas del Casino

Volvamos al casino, hace unas semanas, decidí cargar unos 0,127 BTC en uno de esos nuevos “casinos”, un desafío simple, donde un número comienza a subir desde el 1 hacia el 10,000 y puede frenar en cualquier posición.

Los usuarios ponen el dinero previo a comenzar la ronda, si el número elegido es menor o igual al número final, ganan. Vale la pena hacer algunas observaciones generales sobre la lógica de la aplicación:

  • La probabilidad de ganar decrece cuando la variable de salida crece.
  • Más grande sea la variable de salida elegido por el usuario,
    • más grande el riesgo de perder
    • y más grande la posible ganancia.
  • Recudiendo la variable de salida:
    • suben las chances de ganar,
    • pero del mismo modo disminuyen las posibles ganancias.

De esa forma, si bien podemos ganar el 99% de las veces con un valor de salida cerca del mínimo, al perder una sola vez en 100 rondas, haría que solo esa perdida, superen a las ganancias acumuladas.

Habiendo mencionado eso, anclando la variable de salida en X2, se puede reducir o anular una buena porción de probabilidades inecesarias para la simplicidad un primer análisis .

Con la variable anclada en X2, la lógica queda recudida a poner fichas, siempre que creamos que el número será mayor o igual a 2. Si el número sale menor a 2, hemos perdido las fichas, si sale mayor, las hemos duplicado.

Si desean ver más sobre como funciona, pueden probarlo desde acá.

Bien, habiendo explicado en lineas generales la lógica de la aplicación, paso a hablar sobre lo que hice y probé:


Tecnologías, y aplicaciones usadas

A fines de no olvidar nada, voy a comenzar por anunciar algunas de las aplicaciones, librerías y ideas que fueron aplicadas en forma de un indice:

  1. Selenium
  2. Facebook/php-webdriver
  3. MariaDB
  4. Keras
  5. TensorFlow
  6. Pandas
  7. Numpy
  8. Sklearn
  9. Redes neuronales
  10. Unidades LSTM
  11. XGB
  12. Orange
  13. Regresiones lineales
  14. Naive Bayes
  15. Nash equilibria
  16. Progración en R y diversas yerbas más.

A lo largo de las próximas páginas, espero poder cubrir y explicar el mayor número posible de las pruebas realizadas. Por lo que de ahora en más la comprensión se hace más difícil al incorporar diversas lineas de código.

Recolección de información

Clonando la información de la web. A fines de comenzar a realizar un análisis adecuado, es necesario el mayor volumen posible de información previa.

Usando PHP, Java, Selenium y los webdrivers desarrollados por Facebook, y aprovechando la información pública de cada round publicada acá. Armé un guion para explorar cada una de las rondas y sacar la información.

Acá lo podemos ver funcionar.

  • Valor.
  • Número de round.
  • Clasificación (si fue menor o mayor a 2)
  • Fecha y hora.
  • Dinero en la mesa.
  • Promedio de dinero por usuario.
  • Número de usuarios.
  • Número de ganadores.
  • Número de perdedores.

He aquí una copia del código creado para recopilar la información. La aplicación fue diseñada para almacenar la información en MariaDB por lo que van a precisar una copia de la base si quieren usarla, acá la misma.

Espero que el código les sea agradable para leer, creo que quedó bien organizado. Bien, corriendo curl.php (php -f curl.php) podemos ver como la aplicación comienza a escarbar cada una de las rondas.


Curl.php recompila la información de cada ronda, y las va enviado hacia Mariadb. El guión corre para siempre, a excepción de que sea cancelado a la fuerza, de ser así, al arrancar, resume desde donde debería sin problemas.

Como podemos apreciar, hace uso de Selenium y Facebook Webdrivers para funcionar, al igual que es necesario una conexión a la db para almacenar la información.

Para quienes quieran reproducir mis acciones, descargar una replica de la db ya creada y poner a correr curl.php para sincronizar la db.

Se pueden ver algunas lineas // las cuales pueden ser removidas y añadidas, para modificar la información que el guion busca y almacena.

Espero que comprendan que el código no fue creado de ninguna manera para uso más que personal, por lo que verán que he decidido ahorrarme algunos condicionales, if, else algunas cosas más.

Próxima página: análisis de la información conseguida.

Análisis de la información

Analicé la información en búsqueda de ordenes, probabilidades favorables vinculadas a la hora, probabilidades en base a la información previa, diversas, en verdad muchas funciones calculando el peso de los números, y los valores de las 1,000, 10 mil o incluso 100 mil rondas previas. Logré ganar algunas veces, al final me fui perdiendo. Por ahora.


Mariadb y diversas queries

Pasemos ahora a analizar algunas de las queries hechas a la db, y la información que conseguimos.

Previo a comenzar, asumimos que luckmap.zip fue descargado, descomprimido y cargado en la Mariadb, y que se corrio curl.php a fin de sincronizar la información con la web.

Veamos algunas queries que podemos hacer:

Como podrán ver, analicé diversas formas de abordar el problema. Por razones de disponibilidad horaria, no me fue posible crear modelos que correspondan o prueben cada una de las queries creadas, por lo que me focalicé en probar algunos modelos solo cuando las queries parecían revelar alguna información considerable.

La próxima página incluye diversos guiones armados en PHP, creados para ganarle a la aplicación y generar cada vez más dinero!

Suena demasiado bien, no? Debo avisar, que en verdad, mi experiencia fueron puras perdidas, no logré hacer andar de manera favorable, ninguno de los guiones acá publicados.

Sin embargo, y más allá de mi perdida de dinero, en verdad creo que algunos de ellos podrían generar ganancias, dadas las condiciones necesarias. Pasaré a hacer un análisis de cada uno de ellos y diversas observaciones relacionadas.

Creo que es posible ganar, más allá de que no haya logrado aún hacerlo.


Información aplicada

Pasemos ahora a analizar algunos de los giones PHP creados para operar con la web y procurar ganar dinero sin necesidad de un operador.

Una vez que disponía de un mecanismo para recompilar la información en la db corriendo, y diversas queries en busqueda de alguna clase de orden, decidí crear algunos guiones que usaran la información para procurar, ganar.

Al día de la fecha fueron unos 7 guiones, los cuales paso a explicar como funcionan:

  1. challenger.php
  2. challenger2.php
  3. alpha.php
  4. alpha2.php
  5. android.php
  6. won.php
  7. won2.php

src: challenger.php

Observaciones: si mal no recuerdo, challenger.php fue el primer guión armado. Las primeras lineas no hacen más que definir algunas variables incluyendo, la posición inicial, el nombre de usuario, el password del mismo.

El guión solo coloca fichas en las rondas finalizadas en 1, 3, 7 y 9. Al perder, duplica la posición previa.

La selección de números (1, 3, 7 y 9) fue hecha a fin de procurar (en vano) disipar o crear un espacio a fin de evadir la perdida con largas malas rachas, reduciéndolas a fin de no perder en esas secuencias.

Es claro que no consideré que si solo se ponían fichas en esas rondas, se crearían nuevas malas rachas o lineas.