lunes, diciembre 19, 2011

Introducción al Cracking en Linux 08 - ELF Dinámico

Otra entrega de los tutoriales sobre Cracking en Linux, en este caso profundizaremos en el enlazado dinámico, como se muestra en el formato ELF y como lo desarrolla el sistema GNU/linux.

Para todo esto tenemos un crackme muy especial y nuestro debugger preferido, GDB, que nos mostrara en directo como se realiza el proceso de reubicación.

Espero se entienda:

http://www.4shared.com/document/em1WBcOx/Introduccion_al_Cracking_en_Li.html

Nos vemos.
[JJ]

Enlaces relacionados:

http://cvtukan.blogspot.com/2011/12/introduccion-al-cracking-en-linux-07.html

http://cvtukan.blogspot.com/2011/11/introduccion-al-crackin-en-linux.html

jueves, diciembre 01, 2011

Introducción al Cracking en Linux 07- Formato ELF

Seguimos con la serie de tutoriales sobre manejo de binarios en GNU/Linux; esta vez tenemos un crackme un poco mas complicado, que nos da pie para estudiar el formato ELF a fondo, entender el registro de flags y como manejarlo con gdb, y para resolverlo, mucho lenguaje ensamblador y veremos las llamadas al sistema (syscall) :

http://www.4shared.com/document/hgxJQD3l/Introduccin_al_Cracking_en_Lin.html

Espero se entienda y sea útil para los que comienzan en este mundo del Cracking.

Un saludo
[JJ]

Enlaces relacionados:
http://cvtukan.blogspot.com/2011/11/introduccion-al-crackin-en-linux.html
Enlace

miércoles, noviembre 23, 2011

Introducir codigo asm Intel en gcc.

Buscando información, me he encontrado sitios donde comentan que el código asm dentro de un programa .c para gcc en Linux, debe ser escrito en el formato ATT. Mirando la pagina man de gcc he encontrado que con la opción -masm=intel podemos introducir código asm en formato intel y el compilador no me ha dado problemas:

gcc -g -masm=intel -o masm masm.c

Un sencillo ejemplo:

$ vi masm.c

#include

int ret;

int main()
{
asm("mov eax,0x4");
asm("sub eax,0x2");
asm("mov ret,eax");
printf("%d\n",ret);
return 0;
}

Nos vemos
[JJ]

Introducción al Cracking en Linux

Después de haberlo dejado durante un tiempo, he vuelto a retomar esta pequeña introducción sobre el estudio de binarios en GNU/Linux ; que además nos sirve para entender mejor este magnífico S.O.

En los nuevos he profundizado sobre el manejo de GDB y también he explicado como empezar con IDA sobre wine como debugger remoto. De todos modos, os pongo los enlaces de todos los tutoriales, necesarios para tener una visión amplia de las posibilidades que tenemos en GNU/Linux:

***Cracking en Linux***


Esta es la carpeta en 4shared donde iré poniendo toda la serie:

http://www.4shared.com/folder/Tvy1-zjF/Cracking_en_Linux.html

Para bajarse los capítulos individualmente, los enlaces son:

Introduccion al Cracking en Linux 01 - Introducción


http://www.4shared.com/document/MdDtVpY3/Introduccion_al_Cracking_en_Li.html


Introduccion al Cracking en Linux 02 - GDB


http://www.4shared.com/document/AjNlQnGw/Introduccion_al_Cracking_en_Li.html

Introduccion al Cracking en Linux 03 - Instalación Radare


http://www.4shared.com/document/gjZErfvq/Introduccin_al_Cracking_en_Lin.html

Introduccion al Cracking en Lnux 04 - Manejo de Radare


http://www.4shared.com/document/xmTpWtb4/Introduccin_al_Cracking_en_Lin.html


Introduccion al Cracking en Linux 05 - IDA


http://www.4shared.com/document/qM_nFD4k/Introduccion_al_Cracking_en_Li.html

Introduccion al Cracking en Linux 06 - GDB(II)


http://www.4shared.com/document/29MrE885/Introduccion_al_Cracking_en_Li.html


Espero se entienda y sea útil.
[JJ]

martes, octubre 18, 2011

Bajar un video Flash manualmente

Fuente: txipi:blog

Aunque normalmente con DownloadHelper es suficiente para bajar los videos flash que nos interese, en algunos casos este plugin de firefox no funciona y entonces hay que hacerlo manualmente, que siempre es mas divertido aunque mas complicado.
Como veis en el articulo del blog de txipi esta toda la base, aunque como siempre pasa, cada caso es diferente. Este video en concreto, era un favor para una amiga, así que me puse a intentar bajarlo siguiendo los pasos de txipi:

Con tcpdump te descargas el trafico, es interesante ponerlo justo antes de que salga el video:

# tcpdump -i eth0 -p -s 0 -w captura.pcap

En Debian, para usar el tcpdump, que pone la tarjeta de red en modo promiscuo, necesitas ser root (por eso el simbolo # ) para los demas pasos se pueden realizar como usuario normal.
El video se transmite mediante el protocolo rtmp, buscamos las lineas donde aparezca este termino, de esta manera:

$ strings captura.pcap | grep rtmp > captura.txt

Si vemos el archivo captura.txt, nos encontramos con esto:

*rtmp://extondemand.livestream.com/ondemand
GET/9.gif?a=S~b=f27fecf43761f1037~c=458DF5551F5F4C1FEAC678BF94DFFF66A6D9ED2F~d=F8793DA9741B8605E97CB52A6AFEB8B2F3A6ABE6~e=1~f=R~g=0~h=1.2~i=1.1~k=59D80C36D70ECC555A8E863D7F130051739EF19E~pu=http%3A//www.canal4aljarafe.es/video.php%3Fid%3Dpla_6e58511d-9662-4064-b2e9-12efcc135a42~ag=www.canal4aljarafe.es~al=Linux%202.6.32-5-amd64~ax=O~ac=mp4%3Atrans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4~dx=0.736~en=canalcuatroaljarafe~v=138~w=749~aa=extondemand.livestream.com~ab=ondemand~ad=1935~ae=rtmp~pu=http%3A//www.canal4aljarafe.es/video.php%3Fid%3Dpla_6e58511d-9662-4064-b2e9-12efcc135a42~ag=www.canal4aljarafe.es~ai=Mozilla/5.0%20%28X11%3B%20U%3B%20Linux%20x86_64%3B%20es-ES%3B%20rv%3A1.9.1.16%29%20Gecko/20110929%20Iceweasel/3.5.16%20%28like%20Firefox/3.5.16%29~aj=11,0,1,60~ak=Flash_PlugIn~al=Linux%202.6.32-5-amd64~am=Flash_PlugIn:F~an=278~ao=413~ap=691~aq=1573880~as=25.0000~at=Netscape~au=1425*652~av=512*288~aw=rtmp%3A//extondemand.livestream.com/ondemand/mp4%3Atrans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4~ax=O~ay=csma-1.9.13:csmaLoader-1.4.3~az=1.2~ba=900000~bb=212.106.219.62 HTTP/1.1 1GET /9.gif?a=P~b=f27fecf43761f1037~c=458DF5551F5F4C1FEAC678BF94DFFF66A6D9ED2F~d=F8793DA9741B8605E97CB52A6AFEB8B2F3A6ABE6~e=2~f=R~g=0~h=1.2~i=1.1~k=59D80C36D70ECC555A8E863D7F130051739EF19E~pu=http%3A//www.canal4aljarafe.es/video.php%3Fid%3Dpla_6e58511d-9662-4064-b2e9-12efcc135a42~ag=www.canal4aljarafe.es~al=Linux%202.6.32-5-amd64~ax=O~ac=mp4%3Atrans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4~dx=5.223~en=canalcuatroaljarafe~m=PL~v=5316~w=5975~x=5256~y=5178~z=0~aa=extondemand.livestream.com~ab=ondemand~ad=1935~ae=rtmp~pu=http%3A//www.canal4aljarafe.es/video.php%3Fid%3Dpla_6e58511d-9662-4064-b2e9-12efcc135a42~ag=www.canal4aljarafe.es~ai=Mozilla/5.0%20%28X11%3B%20U%3B%20Linux%20x86_64%3B%20es-ES%3B%20rv%3A1.9.1.16%29%20Gecko/20110929%20Iceweasel/3.5.16%20%28like%20Firefox/3.5.16%29~aj=11,0,1,60~ak=Flash_PlugIn~al=Linux%202.6.32-5-amd64~am=Flash_PlugIn:F~an=278~ao=413~ap=691~aq=1573880~as=25.0000~at=Netscape~au=1425*652~av=512*288~aw=rtmp%3A//extondemand.livestream.com/ondemand/mp4%3Atrans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4~ax=O~ay=csma-1.9.13:csmaLoader-1.4.3~az=1.2~ba=900000~bb=212.106.219.62~da=0~db=172.1417:9~dd=0~de=0~dg=0~dh=0~dl=425438:9~dm=6.8857:9~do=0~dp=0~ds=0~du=270000:9~dv=1~ea=20~eb=1:0.0058~fb=0~fd=0~fe=0~ff=0~fg=0,0,0,0~fh=0,0,0,0~fi=-:0:5226::1~fj=-:5226~fk=S:0,Q:0,D:0 HTTP/1.1

Debemos buscar una direccion tipo url de rmtp que nos lleve a un archivo de video, normalmente mp4 o flv, en este caso hay una dirección que se repite:

rtmp%3A//extondemand.livestream.com/ondemand/mp4%3Atrans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4

Como sabemos que el valor ascii %3A es ":" ya tenemos la url que buscamos:

rtmp://extondemand.livestream.com/ondemand/mp4:trans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4

Para descargarlo podemos usar rtmpdump o flvstreamer, probe los dos y el que me funciono fue el segundo:

flvstreamer -r rtmp://extondemand.livestream.com/ondemand/mp4:trans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4 -o prueba.mp4

Se corto al 84%, pero lo que yo buscaba era el principio y fue mas que suficiente. Para descargarlo todo está la opción de --resume dentro de un pequeño script en bash:

while true; do flvstreamer --resume -r rtmp://extondemand.livestream.com/ondemand/mp4:trans/dv15/mogulus-user-files/chcanalcuatroaljarafe/2011/10/05/9139cbd2-c0da-4e7b-a130-426a7a9401c1.mp4 -o prueba.mp4; done

Ahora solo queda convertirlo en avi para que se pueda ver en un dvd que admita divx, yo para eso utilizo ffmpeg:

ffmpeg -i prueba.mp4 -vcodec libxvid -pass 2 -acodec libmp3lame video.avi

Para poder dar dos pases, tenemos que crear en la misma carpeta un archivo llamado ffmpeg2pass-0.log y suele quedar muy bien, en este caso me daba un error y no me funciono, asi que utilicé mencoder:

mencoder prueba.mp4 -oac mp3lame -lameopts preset=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1200 -ofps 25 -of avi -o out.avi

Ahora si, ya tenemos nuestro archivo out.avi para hacer lo que queramos, en mi caso, la parte inicial que me interesaba la obtuve con avidemux, un programa perfecto y sencillo para manipular archivos de video.

Nos vemos.
[JJ]

martes, septiembre 20, 2011

Cambiar nombres de archivos en un terminal

Aunque hay grandes aplicaciones para renombar archivos en Linux, como Pyrenamer, a veces te encuentras con mucho archivos en la linea de comando que quieres renombrar y tu tonto orgullo te obliga a pensar que debe ser muy fácil.

Primero piensas en algo tan sencillo como:

& mv *.mp2 *.mp3

Pero Bash no te lo pone fácil, como la orden mv sirve tanto para mover como renombrar, te comenta que no existe el directorio *.mp3; si miras el man de mv no acabas de verlo claro, así que nos vamos a Google, donde vemos que la mayoria de los mensajes o te llevan a un pequeño script (muy interesante pero no es lo que buscas) o te dicen que te dejes de tonterías y que instales el Pyrenamer, que para eso esta ;-)

Como soy muy cabezón, sigo buscando y por fin encuentro algo, en Deries habla del comando rename; no parece sencillo pero algo es algo:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

Si vemos la sintaxis, lo que mas llama la atención es "perlexpr", como no sabemos nada de perl, Deries nos explica que en perl la expresión para sustituir en una cadena o string tiene esta forma 's/antiguo/nuevo/', donde se sustituye la palabra antiguo por la palabra nuevo en todos los nombres de los archivos [files] que pongamos al final de la orden.

Vamos a ver varios ejemplos:

-Cambiar la extensión de varios archivos.

rename -v 's/\.mp2$/\.mp3/' *.mp2


Lo hemos conseguido, pero vamos a verlo poco a poco, para que podamos sacarle mas partido a rename en otros casos:

-v es verbose, que nos explique lo que ha hecho, que nos informe

's/\.mp2&/\.mp3/' si nos acordamos sustituimos \.mp2& por \.mp3; ¿Y por que no ponemos solo .mp2 por .mp3? El tema es que el punto . en perl es un comodín que signfica cualquier caracter en una cadena; para que no lo tome como comodín y lo tenga en cuenta como el caracter . (punto) hay que ponerle delante el signo \ ( se escapa) y asi no hay duda de que el programa buscara la secuencia .mp2; también el signo $ indica el final del nombre o cadena ( ya que estamos cambiando la extension del archivo, que siempre esta al final).

*.mp2 Aqui indicamos que tome todos los archivos con extensión mp2 del directorio.

-Cambiar parte del nombre del archivo:

rename -v 's/IMG_/foto_/' *.jpg

Al igual que antes, vamos a sustituir la palabra IMG_ por foto_ en todos los archivos con extensión jpg del directorio. Importante poner la expresión de perl entre comillas simples para no tener problemas.

-Incluir un texto en el nombre del archivo.

rename -v 's/\.jpg$/_mini\.jpg/' *.jpg

Es igual al anterior, pues quitamos algo (.jpg) para añadirlo después mas lo que queremos añadir (_mini\.jpg).

-Quitar una parte del nombre del archivo.

rename 's/Re1//' *.mp3

En este caso tenemos muchos mp3 con el nombre correcto de la canciones, pero al final, antes de la extensión, han añadido las letras Re1 , que queremos quitar o lo que es lo mismo sustituir por nada,que es lo que hay entre las dos barras (//).

Una vez entendido, vemos que rename puede ser una gran ayuda para manejar muchos archivos, pues lo que siempre se puede asegurar es que estas ordenes son muuuy rapidas.

Espero que sea útil.
[JJ]

lunes, febrero 14, 2011

De Lenny a Squeeze




Este fin de semana, por fin, he actualizado mi Debian de Lenny a la nueva versión estable , Squeeze. A diferencia de otras veces, donde lo unico que hacía era cambiar el sources.list y como los valientes ( o inconscientes,jeje) haciamos un "apt-get dist-upgrade"; esta vez he querido asegurar el proceso para evitar en lo posible, los problemas y no terminar instalando todo de cero.

Aquí voy a poner los puntos mas importantes que he seguido, aunque la información mas completa la teneis en la Notas de publicación de Debian GNU/Linux 6.0 (squeeze), 32-bit PC , y concretamente para la actualización en esta parte:

Actualización desde Lenny

Para actualizaciones limpias también teneis la Guía de Instalación de Debian

1. Situación Inicial.

El mismo día de la aparición de Squeeze como distribución estable, se realizo una actualización bastante importante en Lenny, no solo por el numero de paquetes, que llegaban a mas de 300; sino que además se actualizaba a una versión nueva de kernel; en mi caso la 2.6.32-5-686-bpo; creo que fue debido a que tenía en los repositorios los Backports de Debian ( creo que en Squeeze estan incluidos, por eso no hay que añadirlos en el sources.list) y es importante tenerlo en cuenta; pues en el caso de tener el kernel original de Lenny (2.6.26-2-686) se deberia hacer el proceso que comento en dos partes:

1º Actualización mínima: apt-get safe-ugrade
2º Actualizar el nucleo y udev; por lo visto udev (gestor de dispositivos del kernel linux) de squeeze necesita un nucleo superior a 2.5.26; por lo que en la instalación deberiamos primero instalar el nucleo de squeeze 2.6.32-5-686 y despues instalar udev.
3º Actualización completa; apt-get dist-upgrade. En mi caso, al tener el nucleo bpo instalado pase directamente a este punto después de realizar lso siguientes pasos:

2. Copia de Seguridad

Bueno ya sabemos como va esto, nunca se sabe si al final tendremos que reinstalar; además en mi caso tengo la Home en la misma partición que el sistema (/) por lo que en otra partición hice copias de estas carpetas y archivos:

/home/juanjo
/etc/
/boot/ ----------> se va a actualizar Grub a la versión 2.
/var/lib/dpkg
/var/lib/apt/extended_states
/var/lib/aptitude/pkgstates -----> Para los que como yo, utilizan aptitude

Y también la salida de este comando, guardado como un archivo de texto:

dpkg --get-selections "*" > dpkg.txt

3. Verificar el estado de los paquetes.

Primero se mira con aptitude que no haya paquetes pendientes. Para ello una vez ejecutado aptitude desde un terminal (como root), le damos a la tecla g y veremos las tareas pendientes. En mi caso tenia varios paquetes que no se podian actualizar y tuve que desinstalarlos.

También podemos ver el estado de nuestros paquetes con esta orden:

# dpkg --audit

Y desbloquear los paquetes retenidos (hold), que podemos ver con esta orden:

# dpkg --get-selections | grep hold

4. Actualizar la fuentes para APT

Generalmente lo unico que hacia era cambiar lenny por squeeze, pero realmente hay que ver si la fuentes en diferentes distribuciones y diferentes mirrors coinciden, asi que despues de Googlear un poco, el archivo /etc/apt/sources.list quedo asi:

#

deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
#deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free


deb http://security.debian.org/ squeeze/updates main contrib non-free

#deb-src http://security.debian.org/ squeeze/updates main contrib non-free


deb http://ftp.fr.debian.org/debian/ squeeze-proposed-updates main contrib non-free

#deb-src http://ftp.fr.debian.org/debian/ squeeze-proposed-updates main contrib non-free

#Debian Multimedia

deb http://www.debian-multimedia.org squeeze main non-free

#VirtualBox


deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free


#Wine


deb http://www.lamaresh.net/apt squeeze main

Para los puristas con quitar la parte "contrib non-free" tendran un sistema totalmente libre.

Ahora solo queda actualizar nuestro repositorio de paquetes, desde una consola y como root, ponemos:

# apt-get update

5. Actualización del sistema.

*********************************************************************************
No
debería actualizar usando telnet, rlogin, rsh, ni desde una sesión de X controlada por xdm, gdm o kdm en la máquina que esté actualizando. Esto se debe a que cada uno de esos servicios puede cerrarse durante la actualización, y podría hacer que el sistema se volviese inaccesible y que está sólo actualizado a la mitad.
**********************************************************************************

Por tanto, vamos a hacerlo en una consola virtual en modo texto ( si fuera remoto, lo ideal sería mediante ssh) y nos interesa que la sesión X este cerrada. Como estoy en Gnome, si cerramos el gestor de acceso a X, gdm, nos quedaremos en el login de una consola virtual tty; por tanto en Debian se ejecuta esta orden como root:

# /etc/init.d/gdm stop

Y ya podemos actualizar:

# apt-get dist-upgrade

Durante el proceso, que duro varias horas; nos preguntará varias veces si queremos guardar varios archivo de configuración o actualizarlo; como por sistema, siempre esta predeterminado guardarlo; asi lo hice en general. Solamente tuve un problema al actualizar el programa phpmyadmin, tenia que actualizar las bases de datos y no fue capaz; se hizo una backup del archivo original en /var/cache/dbconfig-common/backups; y la verdad es que el programa funcionó perfectamente después; no le daremos mas importancia.

Una buena recomendación es copiar los datos de los avisos que aparezcan, aunque en ingles si que podemos ver al final una orden que nos ayudara a resolver los problemas derivados Ej. Con la actualización de sysv-rc, daba información del proceso y que si queria volver a configurarlo tendría que ejecutar la orden:

# dpkg-reconfigure sysv-rc

En esta actualización pasamos a grub2; pero primero haremos una prueba con el grub-legacy; al reiniciar veremos un menu de grub un poco especial, donde la primera entrada es para probar grub2; si funciona bien ( yo espere despues de varios reinicios) debemos ejecutar esta orden como root:

# upgrade-from-grub-legacy

6. Problemas.

Lo primero es felicitar al equipo debian, pues todo el proceso fue muy fluido y todo ha terminado muy bien.

El único problema realmente no es directamente culpa de debian; en mi caso tengo una tarjeta gráfica Nvidia GeForce 7300 LE y me gusta tenerla completa, con la posibilidad de 3D; por lo que le instalo los drivers propietarios de Nvidia ( que me funcionan muy bien). En este caso, no habia manera, me baje incluso los últimos drivers ( NVIDIA-Linux-x86-260.19.36.run) pero no lo pude instalar. Como es lógico. este mismo problema ya lo había tenido mas gente; por lo que la solución era desinstalar nouveau; que son los drivers nvidia libres que se estan desarrollando en sustitución de los nv (que a mi nunca me han ido bien), la pena es que actualmente solo tienen 2D, asi que la solución es desinstalar nouveau (por cierto la tty se veían muy bien con nouveau..) con la orden:

# apt-get remove xserver-xorg-video-nouveau

Y por si levanta cabeza, bloquearlo en el archivo /etc/modprobe.d/blacklist.conf , colocando este texto al final (siempre como root):

blacklist nouveau

Ahora reiniciamos (necesario) y ya podemos instalar los drivers propietarios de Nvidia.

De esta manera, ya tenemos Squeeze, no ha sido muy dificil y además hemos aprendido que preparando las cosas bien, en la mayoria de las veces, el resultado siempre es positivo.

Espero que estas notas sean utiles, pues aunque para tu PC de escritorio, la versión de estable se pueda quedar corta; si es el mismo ordenador con el que trabajas, te das cuenta que la versión estable nunca te va a dejar tirado y es un seguro para el dia a dia.

Un saludo
[JJ]