Zona Hacklab Autónoma

de la interdimensión pirata

Segundo encuentro, zona hacklab autonoma interdimensional [ZHAI]

#2 ~

tiempo ~ 5hs | ~ 20 piratas

zha_v0

Encuentro interdimensional <3

Nos juntamos varias piratas del pip en el jitsi pirata con una serie de encuentros piratas donde nos compartimos saberes, hackatoneamos y liberamos cosas. Esta vez vamos a compartir una serie de talleres y charlas sobre un conjunto de saberes que consideramos importantes en nuestras actividades piratas interbarcas y que nos parece, pueden ser interesante compartir con nuestres aliades. Horarios

15:10 - Intro sobre ZHAI y PIP 15:15 - Git Doc

Git es un software para manejar versiones de nuestros archivos. Vamos a repasar los conceptos esenciales que maneja git (repositorios, ramas, commits) y usar esta herramienta sobre github para publicar algo en internet.

16:30 - 0net Doc

ZeroNet es una red de pares que se pueden conectar sin compartir sus direcciones IPs entre sí. Hay blogs, foros, mail y muchas sorpresas!! (xddd)

corte 17:45 - 18:00

18:00 - cifrado de mails con enigmail && thunderbird Doc

Aprender a cifrar correos con el gestor thunderbird + enigmail, dinámica de creación de llaves para cifrar con amigxs

Taller de git

bloque by @gahen

Requisitos / Recomendaciones:

Instalar git: https://duckduckgo.com/?q=instalar+git&t=ffsb&ia=web

Glosario

  • to stage: preparar los cambios para versionar.
  • to commit: versionar, crear una versión nueva. Versionado.
  • to push: empujar los cambios a un repositorio remoto asociado.
  • to pull: traer los cambios a un repositorio remoto asociado.
  • to merge: mezclar los cambios de distintas ramas.
  • to checkout: “ir a” o “cambiar” la rama activa.
  • branch: rama, una parte de la historia, un conjunto de versiones relacionadas.
  • history: historia, un conjunto de ramas.
  • hash: firma compuesta de de letras y números que representa los cambios del commit.

Introducción

Git es un software que nos permite controlar cambios sobre nuestros archivos y es especialmente útil para los que se basan en archivos de texto.

En general daremos traducciones de las palabras en inglés a usar, sin embargo usaremos más los términos en inglés para las acciones que ya se conocen así en el campo de la tecnología.

Taller

Crear un nuevo repositorio

Un repositorio es la parte mínima de una implementación de git, tiene una relación 1 a 1 con nuestros proyectos y dispositivos, es decir que tendremos 1 repositorio por cada proyecto y dispositivo (notebook, pc de escritorio, etc.). Solo tendremos un repositorio activo cuando estemos trabajando, no podemos cambiar de repositorio.

git init [carpeta] # crea un repositorio nuevo, opcionalmente en la carpeta pasada como parámetro, sino en la que estamos paradas.

Gestión de branches (ramas)

Representan líneas distintas de desarrollo del proyecto. Se pueden tener varias en paralelo en un mismo repositorio

git branch <rama>    # Crea una nueva rama llamda <rama>
git branch           # Lista todas las ramas que tenemos
git checkout master  # Se para en la rama master
git merge <rama>     # Combina los cambios de la rama <rama> hacia la rama actual, solo modifica a esta rama.
git branch -d <rama> # Borra la rama <rama>. Ya fue unida a master así que no hace falta tenerla activa

Nota: es importante entender que borrar una rama no modifica la historia, los commits de esa rama siguen estando. Lo único que cambia es que ya no podemos hacer un checkout al commit último de la rama usando el nombre que tenía (sí podemos hacerlo usando el hash del commit). Borrar ramas entonces es más un tema de organización que de gestión del código versionado.

Stage y Commit

stage es un estado intermedio, previo al commit (versionado), que podría describirse como “cambios listos para ser versionados (commiteados)”

git add <archivo.ext> [otro.otraext] ... # coloca en staged todos los archivos que pasamos como parámetro

Para corroborar que el comando anterior funcionó bien y estamos por versionar exactamente lo que queremos podemos usar el comando status que nos muestra el estado actual de nuestro repositorio.

git status                               # nos mostrará lo que hicimos

commit es el comando que nos permite efectivamente versionar un cambio. Una vez que hacemos commit nuestro cambio va a quedar guardado en nuestro repositorio. Git nos da la seguridad de que siempre podremos volver a esta versión en el futuro.

git commit                               # Abre un editor de texto donde pondremos el mensaje de commit y visualizaremos los cambios que estaban en staged, ellos serán los que se guarden.
git commit -m 'mensaje de commit'        # Hace un commit con el mensaje que le pasamos entre comillas
git commit -am 'mensaje de commit'       # Hace un add de todos los cambios actuales y comitea con el mensaje. La versión simple y por eso también la más 'sucia' de usar, ya que es muy fácil versionar cambios que no nos interesaban

Uso distribuído: Repositorios centralizados y github.

Hay varias maneras de trabajar de manera distribuida con varias personas aportando a un mismo repositorio usando git. Cada uno hace un commit a su propio branch y luego van mergeando sus cambios con los de los demás. Hablamos de “repositorio centralizado” cuando hay 1 repositorio que tiene la versión posta y los demás tienen que mergear con él. Con git pueden armarse otros flujos de trabajo no centralizados.

Entre los proveedor de repositorios en la nube podemos mencionar a 0xacab, Bitbucket y Github. Una vez creado nuestro repositorio remoto y podemos asociarlo con nuestro repositorio local con el comando git add y luego enviar nuestros cambios usando git push.

git remote add origin git@github.com:User/reponame.git # Añade una referencia a un nuevo repositorio remoto, usa el nombre por defecto *origin* y tiene la url remota al repositorio.
git push -u origin master                              # Envía nuestros cambios comiteados a la rama master del repositorio remoto. Esta rama ya existe, se crea sola con el repo, sino el comando fallaría.

Cuando otra persona sube cambios al repositorio y queremos obtenerlos (o más probablemente cuando queremos hacer push y git se queje de que tenemos que actualizar nuestro repo antes) podemo usar…

git pull origin master  # puede ser solo "git pull" si ya le dijimos a git cual es el repositorio y branch del que debe actualizarse

Usando checkout -b podemos crear una rama local y remota a la vez, que luego pueda hacer push al repositorio remoto

git checkout -b nueva-rama # Crea una nueva rama que estará en el mismo estado que la rama donde estábamos parados.
# git add, commit, etc ....
git push origin nueva-rama # Publica los cambios a la nueva rama.

Referencias, movernos en la historia y deshacer cambios

Introduzcamos el concepto de “copia de trabajo”: esta es la estructura de archivos que vemos, fuera de git. Cada vez que modificamos, añadimos o borramos un archivo estamos tocando la copia de trabajo, el repositorio solo se modifica al usar algún comando de git.

Para movernos a distintos momentos de la historia, entre commits, necesitamos saber su hash. Para esto podemos usar el commando git log, que nos muestra el historial de la rama donde estamos parados, o el comando git reflog que nos muestra todo lo que hemos hecho en el repositorio hasta ahora. Luego podemos usar el comando git reset --soft *hash* que moverá la referencia actual del branch hacia otro momento de la historia, el del commit cuyo hash pasamos como parámetro. git reset --hard *hash* además de hacer eso reemplazará nuestra copia de trabajo por que estaba en ese momento de la historia.

:::danger Las siguientes instrucciones pueden generar pérdida de archivos, tengan todo commiteado antes de probarlas. :::

git log                     # Buscamos el hash del commit al que queremos volver, por ejemplo *1234abcd*. Supongamos que estamos en el commit *5678abcd*
git reset --soft 1234abcd
git status				    # Como hicimos un reset "suave" nos mostrará un montón de archivos cambiados, porque volvió a un estado anterior de la historia pero no cambió los archivos
git reset --hard 1234abcd
git status				    # Ahora vemos que ya no hay nada para comitear, todos los cambios que habíamos hecho se perdieron y estamos 100% en el estado del commit 1234abcd.
git reflog                  # Acá podemos ver el commit donde estábamos parados inicialmente, supuestamente *5678abcd*
git reset --hard *5678abcd* # Con esto volvimos al estado incial, como si nada hubiera cambiado.

Deshacer cambios

Para deshacer un commit simplemente usamos git revert <hash> y se nos añadirá un commit más especificando que el commit identificado por **** fue deshecho.

Conflictos

Muchas veces,cuando estemos trabajando entre varios, git no podrá mezclar los cambios, y nos pedirá nuestra intervención. Luego se crea un commit donde se deja constancia de ese merge y qué hicimos:

# Tenemos cambios locales commiteados que queremos subir
git push origin master  # Git se queja de que tenemos que actualizar nuestro repo y rama antes de hacer push
git pull origin master  # Intentamos traer cambios remotos pero git nos dice que hay conflictos que debemos resolver, por ejemplo en el archivo README.md
# editamos el archivo README.md, reemplazamos lo que está marcado como conflictivo y nos aseguramos de que el resultado final está OK
git add README.md       # Le decimos a git que el archivo conflictivo ya está OK
git commit 				# Git nos pone un mensaje por defecto, cerramos y guardamos y listo
git push origin master  # Funciona =)

Publicar contenido online usando git

Github

Github provee un servicio que nos publica en internet cualquiera cosa que publiquemos al repositorio llamado .github.io.

Documentación: https://pages.github.com/

0xACAB (gitlab)

0xacab usa gitlab como software para gestionar repositorios remotos, también soporta algo similar: https://0xacab.org/help/user/project/pages/index.md

ZeroNet

bloque by @anzo y @alf screenshot random.

Teoría

  • ¿qué es unx “piratx informáticx”? ¿qué es p2p? Napster, Gnutella, Ares, Kazaa, Soulseek y otros actuales

    • ¿qué es BitTorrent (*.torrent, magnets, semillas y trackers)? Ver copiona.

    Modelos de redes. Hay un gradiente entre descentralizados hacia distribuídos o centralizados.

    Un hash criptográfico es una huella que se obtiene de (por ejemplo) el contenido de un archivo a partir de procesarlo matemágicamente con un algoritmo.

  • https://zeronet.io/es: Es una red de pares (ó red p2p) donde las URL son billeteras de bitcoins (“hashes” ó direcciones *.bit). Veamos: ¿kómo funka? …ver tmb. la presentación (ppt@gdocs<!>)

    • ¿qué es un sitio web (estático y dinámico)?

    Los zites son torrents que comparten archivos (SQL, HTML, JS, etcétera) de un sitio web que dialoga (mediante reglas) con el software que descargaremos y ejecutaremos cada une.

    • 0net no es anónimo per se. Permite usar tor y en un futuro, incorporará i2p.

    • ¿qué es el cifrado asimétrico? ¿qué son las mixnets? ¿qué es tor y cómo funciona?

Práctica

En ZeroNet seremos nodos, pares y semillas (simultáneamente) de los contenidos que prosumiremos; es decir de los contenidos que consumimos y producimos al navegar y comunicarnos.

  • Opcional: podés participar de la charla/ taller sin la necesidad de instalar nada. ZeroNet es accesible desde algunos sitios proxy que andan dando vueltas en la clearnet… pero la experiencia es mucho mas limitada y no siempre están online.

En la Internet de los `90 nadie sabía que eras un perro.

Instalaciones

  • Descargar y descomprimir:

    Vamos a tener una carpeta con todo los archivos de la aplicación, pero en primer orden nos interesará uno: el ejecutable. En win es un .exe, en mac un .app(?) y en lignux un .sh.

  • Instalar Tor Browser Bundle. Ejecutarlo. Apretar “connect” (¿qué son los bridges?). Navegar a un sitio oculto, por ejemplo: RiseUp.net ó Ahmia.fi.

  • Instalar el addon uMatrix en el navegador.

    • Probar y conocer porque usamos uMatrix. Cargamos un video. (Requiere activar el archivo de video q viene desde un dominio de googlevideo).

ZeroNet

  • Sólo Mac y Linux: En la carpeta de ZeroNet que descomprimiste hay que crear un archivo llamado zeronet.conf con este contenido:

      [global]
      fileserver_port = 10753
      trackers_proxy = tor
      tor = always
      tor_proxy = 127.0.0.1:9150
      tor_controller = 127.0.0.1:9151
    
  • (Con el Tor Browser Bundle ya corriendo), Doble-click en archivo ejecutable de tu sistema. Deberia aparecer algo asi en una terminal:

- Starting ZeroNet...
[xx:xx:xx] - Libsecpk256k1 loaded: CompiledLib in 0.024s
[xx:xx:xx] - Patching sockets to tor socks proxy: 127.0.0.1:9150
[xx:xx:xx] - Version: 0.7.1 r4206, Python 3.7.8 | packaged by conda-forge | (default, Jul 23 2020, 03:54:19)
[GCC 7.5.0], Gevent: 20.6.2
[xx:xx:xx] - Creating FileServer....
[xx:xx:xx] - Creating UiServer....
[xx:xx:xx] - Removing old SSL certs...
[xx:xx:xx] - Starting servers....
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] Ui.UiServer Web interface: http://127.0.0.1:43110/
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv4) using checkCanyouseeme result: {'ip': 'xx.xx.xxx.xxx', 'opened': False} in 2.928s
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv6) using checkMyaddr result: {'ip': 'xxxx:xxxx:xxx:xx::x', 'opened': False} in 13.463s
[xx:xx:xx] ConnServer Server port opened ipv4: False, ipv6: False
[xx:xx:xx] Ui.UiServer Added 127.0.0.1:43110 as allowed host
  • Abrir en TorBrowserBundle el URL de la dashboard “Hello ZeroNet”¡No carga!

    • Ir a about:config a configurar el campo “no_proxies_on” con el valor “127.0.0.1”.

    • Entrar en el menú customize, desde el sanguche o desde click derecho en la barra. Arrastrar el botón del addon “NoScript”.

    • Desde la pestaña del dashboard, clickear el botón del addon NoScript. Activar el “override” y luego dar permiso total a tu ip local (127.0.01) poniéndola como “Trusted”.

  • Navegar a Play. ¿Es la TPB antes de ser vendida?… solo hay tapas, magnets y links “clearnet” <!>.

  • Mostrar el buscador de kaffie, registrar una ID y entrar en su hub.

  • Navegar un poco activando los demo: blogs, foros, chats, giftime, mail, etc. Ver que hay muchos zites: wiki, index… los contenidos los tenemos q poner nosotres armando nuestros nodos entre ameguites…

  • Ver la carpeta data/ con todos los zites y sus archivos correspondientes que estan listados en cada data/**/contents.json (docs).

  • Clonar un blog, foro, chat o wiki. Al clonar un zite, 0net genera un par de llaves asimétricas que nos hacen dueñes, desarrolladorxs y moderadorxs de la copia que hay ahora en data/.

  • http://127.0.0.1:43110/1N6zp6jCXPBktNMPfe7UJBpQGyfCq7k2M8/?Post:2:ZeroNet+Beginner%E2%80%99s+Package … ¿Es un buen momento para una pausa?

  • Ver el archivo data/users.json.

  • Una red resistente a la censura, ¡polémica! no sólo hay contenidos ilegales, tmb. hay contenidos q son horripilantes.

    • Debatir.

    • La mitad vacia del vaso: requiere moderación. La mitad llena del vaso: provee posibilidades de moderación comunitaria.

  • Ver menú sanguche “...” para acceder a: Config, Plugins, Stats, y:

    • Ver los mute y las listas de bloqueo(s) (MOAB).

Fin.

Para profundizar luego, quizás en otra ocasión:

  • Traer archivos de un sitio estático (https://sutty.nl) y ponerlo como espejo en 0net.

    • Obtener una direccion “.bit” con Namecoins.
  • Activar el plugin de multiuser.

  • Crear zite con un user compartido

  • Gracias al local peer discovery se podrian hacer redes libres/ autónomas/ MESH: Usemos los cables del capitalismo de vigilancia pero no seamos usades por sus servidores!

  • Desarrollar un sitio con la ZeroFrame API.

  • Chau telegram!

Aprendiendo a enviar mails cifrados con thunderbird!

bloque by @librenauta

thunderbird es un cliente de correos electrónicos, donde podemos ingresar diferentes cuentas de diferentes servidores de correos, para poder gestionarlos todos en un mismo lugar.

para instalar thunderbird >->

Lo podés buscar desde el centro de software de tu sistema operativo linux, o via terminal:

Debian sudo apt-get install thunderbird fuente

Fedora sudo apt-get install thunderbird fuente

Windows descargar la última version desde aquí en español o elegir el idioma aquí

al iniciar thunderbird nos pedirá ingresar una cuenta de mail

Cifrado

El objetivo de cifrar información es poder transformar un mensaje/archivo en un lenguaje que no se pude comprender a menos que tengas una “llave” (como un candado) para descifrarla o hacer legible nuevamente.

un ejemplo muy simple es el cifrado ROT

donde la llave sería hacer corresponder una letra con la siguiente en el abecedario, ejemplo A=D

Una llave pública es un archivo que usted puede dar a cualquiera o publicar públicamente. Cuando alguien quiera enviarle un mensaje cifrado de extremo a extremo, necesitará su clave pública para hacerlo.

Su llave privada le permite descifrar este mensaje cifrado. Debido a que su llave privada le permite leer mensajes cifrados, es muy importante que usted la proteja. Además, su llave privada puede ser usada para firmar documentos para que otros puedan verificar que realmente proceden de usted.

ssd.eff.org


Enigmail

El complemento que nos permite generar y subir nuestras llaves de cifrado

  • En el menu de thunderbird podemos ver la opcion de “enigmail” que nos abrirá la siguiente pestaña, donde podemos crear nuestro par de llaves y ver todas las llaves públicas de nuestr_s amig_s

en esta ventana tambien podemos subir nuestra llave pública, para que otras la encuentren al poner nuestro mail en algun servidor de llaves.

autocript

by @fauno

autocrypt es una forma (protocolo, extensión) de facilitar el intercambio de llaves gpg sin intervención de les usuaries y activa cifrado oportunista.

sin autocrypt hay que:

  • enviar la llave a un servidor de llaves, con el problema que la llave queda para siempre (con dox y todo) y que puede haber un monton de llaves para la misma identidad, queda la duda sobre cual se puede usar

  • adjuntar la llave en todos los correos. es como autocrypt, pero la otra persona tiene que importar la llave manualmente. gente sin gpg recibe un adjunto (y a veces preguntan qué es)

autocrypt agrega la llave pública en los metadatos de cada correo y detecta automáticamente cuando recibimos correos con autocrypt. también lleva una cuenta de las llaves más nuevas y utiliza siempre la última. esto permite que les usuaries cambien de llave sin tener que avisarle a todo el mundo o renovarla (openpgp espera que una llave sea como un documento de identidad y la tengas para siempre, por eso los servidores no borran nada, pero en la practica todo el mundo la pierde y vuelve a crear otra).

el cifrado es oportunista porque si enviamos un correo a una persona sin saber una llave, pero ambas tenemos autocrypt, la respuesta va a llegar cifrada, con lo que es necesario un solo correo sin cifrar. no responde a problemar de verificación de identidad.

#enigmail ya soporta autocrypt, no tengo claro si el nuevo #thunderbird lo soporta, pero hay un plugin que lo hace por su cuenta asi que quizas haya que instalar ese

Primer encuentro haklab temporal

#1 ~

tiempo ~ 22hs | 13 piratas

zha_v0

La interdimensión pirata y biblioteca osmiornica

Nos juntamos varias piratas a cranear proyectos que venimos charlando hace varios meses en el canal publico del pip,

pasamos la noche en casa laberinto [la plata] entre hummus y falafels de piratas,para luego trabajar/ dormir en los siguientes proyectos/ideas:

  1. p-paper

    f intentó instalar alpine en una raspberry pi con la idea de configurar papertty pero tuvo que renunciar porque alpine para rpi no esta preparado para activar componentes de rpi y fallaban las compilaciones por todos lados. volvió a raspbian y estuvimos probando las pantallas de tinta electrónica con la idea de hacer un lector de ebooks. Resulta que las pantallas tienen una tasa de refresco de 3.5 segundos y papertty es muy lento en rpis, aunque funciona mejor en rpi3, tarda 5 segundos en enviar el cambio de pantalla, que se suman a los 3.5 que la pantalla tarda en dibujarlos.

después con v estuvimos probando los ejemplos de prueba de waveshare con mejores resultados, con lo que concluimos que pese a las limitaciones técnicas de la pantalla, el cuello de botella está en papertty que no está optimizado. quedamos en escribir algo en algún lenguaje compilado, pero se fueron al tacho nuestros planes de tener un ebook reader basado en el sistema gráfico de linux, a menos que portemos papertty a un lenguaje compilado.

zha_v0

  1. cambio de pantalla e-paper

  2. desarmamos 2 pcs [notebooks] y arreglamos visagras rotas(desajustando y pegando)

  3. aprender dat:// e instalar en una raspberry pi 3b:

    ##Seguimos los siguientes tutoriales:

  • Hay que instalar nodejs y nvm, nvm es un programita para poder bajar diferentes versiones de nvm bajamos y instalamos la última con: https://github.com/nvm-sh/nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash

nvm install 6.14.4 # or 10.10.0, 8.9.1, etc

luego instalamos dat:

dat

y con npm instalamos homebase

npm install -g @beaker/homebase

para correrlo , nos copiamos de la documentación el .homebase.yml y ejecutamos $ homebase

$ nano .homebase.yml

de aquí

  1. rompimos una netbook intentando bypassear un chip
  2. Installing OpenWrt - Netgear GD834Gv3

    v: 12.09, ar7 - @intu y @unperson

We followed the instructions on post #14 As follows we had some problems with the wireless chip, we softbricked the router trying to fix it and then had to restore the original firmware. However because of what we learned during the experience we are optimistic it can be done with ome further investigation and work. –

  • After we followed these instructions, using 12.09 ar7, we found that we were able to load the web interface for the router but there were no wireless options.

  • Although the wireless chip was loaded, and the driver was read, there was no interface to use it. So we investigated a bit and found some useful stuff in the source code which told us if the driver was loading the wireless chip firmware –> found in file pci.c in function acxpci_load_firmware (aprox line 532).
  • With this information we identified an approximate model for the wireless chip which is one of these but we need to know the exact make.

  • Used git blame pci.c to inspect the code and find out the date in which that function was written in. We originally thought it had been added in 2012. So we looked for a posterior version and chose version 15.

[information on partition tables in openwrt and memory size which I don’t remember] [mips, little endian, 4/32]

IMPORTANT: We backed up mtd1 (may be different in your case) which contains the config We did this in case we wrote over important bootloader config even though we were not writing over that particular sector

  • After installing 15.05.1, we found that we couldn’t contact the router in any way. It was softbricked.

  • Going back over our steps, we found out that the code we saw which was supposed to help us identify the right firmware for the wireless chip in order to be able to fix the problem was not in fact added in 2012, we only though this because of what looked like a merge date in the git blame file for pci.c. With further investigation we realized it was there in the initial release and that was just a mix up.

  • Because the device was softbricked we started looking for ways to unbrick it and found this code to unbrick it Unbrick nftp.2.c “there is a small utility nftp.2.c that is able to reflash and verify the router.” Using nftp.2.c we can flash official firmware or another openwrt firmware to the router and go back to initial state

  • We chose the second option following these instructions You HAVE to comment out the magic header “return 1” at approx line at 266 for this to work. CAREFUL this code flashes the bootloader.

  • NEXT STEPS: find out why the code that identifies the right firmware for the wireless chip doesnt run and fix that in version 12.09 because we now know it mostly works except for the wireless chip. Knowing the exact firmware for the chip will help us fix that and hopefully it should work. (or try version 14 and do the same).

siempre con la companía de montaña

zha_v0 zha_v0 zha_v0 zha_v0 zha_v0