domingo, 30 de diciembre de 2012

Fedora non recoñece dispositivo android (Solución para nexus 7) [Android][Fedora]

Boas a todxs,

Este nadal, de autoagasallo, como bo geek tiña que caer algo e caeu, neste caso unha nexus 7. Os primeiros días non fuchiquei moito con ela porque non me chegara a funda, protecto de pantalla e demais e son un tiquismiqui mais, hoxe xa cacharreei todo o que puiden e máis e tiven un problemiña que a base de ler conseguin solucionar. O problema trata, que cando conectaba a tablet ao meu PC con Fedora instalado este non a recoñece. Fedora, é compatíbel con MTP (Media Transfer Protocol) pero non recoñecía o dispositivo en cuestión e conseguin atopar, que, grazas ao ADB (Android Debug Bridge) que é unha ferramenta incluída no kit de desenrolo de Android, que, polo xeral xa vén instalada de serie nas últimas distribucións de GNU/Linux e posteriormente montandoa poderemos conectar sen maior problema. Esta foi a solución.

· Instalamos o necesario

$ sudo yum install -y yum install simple-mtpfs libmtp


· Creamos o udev rules para o nexus 7

martes, 25 de diciembre de 2012

Administración, permisos en GNU/Linux [Básico][Seguridade]

Boas a todxs,

Esta entrada vai adicada a eses autodidactas de GNU/Linux, xente que comeza a empregalo e para repaso de permisos, que é unha parte moi importante na seguridade de GNU/Linux. En windows até o 7 (corríxanme se me equivoco) non era obrigatorio que existise un administrador como tal mais en GNU/Linux sempre foi necesario que existise, especialmente nun SO que tendo permisos podes tocar absolutamente todo. Pois ben, unha das principais cousas que son novidosas ao pasar de windows a gnu/linux moitas veces é o executar un simple script, pois, de xeito default, os arquivos non teñen permiso de execución.

Estou seguro, que quen máis quen menos, en algún tutorial en determinado momento puido ler 'chmod XXX directorio/arquivo' e tirar para adiante ou simplemente entender que con iso se lle dan permisos de algo mais, non se profundizou no tema, como podedes ver, é fundamental que existan por seguridade

Como podemos coñecer que permisos teñen os nosos arquivos ou directorios?

Cifrando/Descifrando con translate [Twitcode XXI][Bash]

Boas a todxs,

Este twitcode é bastante sinxeliño, empregaremos a ferramenta translate para cifrar/descifrar un determinado texto, exemplo, con tor 13:

echo contacto.hackliza@gmail.com | tr 'abcdefghijklmnopqrstuvwxyz' 'nopqrstuvwxyzabcdefghijklm'
O que fai é cambiar cada letra da primeira string pola que ocupa a mesma posición na segunda, así, aplicariamos unha translación de 13 no abecedario como indica o cifrado tor, para descifrar basta con por as strings ao revés.

Poderíanse facer moitos máis exemplos, pero creo que a dinámica é sinxela :P, agardo o atopásedes interesante!

Saúde!

martes, 18 de diciembre de 2012

Parsear os parámetros dunha petición HTTP [Twitcode XX][Python]

Cando facemos unha petición por HTTP temos a opción de mandar parámetros na URL despois dun `?`, separados por `&` e co formato `<chave>=<valor>` entón... como lelo?

def urldecode(opt): return {unquote(k): unquote(v) for k, v in [e.split('=', 1) for e in opt.split("&") if '=' in e]}

(Usa o unquote de urllib)

Por exemplo:
>>> from urllib import unquote
>>> def urldecode(opt): return {unquote(k): unquote(v) for k, v in [e.split('=', 1) for e in opt.split("&") if '=' in e]}
... 
>>> urldecode("continue=https%3A%2F%2Fgroups.google.com%2Fd%2Foverview&service=groups2&passive=true")
{'passive': 'true', 'continue': 'https://groups.google.com/d/overview', 'service': 'groups2'}
>>>

jueves, 13 de diciembre de 2012

Amosando a traza dun programa cando da `Segmentation fault' (2ª parte) [C][Gnu/Linux]

Antes, no post de sacar as trazas cando hai faios de acceso na memoria mencionarades a posibilidade de inxectar a xestión dos faios dende fora do programa, isto sería moi útil cando non é posible recompila-lo código, é unha idea que compre explorar.

Vexamos entón como cazar as funcións que crexamos susceptibles... digamos `strcpy` para proba-lo usaremos este programa:
#include <string.h>
#include <stdlib.h>

// Produce segfault
void fail(){
    char buff[40];
    strcpy(NULL, buff);
}


int main(int argc, char **argv){
    fail();

    return 0;
}


Ben, o seguinte é cazar a chamada a `strcpy`, para isto temos que preparar unha libraría compartida coa función, este sería o código:

miércoles, 12 de diciembre de 2012

"Ubuntu ten software espía" Richard Stallman dixit

Boas a todxs,

Esta semana traio esta breve nova traducida que está causando bastante rebumbio xa que é o creador do Proxecto GNU e o lider da Fundación do Software Libre (FSF), Richard Stallman quen chamou "spyware" a Ubuntu.

Por que? Debido a que o sistema operativo envía datos ao seu fabricante Canonical, cando un usuario realiza unha procura no escritorio.

Como?

domingo, 9 de diciembre de 2012

Primeiro cuatrimestre de Hackliza! en números

Boas a todxs!

Fai pouco máis de 10 días que vimos de cumplir os 4 meses desde a posta en marcha deste proxecto. O único que podemos dicer desde Hackliza! é obrigado, obrigado a todas e todos os que nos seguides pois ver as centos de visitas mensuais fannos traballar e cumplir coas entregas semanais, obrigados a todas e todos os que comentastedes, as e os que estades no grupo de correo, en definitiva a todos os hacklegos e hacklegas que nos seguides!

Agardamos que sigades aí con nós, por moito tempo e que siga crecendo a comunidade. Uns poucos datos curiosos sobre as e os nosos visitantes :P

De donde son as nosas e os nosos visitantes?

Monitorizar os logs en GNU/Linux [Twitcode XIX][Bash]

Boas a todxs,

Esta semana un ben simple, fai uns días falábamos da detección de erros grazas aos logs de GNU/Linux e como ben apuntou Manel Villar nun comentario tamén se poden ver as últimas liñas do arquivo dos logs grazas a tail, concretamente, pódense monitorizar do seguinte xeito:

$ sudo tail -f /var/log/messages


Breve explicación:

viernes, 7 de diciembre de 2012

Amosando a traza dun programa cando da `Segmentation fault' [C][Gnu/Linux]

Uns días atras falaramos das sinais de Unix, unha de elas era SIGSEGV, que aparecía cando se producía un faio de segmento (é dicir, que o programa rompeu bastante), hoxe ímos ver como aproveita-la sinal para poder busca-lo erro.

O primeiro que precisamos é unha aplicación base cun faio de segmentación:
#include <stdio.h>
#include <stdlib.h>

// Produce segfault
void fail(){
    int *asd = NULL;
    *asd = 7;
}


int main(int argc, char **argv){
    fail();

    return 0;
}

E, claramente, faia...

lunes, 3 de diciembre de 2012

Amosar os servizos activos [Twitcode XVIII][Bash]

Nas distros de Gnu/Linux soe haber un directorio no que se especifican os servizos a executar o inicio, /etc/init.d/ (coma no caso das derivadas de Debian) ou /etc/rc.d/ (coma, por exemplo, en Slackware), ademáis en distros coma Ubuntu e derivadas é posible utilizar eses scripts para xestionar o arranque e detección de servizos usando o comando `service`, este comando permite ademais listar os servizos e o seu estado, podendo por exemplo determinar cales están activos así:
service --status-all 2>/dev/null|grep '\[ + \]'


domingo, 2 de diciembre de 2012

Coñecendo as sinais de Unix [GNU/Linux]

Os procesos Unix reciben sinais cando un evento "excepcional" acontece, isto pode ser por que o usuario interrumpe o proceso automáticamente ou de forma manual (sóabos o de deter procesos con Control-C, pois envía unha sinal), por que intentou acceder a unha posición de memoria que non lle corresponde (o infame "Segmentation fault") ou quizais por que intenta executar unha intrucción inválida (ben, isto é menos habitual, pero pode acontecer)... enfin que hai unha boa manchea delas pero normalmente quedamos nas máis coñecidas, hoxe ímos ver as que utiliza Linux (poden variar sutilmente entre os distintos sistemas operativos).

miércoles, 28 de noviembre de 2012

Amañando erros gracias aos logs [GNU/Linux]

Boas a todxs,

Esta semana imos falar da detección de erros na nosa distribución de GNU/Linux. A idea ven dun día no que paseando pola comunidade de ubuntu en galego vin que estaba recén publicado un fío donde, @dinisinho, pedía axuda cun problema que tiña na súa máquina con Ubuntu instalado. A información que tiña era pouca, unha descripción por enriba do problema, concretamente, cando executaba o gedit ou o transmission pechábaselle a sesión. Con esa información diagnosticar algo, a menos que tiveses exactamente o mesmo problema é complicado, que podemos facer? Consultar os logs do sistema.

Podemos facelo do seguinte xeito:
$ cd /var/log/
$ ls -la

Aí veremos toda unha serie de logs pero os que nos teñen que interesar son o "messages" que é o log da sesión actual ou ben, se foi un problema vello nos chamados message-XXXXXXXX. Para poder ver o arquivo temos que ser root así que facémolo do seguinte xeito:
$sudo gedit messages

Pois ben, unha vez aquí é cuestión que cando teñamos o problema ir a consultalo e cara o final do log de messages deberá aparecer algún tipo de erro.
Realmente funciona? Pois a min nunca me pasara tal, eu só tiña lido e escoitado falar e din a idea, logo @dinisinho foi quen puido comprobar que saltaba un erro relacionado con Xorg.0.log e Xorg.0.log.old, é dicer, problemas coa gráfica, proceder a solucionalo e compartilo coa comunidade.
Cal foi a solución? Pois neste caso polo visto foi culpa dos drivers, non se lle instalaban ben e era por culpa do linux headers. Que non estaba instalado/estaba sen actualizar.

Aquí podedes consultar o fío do problema no propio foro.

A verdade é que aprender así, entre todxs, é como máis presta :)

Agardo gostásedes!

Saúde!

domingo, 25 de noviembre de 2012

Obter os métodos permitidos nun servidor HTTP [Twitcode XVII][Bash]

Traballando con HTTP os métodos máis coñecidos son GET e POST pero existen máis, por exemplo HEAD (coma GET pero sin descargar o arquivo, só as cabeceiras), PUT (para subir un arquivo) ou DELETE (para eliminalo) entre outros, habendo un deseñado para saber de cales se pode tirar, OPTIONS (que fai iso, lista-las opcións), e podemos poñelo en práctica con:

OPTIONS(){ echo -e "OPTIONS / HTTP/1.1\nHOST: $1\nConnection: close\n"|nc -q 10 $1 80|grep -i allow|awk '{print $2}';}

Nota: está en maiúsculas a semellanza dos comandos `HEAD`, `GET` ou `POST`.

Por exemplo:
$ OPTIONS(){ echo -e "OPTIONS / HTTP/1.1\nHOST: $1\nConnection: close\n"|nc -q 10 $1 80|grep -i allow|awk '{print $2}';}
$ OPTIONS apache.org
GET,HEAD,POST,OPTIONS,TRACE
$ 

Iso sí, non está soportado en todo-los servidores...
$ nc google.es 80
OPTIONS / HTTP/1.1
HOST: google.es

HTTP/1.1 405 Method Not Allowed
Content-Type: text/html; charset=UTF-8
Content-Length: 962
Date: Sun, 25 Nov 2012 21:20:39 GMT
Server: GFE/2.0
Connection: keep-alive

<!DOCTYPE html>
...
$ 

Saúdos

Buscando a orixe do erro dun programa [C]

O programar é inevitable mete-la pata de cando en vez, posiblemente xerando algún tipo de error que a computadora non tarda en facer notar, se isto é nun entorno interpretado coma en Python, pois non hai problema xa que temos toda a información a man.
Traza do erro con número de liña e motivo incluído, cousa fina

Nembargantes se optamos por un entorno compilado coma C, as cousas complicanse.
Dicía un profesor meu
 "C non é coma pascal, en pascal se compila xa tes media bataia gañada;
en C todo compila, a loita ven despois"
É ben certo, pero coñecer un par de ferramentas alivia moito a carga.

martes, 20 de noviembre de 2012

Listar quenes contribúen nun repositorio GIT segundo o número de commits [Twitcode XVI][Bash]

Inda que sexa un pouco indiscreto e so vaia a amosar o número de commits e non a contribución real...

git log|grep Author|sort|uniq -c|sort -nr|awk -F ': ' '{print $2}'

Ou engadindo `| head -n 20` pra so amosar as primeiras 20 posicións.

Por exemplo, sobre o repositorio de midori (un navegador web lixeiro) [ git://git.xfce.org/apps/midori ]

martes, 13 de noviembre de 2012

Curvas Bézier [python]

Hoxe ímos ver un pequeno truquiño para facer fácilmente curvas suaves, esta é unha técnica moi usada nos gráficos de computadores. As curvas bézier foron utilizadas xa no ano '62, por (adiviñade quén) Pierre Bézier para deseñar superficies de automobiles e, volvendo á época actual pódense atopar entre outras moitas cousas no canvas de HTML5.


Así que ímos ver como funcionan por detrás...

domingo, 11 de noviembre de 2012

Limpando os arquivos temporais. [Twitcode XV][Bash]

Boas a todxs,

Aqui vai un twitcode máis, limpando os temporais do usuario actual ou outro usuario en GNU/Linux:

#!/bin/bash
user=`logname`
rm -r `find /tmp/ -user $user` && rm -r `find /var/tmp/ -user $user`

Tuneando o noso grub! [Ubuntu 12.10 e anteriores]

Boas a todxs,

Hoxe toca "tunear" o grub2, o xestor de arranque default en moitas distribucions de GNU/Linux, concretamente para versións de Ubuntu 12.10 e anteriores, en fedora aínda nunca me puxen. Para comezar temos que saber que o arquivo de confgiuración do grub, está en /boot/grub2/grub.cfg, abrindoo con gedit:
gedit /boot/grub2/grub.cfg

Podemos observar como nos avisa de que non editemos este arquivo xa que se crea a partires dunha serie de arquivos ubicados en /etc/grub.d e o arquivo grub /etc/default que nos permitirá algunha información extra como o timeout entre outras cousas.
Pois ben, agora faremos un par de pequenas modificacións, primeiro imos cambiar algo o aspecto, comecemos coa cor de fondo e o resaltado á hora de escoller o SO que queremos cargar, imos a /etc/grub.d e abrimos o arquivo chamado 05_debian_theme:

miércoles, 7 de noviembre de 2012

Compilando un pequeno programa en [C] para Android (rooteado)

Se alguén trastea cun android rooteado un rato acabará atopándose cun programa do SDK  `adb`, que entre outras moitas cousas permite levantar unha shell no celular, se resulta que se engade un `bash` á mistura resulta que temos un mini computador totalmente capaz nas mans e non necesariamente atado ás limitacións de Java e a interface puramente táctil do resto de android... e que se fai cos computadore? prográmaselles!

domingo, 4 de noviembre de 2012

Sacando a nosa IP (limpa) por pantalla. [Twitcode XIV][Bash]

Boas a todxs,

Pois o twitcode desta semana serve para sacar a nosa IP limpa por pantalla, sen outros datos que nos da ao facermos un ifconfig, o script é así:

ifconfig | grep inet | grep -v 127.0.0.1 | cut -d: -f2 | cut -d\  -f10

sábado, 3 de noviembre de 2012

Enviando mails con Python! [Python][SMTP]

Boas a todxs,

Hoxe imos a aprender a usar a librería smtp (send mail transfer protocol) ou noutras palabras, imos enviar correo electrónico con un script en python, o código que adxunto é unha pequena porción dun script maligno que tiña feito fai un tempo.

O primeiro que temos que coñecer é como funciona o protocolo de envío de mail (SMTP) e que é MIME (Multipurpose Internet Mail Extensions). Están moi ben explicados na galipedia e penso que o importante é o que segue a continuación, así que aí vai primeiro o código e logo con explicacións.

martes, 30 de octubre de 2012

Outra de esteganografía con imáxes [python]

Fai pouco máis de un mes, hacklego amosaranos unha técnica de esteganografía neste mesmo blogue, daquela a forma de ocultar a información era deixala o final do arquivo, polo que a imaxe non se vía modificada, esta técnica é chamada EOF (de End Of File, "Fin do arquivo").

Desta vez ímos probar outra forma de facelo, LSB (de Least Significant Bit, "Bit menos significativo"), isto é, en vez de mante-la integridade dos arquivos por separado, ó arquivo a ocultar esconderase nos bits con menor significado da imaxe, supoñamos que cada píxel está composto por 3 cores "primarias": vermello, verde e azul, cada un deles está a súa vez representado por un número de bits, por exemplo, nun BMP de 24 bits 8 deles corresponderían a cada cor. Se temos 8 bits para representar a forza do vermello, cambiar o máis significativo nótase 128 veces máis que o menos significativo, cambiar un faría moi claro o cambio mentres que cambiar o outro é indistiguible a simple vista.

lunes, 29 de octubre de 2012

Descubrindo os arquivos que abre un programa [Twitcode XIII] [Bash]

Imáxinadevos que un programa da problemas e parece que non lé a configuración, como podemos saber onde a busca? pois lendo do que fai "open":
strace <comando> 3>&2 2>&1 1>&3 |grep ^open


Agora a explicación

domingo, 28 de octubre de 2012

Tracerouteando con PING!

Boas a todxs,

Hoxe imos a falar dun par de comandos de rede, concretamente das aplicacións ping e traceroute. Basicamente imos entender como funcionan e aprender a "traceroutear" con ping.

Que é ping (Packet Internet Groper)? É un programa que se emprega polo xeral para medir a latencia ou tempo de resposta na comunicación entre dous puntos remotos. Isto faise enviando paquetes de control (ICMP, Internet Control Message Protocol), construidos no nivel de capa de rede, estes paquetes o que fan é notificar cando existe un erro para un servicio determinado ou cando un router ou host non se dan localizado. O comando ping implementa unha request de resposta para ese paquete puidendo así recibir a información desaxada coma o tempo de resposta ou a cantidade de hosts polas que pasa.

Que é traceroute?

lunes, 22 de octubre de 2012

Montando redes con Netkit (II: Montando un laboratorio)

Continuamos co Netkit, proxecto que usa unha distro Debian Linux modificado para executarlo no espazo de usuario (é dicir, coma un programa normal), agora veremos coma montar un "laboratorio" no que conectar unhas cantas máquinas.

Antes de nada ubicarémonos nun directorio vacío, iremos creando arquivos así que é mellor evitar manter as cousas separadas ;).

Apagar a luz da pantalla dun portátil [Twitcode XII][Bash]

echo 0 | sudo tee /sys/class/backlight/*/brightness

Nota: Para darlle luz de novo podemos facelo no atallo de teclado que espero que teña :P.

A orde anterior pon a 0 a luz que ilumina a pantalla dun portátil (descoñezo se serve nun ordeador de sobremesa).

sábado, 20 de octubre de 2012

Mapeando imaxes con GIMP para a nosa páxina web.

Boas a todxs,

Esta semana imos ver como mapear as nosas imaxes dun xeito moi, moi sinxelo, para isto empregaremos o gimp, mapear empregase en html para definir unha area dunha imaxen na que clickeando enriba nos levará a unha determinada etiqueta, directorio ou ligazón que desexemos. Unha vez aberta a nosa imaxe co gimp imos a filters > web > image map, como indicamos na imaxen.

A continuación

lunes, 15 de octubre de 2012

Montando redes con Netkit (I: instalación)

Netkit é un proxecto que usando User Mode Linux como máquinas virtuais para experimentar coas redes, a ventaxa é que cada máquina consume pouca CPU, uns 15 megas de memoria e danos bastante control sobre a topoloxía da rede. Sabendo isto comezamos polo principio, hoxe ímos instalalo:

domingo, 14 de octubre de 2012

Colorear unha expresión regular [Twitcode XI][Bash]

A seguinte función en bash toma un parámetro e colorea o que recebe pola entrada estándar segúndo esa expresión regular.

colorize () { sed "s/$1/\x1b[1;91m&\x1b[0m/g"; }

Tira do programa `sed` para substituir o parámetro por `\x1b[1;91m` (símbolo que advirte a consola que coloree de vermello o que segue), `&` (a cadéa orixinal), e `\x1b[0m` (fin da coloración).

sábado, 13 de octubre de 2012

Protocolos nas comunicacións.

Boas a todxs,

Esta semana imos falar de protocolos, a idea de escreber sobre eles veu cando en clase de linguaxe de marcas a xente facía as cousas sen preguntarse "por que?" e cando tocou facer ligazóns a direccións non locais, descargas ou correo, houbo un bloqueo xeralizado por unha chorrada. Moitas veces téndese a estudar sen preguntarse moi ben como funciona o que hai detrás e neste caso, entendendoo resultaría todo máis sinxelo así que vamos definir un pouco que é un protocolo, algún exemplo deles e logo unha breve explicación do seu uso en html.

lunes, 8 de octubre de 2012

Esas xoias perdidas [Xogos]

Boas, hoxe ímos botarlle unha ollada a algúns xogos dos repositorios de Trisquel que teñen ese aire pouco pulido que teñen os clásicos, con gráficos e  mecánica simple, cunha historia que varía entre nula e inexistente son xogos que un non presentaría a un concurso pero entreteñen mentres un, por exemplo, espera o tren e curiosamente soen ter ideas interesantes na súa base.

domingo, 7 de octubre de 2012

Limpar espazos o principio e final dunha cadea [Twitcode X][C]

Hoxe imos copiar unha cadea sen os espazos o comezo e o final:

char *strip(char *s){for(;s[0]==' ';s=&s[1]);s=strdup(s);int l=strlen(s)-1;while(s[l]==' ')s[l--]='\0';return s;}

Actualización: @varogb7 aporta unha versión máis eficiente, que só recorre unha vez a cadea (a diferencia das dúas que o fai o anterior), tedes o código aquí a continuación. Moitas grazas polo apoio! ;)

Xa hai SHA-3! [Criptografía]

Boas a todxs,

Sinto o retraso da entrada desta semana, por desgraza houbo pouco tempo para facer unha publicación, desta volta traio unha noticia traducida, xa hai sha3!

Para que non o saiba, SHA é un algoritmo de "hash" (cifrado) seguro (Secure Hash Algorithm) que foi deseñado pola Axencia Nacional de Seguridade dos Estados Unidos e publicado pola Instituto Nacional de Estándares e Tecnoloxía (NIST), esta semana finalizou coa última ronda a competición polo 3º estándar deste cifrado e os gañadores foron KECCAK e a continuación a noticia:

O Instituto Nacional de Estándares e Tecnoloxía (NIST) alégrase de anunciar a selección de KECCAK como o gañador da competición de Algorimos Hash Criptográficos SHA-3 e como novo algoritmo de hash SHA-3. KECCAK foi deseñado por unha equipa de criptógrafos de Bélxica e Italia, eles son:

• Guido Bertoni (Italy) of STMicroelectronics
• Joan Daemen (Belgium) of STMicroelectronics
• Michaël Peeters (Belgium) of NXP Semiconductors
• Gilles Van Assche (Belgium) of STMicroelectronics.

lunes, 1 de octubre de 2012

Escrebendo un script que avise no email de novas entradas nun Atom [python] (Parte 2: a base de dados e o correo)

Nun post anterior viramos como escreber un programa que lera os Atom, neste imos ver como decatarnos de que unha entrada é nova e como enviala por correo electrónico.

A base de dados
Como base de dados imos a usar SQLite3, que non require software externo e python implementa como parte da libraría estándar: http://docs.python.org/library/sqlite3.html

domingo, 30 de septiembre de 2012

Taboas de multiplicar [Twitcode IX][Python]

Boas a todxs,

Esta semana o twitcode que traio é moi, moi simple. Basicamente serve para sacar en pantalla as míticas taboas de multiplicar que nos ensinaban no colexio, a idea xurdíu de porme a facer un script que sacase as N equivalencias entre binario, octal, decimal e hexadecimal e outras taboas bizarras. Como algunhas levaron bastantes liñas de código ocurriuseme facer algo máis sinxelo para que cando menos aproveitar o conceito. Igual a alguén lle serve para mirar como funciona o "for" en python.

#Recorremos un elemento a do 1 ao 9.
for a in range(1,10):
 #por cada elemento a recorremos un b no rango do 1 ao 10
 for b in range (1,11):
  #Imprimimos a * b = resultado
  print "%i * %i = %i" % (a,b,a*b)

Saúde!

jueves, 27 de septiembre de 2012

Cifrado Espartano/Transposición. [Criptografía]

Boas a todxs,

Máis unha semana volto coa criptografía (non o podo evitar), desta vez falarei do cifrado espartano, tamén coñecido por escítala ou, máis actualmente cifrado de transposición.

En que consiste este cifrado? Pois ben, antiguamente, o que se facía, era coller 2 trozos de madeira co mesmo diámetro, un para o emisor e outro para o receptor da mensaxe, logo, o que se facía era enrolar unha cinta de coiro nel e escribir a mensaxe, de xeito que, cando o receptor a recibise, enrolando o trozo de coiro no cilindro do mesmo diámetro podería ler o contido do trozo de coiro mentras que o resto só verían unha ringleira de letras sen sentido aparente. Unha imaxe para que vos fagades unha idea:

lunes, 24 de septiembre de 2012

Escrebendo un script que avise no email de novas entradas nun Atom [python] (Parte 1: o lector de Atom)

O Atom é un formato baseado en XML comunmente utilizado como fonte de novas, por exemplo para decatarse de cando hai novos posts nun blogue sen ter que revisalo manualmente, normalmente úsase un programa con este fin, pero nos ímos escribir ún que nolo mande o correo electrónico (esa parte do proceso realizarase na segunda parte).

A URL sobre a que faremos as probas é a de este blogue, http://hackliza.blogspot.com/feeds/posts/default.

Ímos enton a comezar polo principio, a descargar ese arquivo é descompoñelo.

domingo, 23 de septiembre de 2012

Listar os contidos dun grupo de arquivos xunto co seu nome: Buscando erros nun texto [bash][Twitcode VIII]

head -v -c-0 <archivos>
Head por defecto amosa as 10 primeiras liñas do contido dun arquivo, pero co -c-0 especificamos que queremos que lea todo ata o último caracter, e co -v pedímoslle que amose o nome dos arquivos, por exemplo:
$ head -v -c-0 *
==> fibonacci_recursivo.py <==
def fibonacci(n):
    if n < 2:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


numero = 10
resultado = fibonacci(numero)

print "Elemento numero", numero, "de fibonacci:", resultado

==> Makefile <==
build:
clean: 
Se o que queremos é que amose os nomes de arquivo e o número de liña o principio de cada unha, faríamos
$ grep -nH '' <arquivos>
Por exemplo:
$ grep -nH '' * 
fibonacci_recursivo.py:1:def fibonacci(n):
fibonacci_recursivo.py:2:    if n < 2:
fibonacci_recursivo.py:3:        return n
fibonacci_recursivo.py:4:    else:
fibonacci_recursivo.py:5:        return fibonacci(n - 1) + fibonacci(n - 2)
fibonacci_recursivo.py:6:
fibonacci_recursivo.py:7:
fibonacci_recursivo.py:8:numero = 10
fibonacci_recursivo.py:9:resultado = fibonacci(numero)
fibonacci_recursivo.py:10:
fibonacci_recursivo.py:11:print "Elemento numero", numero, "de fibonacci:", resultado
Makefile:1:build:
Makefile:2:clean: 

miércoles, 19 de septiembre de 2012

Esteganografía básica, resolvendo un sinxelo wargame.

Boas a todxs,

Esta semana voltamos con algo do que gosto bastante, criptografía, concretamente información oculta en imaxes, coñécese como esteganografía. Para ocultar información en imaxes hai moitos métodos e, evidentemente, uns máis complexos que outros. Todos coñecemos os códigos QR, non si? Pois tamén ocultan información e desde un móbel ou co programa axeitado podemos extraela sen maior problema. Neste caso imos resolver un wargame de esteganografía de nivel básico, dos que se poden atopar en probas de iniciación na rede. A imaxe en cuestión é esta:

lunes, 17 de septiembre de 2012

Lendo un arquivo .torrent [python]

Os arquivos .torrent gardan toda a información necesaria para describir un ou mais arquivos compartidos. A codificación utilizada chámase bencode, e é bastante fácil de ler, imos ver como facelo.

domingo, 16 de septiembre de 2012

Buscando erros nun texto [python][Twitcode VII]

Todo o mundo comete erros o escribir, pero buscalos é abondo fácil, baste con usar isto:
def fails(src, dic):
    d = set(re.findall("\w+", dic))
    return [w for w in re.findall("\w+", src) if not w.lower() in d]
(20 + 35 + 68 = 123)

Usa a libraría das expresións regulares `re` para separar por verbas e un diccionario de referencia para face-las comprobacións, por exemplo:

>>> import re
>>> fails("A libraría estándar de python inclúe un módulo para manexar peticións HTTP, podemos usala para ver a url de resultado de un deses acurtadores que nunca sabemos onde irán levar, so tempos que importar a libraría `urllib` e facer isto:",
  open("/usr/share/dict/galician").read())
['python', 'incl', 'HTTP', 'usala', 'url', 'acurtadores', 'urllib']
>>>

E non ten moita máis miga, como curiosidade e reflexión se tedes un rato libre igual vos interesa un artigo que fala de que programar xa non é o que era e que agora ata o que tiña algo de complexidade como era un corrector é trivial (na lingua de Shakespeare), traduzo máis ou menos o final:

jueves, 13 de septiembre de 2012

Creando o noso escáner de portos en python.

Boas a todxs,

Fai unhas semanas falei dos sockets, como exemplo empregamos un cliente e un servidor que se comunicaban entre si. Pois ben, fai un tempo atopeille outra utilidade, facer un scaner de portos, a idea ocurríraseme ao estar nun ordenador que non era meu, no que evidentemente non ía instalar software (nmap), non tiñamos acceso á configuración do router e precisabamos saber que portos estaban abertos ou fechados para mirar de configurar a mula :P. Pois ben, sempre que estamos nunha situación así podemos ir probando de un en un, ou de algo do que se falaba nas "3 leis do sysadmin", automatizar tarefas e facermonos perezosos, é dicer, un script que probe porto a porto cal está aberto e ao final informe do resultado.

domingo, 9 de septiembre de 2012

Como remapear o teclado

As veces pode ser útil cambiar a función dunha tecla por outra, por exemplo se usamos o editor VIM, andaremos continuamente buscando a tecla `Escape`, e o máis probable e que nunca usemos a de `Bloquear maiúsculas`, así que imos remapeala a `Escape`.

Primeiro temos que escribir isto no arquivo ~/.Xmodmap:
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

E logo aplicalo con:
xmodmap ~/.Xmodmap

Ler a url de destino dun acurtador [python][Twitcode VI]

A libraría estándar de python inclúe un módulo para manexar peticións HTTP, podemos usala para ver a url de resultado de un deses acurtadores que nunca sabemos onde irán levar, so tempos que importar a libraría `urllib` e facer isto:
urllib.urlopen(<a url>).geturl()

Por exemplo, na consola interactiva:
>>> import urllib
>>> urllib.urlopen('http://t.co/gNmsjWZ4').geturl()
'http://hackliza.blogspot.com.es/2012/09/as-3-leis-do-sysadmin-artigo-de.html'
>>> 

E sempre podemos encapsulalo coma unha función de bash no .bashrc
get_target (){ python -c "import urllib;print urllib.urlopen('$1').geturl()"; }

E usalo despois coma se fora un programa calquera
$ get_target http://t.co/gNmsjWZ4
http://hackliza.blogspot.com.es/2012/09/as-3-leis-do-sysadmin-artigo-de.html
$ 

Pode que resulte útil nestes días nos que os navegadores non están blindados de todo :P

jueves, 6 de septiembre de 2012

As 3 leis do sysadmin (Artigo de geekstuff de Ramesh Natarajan traducido ao galego)

Boas a todxs,

Esta semana non traio unha entrada propia, só unha traducción dun artigo publicado en "thegeekstuff.com" por "Ramesh Natarajan", nel fálanos que todo sysadmin (Administrador de Sistemas) debería estar sometido a 7 bos hábitos mais que se podían resumir en 3, é dicer, 3 leis básicas que todo sysadmin debería coñecer. Este artigo foi traducido en moitas linguas cada ano no "sysadminday" que é celebrado o último venres de xullo mais no meu caso veume á mente, como futuro sysadmin ao comezo do curso. Así que aí vai e agardo que vos resulte útil e interesante.

#Primeira Lei: Un SysAdmin debe respaldar (backup) TODO (e validar o backup regularmente).

jueves, 30 de agosto de 2012

GNU Privacy Guard [GPG](Parte II)

Boas a todxs,

Continuemos a falar do GNU Privacy Guard (GPG), desta volta faremos un enfoque máis práctico, é dicer, imos aprender a empregar esta ferramenta.

Comecemos xerando a nosa clave:

gpg --gen-key

Agora imos ter para elexir unha das seguintes opcións para elexir o tipo de clave desexado:

lunes, 27 de agosto de 2012

Como escreber unha `fortune` [entretemento]

Se estades acostumados a usar o terminal o final acabaredes por ver nalgún sitio unhas frases que saen nela cando se abre, poucas distros o fan por defecto (só Slackware a última vez que o probei), vexamos preparalo, usalo e engadir un novo.



domingo, 26 de agosto de 2012

A xenial precocidade de Gauss [Python][Twitcode IV]

"A xenial precocidade de Gauss"

Un twitcode con historia, continúen lendo :P

x=range(101)
i=1
while i < 50:
    suma=x[i]+x[-i]
    print '%s + %s = %s' % (x[i], x[-i], suma)
    i+=1
print 'Resultado: ', suma*i,

jueves, 23 de agosto de 2012

GNU Privacy Guard [GPG](Parte I)

Boas a todxs,

Desta volta vou falar do GNU Privacy Guard, unha ferramenta de cifrado e sinaturas dixitais que é un remprazo en software libre baixo licenza GPL do PGP (Pretty Good Privacy). Desta primeira volta só se falara da ferramenta e se explicará a instalación para a nosa distribución GNU/Linux doutra ferramenta con interfaz gráfica que nos permitirá comezar a "fuchicar" no GPG, na seguinte publicación veremos como manexar GPG, asinar correos electrónicos, ...

Xa sabemos que GPG é unha ferramenta de cifrado mais que é isto de cifrado?

lunes, 20 de agosto de 2012

Escrebendo un sniffer en [python] co scapy

Scapy é unha librería de python que permite fozar coa rede dunha forma incriblemente sinxela, dende enviar pacotes feitos a man para interromper unha conexión allea ou para experimentar cos protocolos a ler todo o que pasa pola rede, hoxe faremos iso, e dicir un sniffer.

A verba sniffer deriva do inglés `sniff` "olfatexar", xa que o programa "ule" todo o que pasa pola rede, pero non nos adiantemos os acontecementos...

Como instalar Scapy


Nun sistema Gnu/Linux a instalación da librería non ten máis complicación que instalar o pacote correspondente, nas distribucións baseadas en Debian: python-scapy
Se por exemplo escrebemos no terminal
sudo apt-get install python-scapy
o sistema descargará e instalará o paquete automáticamente.

Botando o cadelo a cazar

Para poñer o scapy a ler o que pasa pola rede so fai falla importa-lo módulo:
from scapy.all import *

E darlle a orde de facelo:
sniff(filter=<filtro>, prn=<función_manexadora>)

Nota: é posible que diga algo coma "WARNING: No route found for IPv6 destination :: (no default route?)", isto é normal e so ven dicindo que non atopa unha rede co protocolo IPv6, non ten maior repercusión.

Iso si, é necesario recordar que para isto fan falla permisos de superusuario, así que cando se execute haberá que telo en conta e, por exemplo, por un `sudo` antes do comando.

Se vos fixades, quedan duas cousas que definir (non son completamente necesarias, pero se queremos facer algo, pois... si), a primeira é un filtro, este escollerá os pacotes que se lerán, podemos por exemplo ignorar os que corresponden a un porto, orixe, destino ou protocolo de rede que non nos interesa. A segunda é una función que receberá o pacote e (previsiblemente) fará o que queiramos que faga con el.

Os filtros


Os filtros empregados por Scapy son os filtros propios do `tcpdump`, un programa sniffer que xerou a librería do mesmo propósito `libpcap`, que a súa vez forma parte da base de `scapy`.

Un exemplo de filtro sería, "tcp" para só ler as conexións feitas a través de TCP, ou "port 80" para as conexións na que o orixe ou destiño sea o porto 80.

Este tema é bastante extenso de por si, pero baste saber que os filtros podense compoñer utilizando "not" coma operador "negación", "&&" coma operador "e lóxico" e "||" como operador "ou lóxico".

Pódese encontrar máis por exemplo en [ http://www.alexonlinux.com/tcpdump-for-dummies#packet_filtering ] ou facendo unha busca [ https://duckduckgo.com/html/?q=tcpdump+filters ].


A función de callback


A función non ten gran misterio, recebe coma parámetro o pacote, así que para ir pechando veremos como facer un sniffer para contrasinais de FTP, así vemos a función traballar con todo o conxunto.

#!/usr/bin/env python
# coding: utf-8

from scapy.all import sniff, TCP

# Os servidores FTP funcionan sobre TCP e (normalmente) no porto 21.
filtro = "tcp && port 21"

# Lee un pacote e avisa se atopa algo que 
# poida ser un usuario ou contrasinal
def manexadora(pacote):
    # Lemos os dados que envía (o payload en inglés)
    dados = pacote[TCP].payload

    # Senon ten nada, voltamos
    if dados is None:
        return None

    # Se o ten convertémolo nunha cadea de caracteres
    else:
        dados = str(dados)
        

    # No FTP, cando alguen se autentica primeiro manda
    # unha cadea con 'USER ' e o nome de usuario
    # e despois 'PASS ' e o contrasinal, imos buscar esas
    # referencias.
    if (dados.startswith("USER ") or
        dados.startswith("PASS ")):

        # Se a función manexadora devolve algo, o sniffer
        # mandao pola pantalla.
        # Recordando elimiñar os saltos de liña ou espacios
        # o final da cadea
        return dados.strip()

# Para rematar, lanzamo-lo sniffer
sniff(filter=filtro,
      prn=manexadora)


E iso é todo, espero que resultara interesante.

Saúdos

domingo, 19 de agosto de 2012

Engadindo todos os elinks dunha páxina o amule [bash][Twitcode III]

for i in `curl "<url>"|grep -Po 'ed2k[^"]*'`;do echo Add $i;done|amulecmd -P <pass do amule>

Cal é o truco? o amule pódese configurar para utilizalo a través dun control remoto, o 'amulecmd' (hay que activalo nas preferencias), neste caso se no amulecmd escrebemos 'Add <link>' engade o link o amule.

O resto é sinxelo:
curl "<url>"
Conectase a url e mostra os contidos.

grep -Po 'ed2k[^"]*'
Toma todo o texto que se pasa e só deixa pasar o que corresponda (opción o) coa expresión regular (opción P) 'ed2k[^"]*', isto é: busca unha cadea que comeza por ed2k e que sigua con calquer número de caracteres distintos dunha commilla dobre ".

for i in <a saída do anterior>;do
    echo Add $i
done|amulecmd -P <pass do amule>
Por cada resultado no procesamento anterior envíase unha liña con 'Add ' e o link atopado a un proceso de amulecmd.

Saúdos.

jueves, 16 de agosto de 2012

Sockets, creando un cliente e un servidor (Python)

Boas a todxs,

Hoxe imos falar de comunicacións, concretamente grazas a ese conceito astracto co que se designa ao punto final dunha conexión ao clásico conceito de socket e concretamente explificaremos a súa utilidade con Python.

Para que se utilizan os sockets? Para comunicarse con outros programas no mesmo ou noutro PC.

Os sockets defínense por IP, porto e protocolo. En python, concretamente hai unha librería para isto coa que podemos crear un obxeto "socket":

socket = socket.socket()

lunes, 13 de agosto de 2012

Prototipando Python, MySQL (por separado) e o que queiras no emacs

Fai uns días atopei que o emacs era unha ferramenta moito máis interesante do que tiña pensado para facer pequenos prototipos ou fozar no SQL, pero comecemos polo principio.

domingo, 12 de agosto de 2012

jueves, 9 de agosto de 2012

Wargames

Boas a todxs,

Aquí estou máis unha semana cunha publicación, desta volta vou falar dos wargames enlazando coa primeira entrada que fixen neste blogue nela facía referencia a estes, cando desarrollei o script para resolver o cifrado césar foi para non ter que aplicalo letra a letra nun texto bastante extenso que me atopei nun reto, concretamente nun documento de texto dentro dunha imaxe.

Pois ben, que son os wargames?

lunes, 6 de agosto de 2012

Escrebendo un salvapantallas para Gnu/Linux [C]

Os salvapantallas son algo que sempre me chamou poderosamente a atención pero ata fai pouco non sabía como se escribían, hoxe aprenderemos a facer un para o XScreensaver do Gnu/Linux.

domingo, 5 de agosto de 2012

Calculo de PI usando o conxunto de Mandelbrot [C] [Twitcode (I)]

Estreamos sección con este código:
main(){int i=1,p=10000000;complex c=-3./4+I/p,z=c;for(;++i<5*p;)if(pow(creal(z=z*z+c),2)+pow(cimag(z),2)>=4)exit(printf("%i\n",i));}

Require as seguintes cabeceiras:
// Totalmente necesarias
#include <complex.h>

// Estándar, para evitar queixas do compilador
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

jueves, 2 de agosto de 2012

Que é GNU/Linux?

Cando falamos de "Linux", de que falamos? Pois ben, nesta entrada intentarei explicar un pouco de que vai o asunto, os usuarios máis avanzados ou máis interesados polo tema seguro xa o saberán mais un grande nº de xente pode que descoñeza realmente o que vou comentar a continuación, é normal, seguramente todxs nos nosos incicios (inclúome no saco) non sabiamos realmente a que nos referiamos.

Moitas veces referímonos ás distintas distribucións de GNU/Linux como "Linux", é un erro común pensar que un sistema operativo (SO de aqui en diante) é todo o conxunto de aplicacións (navegador web, explorador de arquivos, reproductor de audio, etc...) cando en realidade, practicamente, só nos referimos ao kernel (nucleo).

Entón, a que nos referimos con SO e que é o kernel? O SO é un conxunto de programas que efectúan a xestión dos procesos básicos dun sistema informático, é dicer, non é máis que un soporte para facilitar ao usuario a interacción coas aplicacións diseñadas por outros usuarios. Por tanto o kernel é o principal responsábel de facilitar aos distintos programas acceso seguro ao hardware do PC ou en forma máis básica, é o encargado de xestionar recursos a través de servicios de chamada ao sistema, é a parte máis importante do software do SO.

Que é Linux entón?

lunes, 30 de julio de 2012

Programando en galego [C]

Boas, xa que é a miña primeira entrada no blogue imos a empezar con algo de humor, imos ver como convertir a linguaxe de programación C ao galego, así como o oídes. Todo o truco está no preprocesador, que permite sustituir partes da linguaxe antes de compilar, por exemplo, se no principio do programa escrebemos:
#define se if
#define senon else
Logo podemos facer:
int e_par(int n){
    se (n % 2 == 0){
        return 1;
    } 
    senon{
        return 0;
    }
}
Nota: Obviamente facer isto non é unha boa idea se mais xente vai ver o código, e unha curiosidade e como tal debería quedar ;).

miércoles, 25 de julio de 2012

[Python Code]/Criptografía: Caesar Method.

Boas a todxs, 

Non sei se coñecedes algo de criptografía mais aí vai unha pequena explicación. Criptografía vén de "krypto" (oculto) + "graphos" (escribir), é dicer, escritura oculta, noutras palabras é a arte de cifrar e descifrar mensaxes ocultos en textos que en ocasións parecen non teren sentido.

A criptografía é algo moi presente na seguridade informática pois é preciso cifrar contrasinais, comunicacións e determinada información. Nesta ocasión, ocurriuseme escribir sobre criptografía ao atoparme un reto así nun wargame (Xogos de seguridade informática dos que máis adiante falarei deles).

Nesta proba atopeime co cifrado césar, tamén coñecido como cifrado por desprazamento, é un dos cifrados máis sinxelos e antigos da historia, un método de sustitución que consiste en mudar unha letra no texto por outra que se atopa un nº fixo de posicións máis adiante. O cifrado orixinal desprázase de 3 en 3, e dicer cambia o A polo D, o B polo E, etc... Por exemplo para LIBRE sería QÑHXK. Cando se trata dunha palabra ou dúas facelo a man é bastate sinxelo mais cando toca cifrar ou descifrar un texto de grandes dimensións, coma no wargame é máis coñazo e por iso creei esta ferramenta en python que serve para cifrar e descifrar por este método un texto con calquer extensión e con calqueira desprazamento no abecedario. Agardo fose útil esta información, o script a continuación: