Mostrando entradas con la etiqueta Dapp. Mostrar todas las entradas
Mostrando entradas con la etiqueta Dapp. Mostrar todas las entradas

martes, septiembre 19, 2023

CodeTalk sobre CrazyToolBox: Una navaja suiza para Web3 y BlockChain

Hace unos días publicamos el CodeTalk4Devs de Cómo detectar voces clonadas con Machine Learning de nuestros CodeTalks4Devs 2023 creado por Ideas Locas y hoy os traigo uno centrado en el mundo del Web3,  con una pequeña sesión dedicada a CrazyToolBox, la navaja suiza para Web3, que no es más que una herramienta multifunción que si estás en el mundo de BlockChain y los SmartContracts, te va a venir muy bien.


CrazyToolBox se trata de una herramienta con GUI, escrita en Python y apoyada principalmente en la librería web3.py y también PySide para la parte gráfica. Puedes descargarla desde su repositorio de GitHub y realizar la instalación en muy pocos pasos con pipenv:
  • pipenv install
  • pipenv shell
  • python main.py
Figura 2: Interface de Crazy Toolbox

En el archivo Pipfile se encuentran listadas todas las dependencias con las que trabaja la aplicación, y que pipenv instalará en un nuevo entorno virtual con los comandos indicados anteriormente. Con estos sencillos pasos puedes tener CrazyToolBox rápidamente ejecutándose en tu equipo.


En este Codetalk nuestro compañero Javier Álvarez nos habla de las herramientas OpenSource creadas por el equipo de IdeasLocas incluidas en CrazyToolBox, que te facilitará el trabajo a la hora de investigar en la Web3 o incluso en la creación de SmartContracts. Podrás encontrar herramientas como conversores de unidades, codificador de selector de funciones, validador EIP55, etcétera, entre otras muchas que puedes ver en el siguiente vídeo.

Figura 4: CodeTalk sobre CrazyToolbox: Una navaja suiza para Web3 y BlockChain

Puedes encontrar más información de CrazyToolBox en el artículo que publicó nuestro compañero Álvaro Núñez-Romero por aquí, puedes conseguir la herramienta en  el repositorio de CrazyToolBox en GitHub. Y recuerda que tienes todos los CodeTalks en esta web, desde los últimos publicados hasta el acceso a las cinco temporadas anteriores, pero vamos a comentar uno a uno los que tenemos publicados para que sepas un poco mejor el contenido de estos:

Temas y Proyectos de Ideas Locas

Cada mes seguiremos publicando un episodio de estos CodeTalks para mantenerte al día en estos temas tan importantes dentro de la tecnología, y encantados de que nos propongáis ideas locas, proyectos o temas que tocar.


Así que no te los pierdas, y nos veremos en el próximo episodio, y recuerda que tienes todas las Codetalks4devs en una sola lista de Youtube, para que las puedas ver seguidas una tras otra... 

Figura 6: Sección Apps, Educación y Cultura

Y si quieres verlas en la tele, recuerda que en la Sección APPS -> Educación y Cultura, tienes la Living App de las CodeTalks by Ideas Locas de tu Movistar+

Figura 7: Living App Codetalks by Ideas Locas

Solo debes entrar en ella y tendrás acceso a todos los Webinars que vamos realizando para disfrutarlos sentado en tu sofá preferido en el salón de casa.

Happy Hacking Hackers!!! 

Autor: Fran Ramírez, es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

lunes, agosto 28, 2023

CrazyToolBox: Una herramienta multifunción de utilidades Web3

En el equipo de Ideas Locas llevamos ya un tiempo jugando con la tecnología Web3 y aprendiendo sobre Blockchain y los SmartContracts. Hemos tenido la suerte participar en eventos y, a la vez que aprendemos, realizar pequeños aportes a la comunidad Open Source como nuestra plataforma de aprendizaje basado en retos Level_Up!, en donde tratamos de seguir ampliando con nuevos retos mes a mes e incluso hacemos pequeñas actualizaciones como la implementación de los NFTs para los jugadores que hicimos hace pocos meses.


En esta ocasión, hemos querido hacer una pequeña caja de herramientas con utilidades varias para Web3 que hemos estado utilizado en nuestro día a día, según vamos aprendiendo nuevas cosas de este apasionante mundo. Estas son:
  • Conversor de unidades
  • Codificador de selector de funciones
  • Decodificador de selector de funciones
  • Decodificador de entrada de transacciones
  • Calculadora SHA-3 (Keccak256)
  • Validador EIP55
  • Validación de firmas
Figura 2: Interface de Crazy Toolbox

CrazyToolBox se trata de una herramienta con GUI, escrita en Python y apoyada principalmente en la librería web3.py y también PySide para la parte gráfica. Puedes descargarla desde su repositorio de GitHub y realizar la instalación en muy pocos pasos con pipenv:
  • pipenv install
  • pipenv shell
  • python main.py
En el archivo Pipfile se encuentran listadas todas las dependencias con las que trabaja la aplicación, y que pipenv instalará en un nuevo entorno virtual con los comandos indicados anteriormente. Con estos sencillos pasos puedes tener CrazyToolBox rápidamente ejecutándose en tu equipo.


A continuación se detalla cada una de las secciones que podéis encontrar en la herramienta:
  • Conversor de unidades: Permite convertir entre wei, gwei y ether, además de un modo avanzado donde se pueden convertir entre más de 20 tipos de medidas. Admite hasta 30 decimales de coma flotante.
  • Codificador de selector de funciones: Permite generar el selector de una función. Para ello hay que indicar el nombre de la función y los tipos de parámetros que tiene en una sencilla interfaz. También es posible pasar directamente la firma de la función, por ejemplo, la función transfer con dos parámetros, un tipo address y otro uint256: transfer(address,uint256).
  • Decodificador de selector de funciones: Esta sección hace justo lo contrario a la anterior, es decir, dado un selector de una función intenta obtener la firma de la función. Para ello se hace uso de la API de 4byte.directory.
  • Decodificador de entrada de transacciones: En este caso se permite decodificar la entrada de una transacción a la firma de función y los parámetros asignados sin necesidad del ABI del contrato. De nuevo, para obtener la firma de la función se hace uso del servicio de 4byte.directory.
Figura 4: Sección del apartado decodificador
de entrada de transacciones en Crazy Toolbox
  • Calculadora SHA-3 (Keccak256): Esta funcionalidad permite calcular el hash keccak256 del texto introducido en el input.
  • Validador EIP55: El validador EIP55 permite comprobar si una dirección cumple con este EIP y, en el caso de que no lo cumpla, calcular el EIP55 correspondiente a la dirección de entrada indicada.
  • Validación de firmas: En este caso, dado un texto que se ha firmado, o el hash del texto, más la firma, devuelve la dirección del propietario de dicha firma.
Figura 5: Sección del apartado de validación de firmas en Crazy Toolbox

Esperamos que esta nueva herramienta pueda resultarte útil. Recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas. 

Figura 6: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación"
de Yaiza Rubio y Félix Brezo

Os animamos a que probéis la nueva herramienta y encontráis algún fallo, o queréis que incorporemos alguna sugerencia de mejora nos lo hagáis saber vía nuestro buzón público en https://MyPublicInbox.com/IdeasLocas.  


Más artículos de Web3, Blockchain & SmartContracts

martes, octubre 11, 2022

BlockChain & SmartContracts: Cómo crear una DApp de la Web3 con Python (y Flask)

En el equipo de Ideas Locas seguimos estudiando y jugando con el mundo Web3. Un mundo apasionante que tiene muchas posibilidades. En el artículo de hoy queremos enseñar cómo de fácil puede ser crear una DApp y las partes que tenemos para interactuar. Hay un par de librerías que si uno quiere meterse en el desarrollo del mundo Web3 debe conocer: Web3 y Ethers.

Figura 1: Cómo crear una DApp de la Web3 con Python (y Flask)

Normalmente, uno encuentra la versión web3.js y ethers.js, aunque también existe web3.py, la cual es la librería para lenguaje Python, que nos gusta mucho a los pentesters, y que nos permite conectarnos con un proveedor y acceder a la cadena de Blockchain que se requiera. Pero, cuando uno comienza a intentar juntar todas las piezas del puzzle le entran dudas. 
Tenemos la cadena de Blockchain por un lado, los nodos peer-to-peer que tienen una copia de la Blockchain, tenemos los SmartContracts que implementan lógica, tenemos un Wallet, tenemos un front para poder acceder con experiencia de usuario (o algo similar, ya que ésta es una de las grandes barreras de uso del mundo Web3, la experiencia de usuario). Son muchas piezas que debemos colocar y entender cómo interaccionan entre ellas. Este artículo intentará acercar de manera sencilla un mapa en forma de pieza e intentar mostrar cómo se unen las piezas:
  • Blockchain: Al final es nuestra ‘base de datos’ distribuida, la que hace que los datos sean redundantes e ‘inmutables’. Almacena la información de la Web3.
  • SmartContract: es el que aporta la lógica para llevar a cabo las operaciones que se quieran hacer en el mundo Web3.
  • DApp: permite acceder e interactuar a los contratos que podemos encontrar en una Blockchain.
¿Y qué ocurre con el front-end y el back-end? Pues la parte frontal la dejamos para JS (y los React, muchas de las aplicaciones utilizan este lenguaje) y el back-end para… ¿Flask? Sí, con Flask se pueden hacer muchas cosas y DApps también.

Definiendo una DApp

Para ejemplificar el uso de nuestra primera DApp vamos a proponer el siguiente escenario:
  • Tendremos una cadena de Blockchain de desarrollo: En este caso utilizaremos Ganache-Cli. Esta Blockchain estará ejecutandose en el puerto 8545 y en localhost. Accesible a través de http://localhost:8545 y una ChainID de 1337.
  • Crearemos un SmartContract de ejemplo denominado Hi: Este contrato será desplegado sobre la Blockchain con Remix IDE (el IDE de Ethereum Project). Cuando despleguemos el contrato nos quedaremos con la dirección del contrato y el ABI de éste. El ABI es el Application Binary Interface, necesario para conocer qué funciones tiene un contrato y cuáles son los parámetros de entrada y las salidas que puede generar dicho contrato. Es fundamental.
  • Crearemos una DApp con Flask: Diferenciaremos dos partes, la parte de plantillas dónde utilizaremos JS para interactuar en la parte cliente y conectar con Metamask y utilizar la parte de Flask para interactuar con la Blockchain y los SmartContracts a través de la librería Web3.py.
Lo primero que haremos es levantar Ganache-Cli en consola. Si no indicamos nada con los parámetros de Ganache-Cli, por defecto, nos crea 10 cuentas con 100ETH cada una. Además, nos proporcionar las claves privadas para que juguemos con ello.

Figura 3: Creación de cuentas den Ganache-Cli

Ahora, vamos a crearnos un SmartContract de prueba. Este contrato se llamara Hi (hi.sol) y tiene el siguiente aspecto:

Figura 4: SmartContract hi.sol

Como se puede ver, el contrato no hace nada más que almacenar la frase “hola mundo” y dispone de una función denominada getMessage(). Esta función devuelve el contenido de la variable ‘message’, en este caso “hola mundo”. Con Remix IDE se puede compilar fácilmente el código y obtener el ABI del contrato y el Bytecode (el contrato compilado con sus dependencias). El aspecto del ABI es el siguiente:

Figura 5: Aspecto del ABI de nuestro ejemplo

Como se puede ver en el ABI tenemos una función getMessage con ningún parámetro de entrada y que genera una salida de tipo String (el mensaje). Con Remix IDE podemos conectarnos fácilmente al proveedor que tenemos activo, en este caso a Ganache-Cli. Para ello, vemos el desplegable de ‘Environment’ y vemos las diferentes opciones. Elegimos Ganache Provider. Vemos como se encarga el entorno, las cuentas, los ETH de cada cuenta referente a Ganache-Cli.

Figura 6: Configuración de Ganache Provider

Desplegamos el SmartContract con Remix IDE y obtenemos una instancia con la dirección del contrato. Esto es importante, ya que después necesitaremos el ABI como la dirección del contrato para interactuar con él.

Creando la DApp

Ahora vamos a comenzar un proyecto para generar la DApp. Vamos a crear el proyecto en dos partes. Hay una parte que es puro Flask y en el que se mostrará cómo se puede acceder a la Blockchain e interactuar con los contratos con la librería web3.py (incluso podemos desplegar contratos, generando transacciones sobre la Blockchain) y, por otro lado, interactuaremos con la librería ethers.js a través de Javascript puro.

Comenzamos por la parte de ethers.js. Para ello, pensemos en la aplicación Flask con la ruta ‘/’. Cuando recibimos una petición a este recurso lanzaremos un render_template para ‘pintar’ un index.html.

Figura 7: "Pintando" un index.html

En el index.html vamos a meter el código HTML (al cual se le puede pasar parámetros desde Flask para crearlo en función de las necesidades o parámetros de entrada previos) y el código Javascript que interactuará con Metamask.

Figura 8: Código Javascript para interactuar con la wallet Metamask

En este código se puede ver como Flask devuelve el index.html y éste dispone de una información extraída de la conexión con Metamask. El código Javascript utilizado permite interactuar con Metamask y obtener la dirección de cuenta activa con la que conectar. Antes de conectar, la web que obtenemos es la siguiente:

Figura 9: Antes de conectar nuestra wallet

Tanto el texto como el botón de ‘Consultar Contract Address’ están deshabilitados. Cuando le damos a ‘Conectar a Metamask’ se activa la función ‘Connect()’ que vemos en el código y se hace la conexión con éste.

Figura 10: Conexión con nuestra wallet Metamask

Metamask aparece y elegimos la cuenta con la que queremos conectarnos. Una vez hecho esto la web cambiará de ésta y donde ponía ‘Address User’ se indicará la dirección pública del usuario conectado. Ahora podíamos hacer consultas con la librería para saber el balance, por ejemplo, del usuario.

Figura 11: Address obtenida

El botón ‘Consultar Contract Address’ queda habilitado y la caja de texto también. Ahora que hay un usuario conectado podemos interactuar con la segunda parte. Ahora, para ejemplificar cómo Flask puede interactuar (a través del back-end) con la Web3 (usando la librería web3.py) vamos a pensar en el siguiente ejemplo:
  • Introducimos la dirección del contrato que desplegamos con Remix IDE en la Blockchain local.
  • Esto llegará por POST a un recurso de Flask y haciendo uso de la librería web3.py nos conectaremos al proveedor (localhost y puerto 8545) y consultaremos algo del contrato, por ejemplo, las funciones que tiene e invocaremos una función, la de getMessage().
Figura 12: Usando web3.py podemos interacturar con el SmartContract y la Wallet. 

Aquí vemos cómo conectamos con el proveedor a través de Web3.HTTPProvider. Hacemos uso de web3.eth.contract como método para conectarnos (a través de la dirección de contrato y el ABI a un contrato accesible a través de dicho proveedor.

Figura 13: Datos del contrato

Por último, vemos cómo invocar funciones con contract_object.functions.getMessage().call(). Este es un ejemplo interesante porque se ve todo lo que podemos ir haciendo de forma ordenada. El resultado en el navegador es el siguiente:


Con esto, finalizamos nuestro ejemplo de DApp y formas de interactuar con Web3, una parte con JavaScript y otra parte con Python / Flask. Sin duda, un ejemplo para empezar a jugar. Pronto más artículos donde jugaremos con la tecnología Web3.

Más artículos de Web3, Blockchain & SmartContracts
Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Contactar con Pablo González

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares