
Código fuente del libro «Black Hat Python» de Justin Seitz. El código se ha convertido por completo a Python 3, se ha reformateado para cumplir con los estándares PEP8 y se ha refactorizado para eliminar problemas de dependencias relacionados con la implementación de librerías obsoletas.
Código fuente del libro "Black Hat Python" de Justin Seitz. El código ha sido convertido por completo a Python 3, reformateado para cumplir con los estándares PEP8 y refactorizado para eliminar problemas de dependencia derivados de la implementación de librerías obsoletas.
Aunque se podrían haber implementado muchas optimizaciones en el código fuente presentado a lo largo del libro, el código se dejó sin alterar en la medida de lo posible para que dichas modificaciones puedan ser aplicadas por el lector como mejor le parezca. El código tal y como está necesita serios esfuerzos de refactorización que van desde docstrings hasta type hinting y manejo de excepciones, sin mencionar mejoras como context managers, pero estos problemas por sí mismos pueden beneficiar al lector si tiene la intención de implementarlos. También presenta muchos bugs originados por la indentación que han sido corregidos para evitar errores fatales durante la ejecución.
Una conversión similar a esta ha sido publicada por mí con el código fuente del libro "Violent Python", de TJ O'Connor. Échale un vistazo aquí si aún no lo has hecho ya.
Simplemente elige un directorio (DIR) en el que clonar el proyecto usando
git clone, crea un nuevo entorno virtual o venv para él (recomendado
) e instala los requisitos usando pip install.
user@host:~/DIR$ git clone https://github.com/EONRaider/blackhat-python3
user@host:~/DIR$ python3 -m venv venv
user@host:~/DIR$ source venv/bin/activate
(venv) user@host:~/DIR$ pip install -r requirements.txt
Correcciones críticas de errores que tuvieron que realizarse para implementar correctamente el código fuente y evitar errores fatales:
chapter02/bh_sshserver.py requería la clave RSA contenida en el archivo test_rsa.key, ahora incluido en el directorio correspondiente.chapter03/sniffer_ip_header_decode.py & sniffer_with_icmp.py & scanner.py tenían serios
problemas en la definición de los tamaños de los paquetes IP y la portabilidad entre arquitecturas de 32/64 bits
debidos a problemas en la implementación de struct. Más sobre estos
problemas en este hilo de Stack Overflow.chapter03/scanner.py usaba la librería netaddr, que ya no recibe
mantenimiento y presenta muchas incompatibilidades con Python 3.
Por esa razón, el código ha sido refactorizado y ahora usa el módulo ipaddress
de la stdlib de Python.chapter04/arper.py & mail_sniffer.py usaban la librería , que no es
compatible con Python 3. Por esa razón, el código ha sido refactorizado y
ahora usa la librería .Las contribuciones en otros idiomas se pueden consultar aquí:
Por sentido común, primero intenta discutir el cambio que deseas hacer en este repositorio a través de un issue.
scapykamenechapter04/pic_carver.py ahora usa la librería opencv-python en lugar de
cv2. El módulo "cv2.cv" estaba obsoleto y ha sido reemplazado. El parámetro
"cv2.cv.CV_HAAR_SCALE_IMAGE" del código original fue reemplazado por
"cv2.CASCADE_SCALE_IMAGE" debido a este commit.chapter05/content_bruter.py requería una lista de palabras para funcionar. Se ha añadido
al capítulo como all.txtchapter05/joomla_killer.py requería una lista de palabras para funcionar. Se ha añadido
al capítulo como cain.txtchapter06/bhp_bing.py & bhp_fuzzer.py & bhp_wordlist.py han sido
reformateados para cumplir con PEP8, aunque algunas advertencias seguirán
apareciendo debido a la necesidad de ajustar los nombres de clase a camel-case en
esta aplicación específica sobre Burp Suite.chapter06/jython-standalone-2.7.2.jar está disponible como una versión más actualizada
del archivo en comparación con la presentada en el libro.chapter07/git_trojan.py fue refactorizado para reemplazar la librería imp (ahora
obsoleta) por types. Se ha implementado una estructura de subdirectorios con los archivos de
configuración necesarios, tal como se indica en el libro. A la
variable "trojan_config" le faltaba la ruta relativa al subdirectorio config. Se añadió una llamada al método "to_tree" en la línea 60 para
evitar una excepción AttributeError generada por el código original.
Se incluyeron como comentarios instrucciones sobre cómo generar un token de acceso
en lugar de usar la contraseña en caso de que se esté utilizando 2FA.chapter08/keylogger.py requiere la librería PyHook para funcionar. Se ha incluido un archivo wheel
con la versión 1.6.2. Si es necesario, otras versiones pueden
descargarse desde aquí.chapter09/ie_exfil.py lanzaba errores debido al manejo de la variable plaintext
(que puede aparecer como una cadena o como una cadena binaria) cuando se pasaba
a la función "encrypt_string". Además, el uso de la librería base64 fue
corregido. Contribución de Enraged en
este commit.