La guía del "grey hat" de la EFF [traduccion]

Encontre un_documento_de_la_EFF hasta el que llegue a través de el de "derechos_del_programador" (muy recomendable, por cierto) que puede resultar interesante para quién sin querer se pudo meter en problemas o simplemente tiene dudas sobre como avisar sobre vulnerabilidades y supuse que a alguien le puede parecer interesante, así que aquí va la traducción. Por cierto, esto gira en torno a las leyes en los EEUU, pero al fin y al cabo hoy en día en este mundillo son las que se acaban imponiendo, sin más... Un/a investigador/a de seguridad informática que ha violado la ley durante su investigación se enfrenta a un dilema al pensar si debe notificar a la compañía del problema que descubrió en uno de los productos de esa compañía. Al reportar el fallo de seguridad, el/la investigador/a revela que puede haberr cometido una actividad ilegal, lo que puede invitar a la denuncia o investigación criminal. Por

Pywc 0.4

Hoy estrenamos nueva versión de Pywc:

* Corregido un bug que incluía lo que sigue a "?" y "#" como parte de una
URL relativa, vamos que con una URL como "blablabla.com/
yoquese.php?asd=jejeje/123" , la ruta base antes quedaría en
"blablabla.com/yoquese.php?asd=jejeje/" y ahora en "blablabla.com/" (como
tiene que ser).

* Además se añadió un método para descargar datos que no se tienen que
parsear (para imágenes o archivos binarios, por ejemplo).
*

El código es este: pywc04.zip

Entonces la referencia quedaría así:

crawler( proxies ) Crea un objeto crawler, si se especifica una lista de proxies como_se_hace_con urllib .

crawler.download( url, archivo de salida, tamaño del buffer ) Descarga una url en el archivo de salida, opcionalmente se puede especificar el tamaño del buffer (por defecto 4096 bytes).

Más animaciones

Hoy solo colorinchos y código de Structure Synth. Vídeo en: http://videobin.org/+2ks/2vh.html

Este tardó 3 horas y media en ser trazado, lo que le hace a uno cuestionarse si será válido para cosas grandes (el video muestra el bucle dos veces)

Ah, sí, antes de nada decir que al parecer se puede establecer que al alacanzar el límite de recursividad de una regla se aplique otra con:

===============================================================================

rule maxdepth >

===============================================================================

El código javascript es bastante genérico:

===============================================================================

javascript

// Basado en la referencia // http://blog.hvidtfeldts.net/index.php/2010/11/scripting-in-structure-synth/

function pad(number) { number = number.toString(); while (number.length < 4) { number = "0" + number; } return number; }

Introducción a Structure Synth (y van 4), animaciones con la nueva versión

Pues sí, se supone que la serie se quedaría en el 2, pero resulta que acaban de_lanzar_la_versión_1.5_de_Structure_Synth, que añade:

* Un raytracer integrado, ya no hay que usar programas externos como
Sunflow

* Scripting con Javascript para hacer animaciones (a estas alturas más de
uno, entre los que me incluyo, ya debe estar salivando =D )

* Exportación de archivos OBJ (confieso que esto aún no se que es)

* Cambios varios... en la GUI, se añadio un generador de números
aleatorios para el preprocesador, etc
*

Y uno no se puede quedar sin hablar de ella =P La nueva versión se puede descargar aquí: http:// structuresynth.sourceforge.net/download.php

Empezamos...

Raytracer

PoC de login seguro sobre HTTP

A raíz de este_hilo_en_HackXCrack decidí programar un sistema de login que permitiese cierta seguridad ante atacantes pasivos aún funcionando sobre HTTP en plano, todo de forma transparente al usuario.

La idea es simple, cuando el usuario se intenta loguear, se le asigna un token que se utilizará como salt de una función_hash que se aplicará a la contraseña (yo he utilizado MD5 porque tenía el código_en_python a mano), el resultado de la función será el que se envíe. El utilizar un token es importante porque evita ataques_de_replay, es decir, que el atacante pase a través de la función hash, enviando el resultado directamente, no tendría que conocer la contraseña original si el resultado es siempre el mismo. Además es importante que el token lo establezca el servidor y nuncaquién se loguee, ya que lo podría modificar para que fuera el mismo que el del usuario original, con lo que se vuelve al ataque de replay.

Pero tiene bastantes problemas:








De algoritmos genéticos y entropía

Hoy presento una idea chorra como cualquier otra, pero que a mi personalmente me emocionó ver que funcionaba, es simplemente un conjunto de un intérprete y un programa que modifica un trozo de bytecode al azar, obviamente pensados para trabajar juntos.

La idea es usarlos para generar un algoritmo usando algo análogo a la evolución natural, aplicando un script (solo por comodidad) para que elija que rama del algoritmo debe ser la que prevalezca, el código con un ejemplo: instructolang.zip (el script usa un trozo de código que se puede encontrar aquí entropy.c, aunque va incluido en el .zip).

Por ahora está muy limitado, solo realiza las operaciones de suma, resta, intercambio de variables y asignación, de todos modos no creo que pueda llegar a ser turing completo por cosas como el problema de parada, que sería necesario resolver para evitar bucles infinitos.

Me olvide de añadir la licencia al código =P , tratadlo como si fuera WTFPL.

SniperlCat 0.3.1, pasado a perl estricto y correjidos bugs varios

Esta versión no trae nada nuevo, así que va a ser corto. Se pasó todo el código a perl estricto (use strict), y se corriguieron fallos tontos al interpretar las opciones de la línea de comandos, por ejemplo, si se daemonizaba después de lanzar un hilo, el hilo se cerraba por que lo hacía el proceso original =P

El trigger no cambia (bueno, en realidad cambia el notify-send, que en vez de poner 0.3, es 0.3.1, pero es estético). El código_completo_está_en_github , aunque lo importante es el Sniperlcat.pl [o_en_plano]

ps: Ya me dirán por que * no dejarán usar break; en estricto !?

Usando proxies con Python

Presento un pequeño código para usar proxies SOCKS 4 y 5 en python, en principio la idea era mostrarlo junto un servidor proxy en C, pero viendo que con esto se podía tumbar, tardará un poco más...

El código es este (para descargar completo más abajo): from socket import socket, AF_INET, SOCK_STREAM, inet_aton, getaddrinfo,\

              SOL_TCP

from string import letters

from random import choice

import sys

Lee siempre una cantidad de un socket

def sock_read(sock, n):

b = "" # Inicia el buffer

i = 0 # Tamaño del buffer

while (i < n): # Mientas no lee todo

   c = sock.recv(n - i) # Lee lo que falta



   if (len(c) < 1): # Si no se leyó nada

                    # es que el socket está cerrado

       raise Exception("Closed socket")



   b += c      # Añadir lo nuevo al buffer

   i += len(c) # y actualizar su tamaño

return b # Devolver el buffer

Convertir sockaddr a una dirección de red

def str2host(addr, ipv = 4):

for i in letters: # Si hay letras

De Firefox y URL's extrañas [Offtopic]

La verdad, no se me ocurre como explicarlo, pero encontre que  intruciendo el número "420269270299515438631900510129391513177391570263223450330471608719833573145727622663393847726701366096253366170285832918664116229882221533373" sacado de el resultado un post anterior, sin comillas en firefox, te lleva a una_página_web:

Sin embargo otros navegadores te mandan directamente al buscador (y se niegan a ir aunque pongas http:// delante), nslookup y dig dicen  'is not a legal name (label too long)' y telnet dice de primeras que "Name or service not known".

No creo que se pueda considerar un bug ni nada por el estilo, pero uno no puede evitar seguir tirando del hilo =P

Fibonacci rápido en python

No es gran cosa, pero aquí teneis una versión de los números_de_Fibonaccique no se demora mucho para obtener números grandes, por ejemplo, para el número de Fibonacci 10000, tarda 0.1 segundos

(Eliminé los números que hay por el medio para que no quede una imágen excesivamente grande)

El código es simplemente: global fibo

fibo={} # El diccionario, este es el quid de la question

def fibonacci(i):

global fibo

if (i in fibo): # Si esta en el diccionario

   return fibo[i] # No hay que buscarlo

else:

   if (i < 2): # Si es trivial, no hay que memorizarlo

       return 1

   else: # Sino, se busca

       res = fibonacci(i - 1)+ fibonacci(i - 2)

       fibo[i] = res # Se mete en el diccionario

       return res # Y se devuelve

El truco está en el diccionario, que evita que haya que recorrer todos los números muchas veces, a costa, claro, de un gasto de memoria.

Newer posts Older posts