PDF de programación - the original hacker 04 201402

Imágen de pdf the original hacker 04 201402

the original hacker 04 201402gráfica de visualizaciones

Publicado el 11 de Julio del 2017
1.354 visualizaciones desde el 11 de Julio del 2017
892,4 KB
42 paginas
Creado hace 10a (22/02/2014)
THE ORIGINAL HACKER
SOFTWARE LIBRE, HACKING y PROGRAMA-
CIÓN, EN UN PROYECTO DE

EUGENIA BAHIT


@eugeniabahit

GLAMP HACKER Y
PROGRAMADORA EXTREMA
HACKER ESPECIALIZADA EN PROGRAMACIÓN
EXTREMA E INGENIERÍA INVERSA DE CÓDIGO
SOBRE GNU/LINUX, APACHE, MYSQL,
PYTHON Y PHP. EUGENIABAHIT.COM

DOCENTE E INSTRUCTORA DE TECNOLOGÍAS
GLAMP CURSOS.EUGENIABAHIT.COM
CURSOSDEPROGRAMACIONADISTANCIA.COM

MIEMBRO DE LA FREE SOFTWARE
FOUNDATION FSF.ORG, THE LINUX
FOUNDATION LINUXFOUNDATION.ORG E
INTEGRANTE DEL EQUIPO DE DEBIAN
HACKERS DEBIANHACKERS.NET.

CREADORA DE PYTHON-PRINTR, EUROPIO
ENGINE, JACKTHESTRIPPER. VIM CONTRI-
BUTOR. FUNDADORA DE HACKERS N'
DEVELOPERS MAGAZINE Y RESPONSABLE
EDITORIAL HASTA OCTUBRE '13.

Buenos Aires, 25 de
Febrero de 2014

ÍNDICE DE LA
EDICIÓN NRO4

BASH S CRIPTING AVANZADO: SUSTITUCIÓN DE
PARÁMETROS Y MANIPULACIÓN DE VARIABLES........3

SEGURIDAD INFORMÁTICA: EUROPIOCODE, UN SISTEMA
DE CODIFICACIÓN DE CARACTERES BASADO EN EL
MODELO SAC DE 3 CAPAS......................10

INGENIERÍA INVERSA: SOLO EL “QUÉ” PUEDE
DESVELAR EL CAMINO HACIA EL “CÓMO”..........24

INGENIERÍA DE SOFTWARE: WRAPPERS Y DECORADORES
EN PYTHON...................................30

EUROPIOENGINE LAB: S ECURITYLAYER, UNA CAPA DE
SEGURIDAD INTELIGENTE........................37

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

3

BASH SCRIPTING
AVANZADO: SUSTITUCIÓN
DE PARÁMETROS Y
MANIPULACIÓN DE
VARIABLES
E

n la mayoría de los casos, tan solo se requiere una línea de
código y sin embargo, por lo general, nos olvidamos de
utilizarla u optamos por complejos algoritmos.

DE FORMA REALMENTE
SIMPLE Y SENCILLA, ES
POSIBLE MANIPULAR
VARIABLES EN BASH, PARA
RESOLVER NECESIDADES TAN
FRECUENTES COMO EL
CONTROL DE ARGUMENTOS
PASADOS AL GUIÓN HASTA
ACCIONES COMO RENOMBRAR
ARCHIVOS EN MASA.

Es notable también, la cantidad de veces que recurrimos a
lenguajes interpretados más recientes que bash, creyendo que los
mismos cubren ausencias que realmente no son tales. Recurrir a
lenguajes como Perl o Python en la creación de guiones de Shell es
tan frecuente que hasta llegamos a olvidarnos de la grandeza de
bash.

También es muy frecuente recurrir al empleo de comandos para
resolver necesidades que el lenguaje contempla en su propia
sintaxis.

MANIPULACIÓN DE VARIABLES:
BÚSQUEDA Y REEMPLAZO
En bash, es posible efectuar búsquedas y sustituciones de manera
rápida y flexible sin recurrir una lista interminable de comandos
concatenados. En este aspecto, la necesidad más frecuente con la
que nos encontramos, es sustituir determinadas apariciones
en una cadena de texto. Esto es posible con una simple
instrucción:

${variable//búsqueda/reemplazo}

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

4

Por ejemplo:

cadena='Hola mundo; Adiós mundo'
buscar='mundo'
reemplazar='¡mundo!'
echo ${cadena//$buscar/$reemplazar}

Arrojará el siguiente resultado:

Hola ¡mundo!; Adiós ¡mundo!

Vale aclarar que el código anterior es equivalen a:

cadena='Hola mundo; Adiós mundo'
echo ${cadena//'mundo'/'¡mundo!'}

Aunque en este caso en particular, en la búsqueda no serían necesarias las comillas.

Notar que la doble barra diagonal // es la que indica que la sustitución debe

hacerse en todas las apariciones

Es posible además, sustituir solo la primera aparición de la búsqueda en la cadena, con tan solo omitir
una de las barras diagonales del comienzo:

cadena='Hola mundo; Adiós mundo'
echo ${cadena/'mundo'/'¡mundo!'}
# Imprime: Hola ¡mundo!; Adiós mundo

LOS SIGNOS #, ## Y %, %% EN LAS SUSTITUCIONES
La almohadilla (#) se utiliza para identificar la búsqueda al comienzo de la cadena mientras que el porcentaje
(%), para identificarla al final.

Cuando alguno de estos símbolos está presente, se eliminará de la cadena aquella fracción coincidente con
el patrón de búsqueda:

${cadena#patron}
Retorna “cadena” SIN “patron”

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

5

Una sola almohadilla o porcentaje, encontrará en la cadena la parte más corta coincidente con el
patrón de búsqueda mientras que dos almohadillas o porcentajes, lo harán con la mayor fracción
coincidente. De esta forma, si el patrón a buscar fuese: *mun (el asterisco se leería como “cualquier cosa”
siendo la expresión completa: “cualquier cosa hasta la sílaba mun”), una sola almohadilla encontraría
coincidencia en “Hola mun”, mientras que dos extenderían la coincidencia hasta “Hola mundo; Adiós mun”:

cadena='Hola mundo; Adiós mundo'
echo ${cadena#*mun}
do; Adiós mundo

echo ${cadena##*mun}
do

Lo mismo sucede con el signo del porcentaje:

cadena='Hola mundo; Adiós mundo'
echo ${cadena%mun*}
Hola mundo; Adiós

echo ${cadena%%mun*}
Hola

Resumiendo, podríamos decir que:






El porcentaje busca desde el final de la cadena
La almohadilla busca desde el principio
Ambos eliminan de la cadena, el patrón que coincida
Un solo signo, busca la menor coincidencia mientras que dos, buscan la mayor coincidencia

La parte de la cadena que es suprimida, puede ser sustituida con una sintaxis sumamente simple:

sustitución${cadena#patron}
${cadena%patron}sustitución

Por ejemplo:

cadena='Hola mundo; Adiós mundo'
echo "*******"${cadena#*mun}
*******do; Adiós mundo

cadena='Hola mundo; Adiós mundo'
echo ${cadena%mun*}"*******"
Hola mundo; Adiós *******

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

6

Este último sistema, nos puede servir para, por ejemplo, cambiar la extensión de archivos en masa:

for archivo in $HOME/*.gif; do
echo -n 'Renombrando '
basename $archivo
mv $archivo ${archivo%*gif}jpg
done

O por qué no, para crear una copia de seguridad de los mismos:

for archivo in $HOME/*.gif; do
echo -n 'Creando copia de seguridad para '
basename $archivo
cp $archivo ${archivo%*gif}'gif.backup'
done

SUBCADENAS Y SUSTITUCIÓN
En bash, también es posible extraer una porción de una cadena utilizando la siguiente sintaxis:

${cadena:posicion}
${cadena:posicion:longitud}

Con la primera, obtenemos la porción desde posicion hasta el final mientras que con la segunda, la
obtenemos desde posicion hasta alcanzar la longitud indicada:

cadena='Hola mundo; Adiós mundo'
echo ${cadena:5}
mundo; Adiós mundo

echo ${cadena:5:5}
mundo

Utilizando el mismo método anterior, también podríamos simular una sustitución:

cadena='Hola mundo; Adiós mundo'
echo '*****'${cadena:5}
*****mundo; Adiós mundo

echo '***'${cadena:5:5}'***'
***mundo***

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

7

Teniendo en cuenta que con ${#cadena} se obtiene la longitud total de una cadena, podemos utilizar:
${#cadena}-cantidad para obtener una porción calculando una determinada posición desde el final:

cadena='Hola mundo; Adiós mundo'
echo ${cadena:${#cadena}-11}
Adiós mundo

CONTROL DE ARGUMENTOS
Cuando escribimos guiones cuyos argumentos pueden ser opcionales, a veces establecemos valores por
defecto para los mismos. Seguramente, en más de una oportunidad te habrás encontrado haciendo lo
siguiente:

if [ $1 ]; then
file_path=$1
else

fi

file_path=$DEFAULT_PATH

Sin embargo, bash dispone de una sintaxis mucho más simple para esto:

variable=${argumento:-VALOR_POR_DEFECTO}

Ejemplo:
file_path=${1:-$DEFAULT_PATH}

Pero lo anterior, es solo una de las tantas posibilidades que tenemos. A continuación, veremos todas ellas con
mayor detalle.

USO Y ASIGNACIÓN DE PARÁMETROS POR DEFECTO
En bash, se pueden utilizar valores por defecto en diferentes casos:

${variable-valor a usar si la variable no fue definida}
${variable:-valor a usar si la variable no fue definida o su valor es nulo}

Algunos Ejemplos:

echo ${foo-25} # foo no está definida. Imprime: 25
foo= # se define foo con valor nulo
echo ${foo-30} # No imprime nada porque foo ya fue definida en la línea anterior
echo ${foo:-55} # Imprime: 55 ya que foo fue definida pero su valor es nulo

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

8

Este método es ideal para utilizar en el control de argumentos, cuando éstos, no son pasados al guión:

declare -r DEFAULT_PATH=/etc/apache2/sites-available
apache_path=${1:-$DEFAULT_PATH}

En el ejemplo anterior, si no se pasa un argumento al guión, la variable apache_path toma como valor el de
la constante DEFAULT_PATH.

Vale aclarar que en todos los casos anteriores, el valor por defecto NO ES

ASIGNADO a la variable, solamente es UTILIZADO.

Eso significa que (retomando el ejemplo con la variable foo) si posteriormente se quisiera imprimir la variable
$foo, arrojaría un valor nulo ya que nunca se le ha asignado uno:

echo ${foo-75} # Imprime: 75
echo $foo # no imprime nada

Pero de ser necesario, también es posible asignar valores por defecto utilizando el signo de igualdad en
vez del guión medio:

${variable=valor de variable si no fue definida}
${variable:=valor de variable si no fue definida o su valor es nulo}

echo ${foo=25} # foo no está definida. Imprime: 25 asigna a foo el valor 25
echo $foo # Imprime: 25

foo= # se define foo con valor nulo
echo ${foo=30} # No imprime nada porque foo ya fue definida. El valor de foo no cambia
echo ${foo:=43} # Imprime: 43 ya que foo fue definida pero su valor es nulo.
# El valor de foo se establece en 25

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniab
  • Links de descarga
http://lwp-l.com/pdf5192

Comentarios de: the original hacker 04 201402 (1)

Imágen de perfil
26 de Mayo del 2018
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad