Archivo

Archive for the ‘GNU/Linux’ Category

Descomprimir archivos en Linux desde consola

En modo gráfico tenemos el gestor de archivadores para facilitarnos la vida. Pero, ¿cómo tratar con archivos comprimidos o empaquetados como los tgz, tar, bz2 o rar en la consola?

TAR
Se trata de un archivo que combina varios archivos en uno, no hay compresión de datos. Para extraer el contenido usamos el comando tar con los flags x (extract, extraer) y f (file, desde un archivo), y opcionalmente v (verbose) para mostrar por pantalla el proceso o vv para mostrar no solo los archivos y carpetas creadas, sino información sobre estas.

tar xvf archivo.tar

GZ
Se trata de un archivo comprimido con gzip. Para descomprimir utilizamos el comando gzip con el flag -d (descomprimir) o bien el comando gunzip, que no es más que un enlace a gzip.

gunzip archivo.gz
gzip -d archivo.gz

TGZ, TAR.GZ
Un archivo empaquetado con tar y comprimido con gunzip. Se descomprime de la misma forma que los tar, añadiendo el flag z para indicarle que use gzip para descomprimir.

tar xvzf archivo.tar.gz

BZ2
Archivo comprimido con bzip2. Para descomprimir se usa el comando bzip2 con el flag -d (descomprimir) o bien el comando bunzip2, que no es más que un enlace a bzip2.

bunzip2 archivo.bz2
bzip2 -d archivo.bz2

TAR.BZ2
Similar a los archivos tar.gz, pero se usó bzip2 para comprimirlo. Para descomprimir se usa también tar, con el flag j en lugar de z:

tar xvjf archivo.tar.bz2

ZIP
Archivo comprimido con zip. Se descomprime usando el comando unzip:

unzip archivo.zip

RAR
Formato propietario de RarLab, creadores del famoso Winrar. Normalmente el comando rar no está instalado en el sistema

sudo aptitude install rar

Se descomprime con el flag -x (eXtract, extraer)

rar -x archivo.rar

Compilar Kernel Linux con el método tradicional

Como muchos saben, hay muchas formas de compilar un Kernel de Linux. Cada distribución trae su propio método para hacerlo y sus propias herramientas, como en el caso de Debian que cuenta con las herramientas de “make-kpkg”, y que este tema ya lo explique en un post anterior.

Ahora voy a escribir una pequeña explicación para compilar un kernel con el método tradicional, el más antiguo y el universal,o sea, en todas las distribuciones se compila igual.

Iré paso por paso, antes que nada hay que registrarse como root para realizar todas estas acciones como superusuario y así no tendremos problemas con los privilegios y esas cuestiones.

Paso a paso

1- Primero descargaremos el último kernel disponible en kernel.org: kernel 2.6.39.

2- Lo copiamos en la carpte /usr/src que es donde debe encontrarse el source del kernel y lo descomprimimos:

cp linux-2.6.39.tar.bz2 /usr/src/
tar xfv linux-2.6.39.tar.bz2

Si lo desean pueden crea run enlace simbóligo con “ln -s linux-2.6.39/ linux/” para que les sea más cómodo ingresar a la carpeta, pero yo siempre me salteo est epaso.

3- Entramos en la carpeta /usr/src que es donde está el source del kernel, e ingresamos en la carpeta del source:

cd /usr/src/linux-2.6.39

4- Compilamos lo necesario para empezar a configurar el kernel y los módulos:

make menuconfig

La configuración varía según el hardware que tenga nuestra PC, por eso no puedo especificar nada sobre este punto ya que todas las PCs cuentan con dispositivos diferentes. Informate bien sobre tu hardware para poder configurar el kernel en relación a los dispositivos con que dispongas. Si lo deseas puedes activar todo (o la mayoría) para tener compatibilidad con todo, aunque no es nada recomendable porque te quedará un kernel inmenso. Lo que puedes hacer es usar la configuración del kernel con el que estás trabajando actualmente accediendo a /boot y copiando .config a la carpeta que contiene el source del kernel.

5- Una vez terminemos de configurarlo sólo nos queda compilarlo, instalar, compilar los módulos e instalarlos:

make
make modules
make modules_install
make install

6- Ya tendriamos todo listo. Solo queda configurar tu boot para que reconozca la imagen del kernel. Si estás usando grub debes crear la iamgen con mkinitramfs:

mkinitramfs -o /boot/initrd-2.6.39 .img /lib/modules/2.6.39
mkinitramfs -o /boot/initrd.img-2.6.39 /lib/modules/2.6.39

7- Solo tienes que actualizar grub para que te reconozca la imagen y listo:

update-grub

 

Ya tienes tu kernel funcionando perfectamente. En proximos artículos entrará más de lleno en lo que es la configuración del kernel.

Hasta luego.

Introducción a shellcodes en Linux

Aquí les traigo un videotutorial muy interesante sobre programación de shellcodes sobre Linux. Da una introducción muy buena para explicar los conceptos que abrcan este campo.

Cómo compilar un kernel Linux

Este video muestra cómo compilar un kernel. Está muy bien explicado y es bastante entendible. Cabe aclarar que muestra cómo compilarlo en sistemas basado en Debian, como Ubuntu.

watch?v=YxC_O5xOn-o&feature=player_embedded

Programando un Trainer para el BlackJack (Linux)

Un trainer es una aplicación que modifica un valor en la memoria de un videojuegos, como ya expliqué anteriormente.

En el post anterior vimos un código que utilizaba las APIs de Windows para modificar el tiempo en el buscaminas de Windows, ahora veremos un código que utiliza APIs de Linux para modificar un juego perteneciente a este S.O.: el BlackJack (viene por defecto con Ubuntu).

Para esto utilizaremos ptrace, que es una función que nos proveen las librerías de Linux para programar en C, y que permite “debuggear” o “tracear” cualquier aplicación. Permite tomar el control de un proceso para modificarlo, ver sus resultados y su funcionamiento. En este caso lo utilizamos para “tomar el control de un proceso” y luego escribir en una dirección de memoria un valor, o cambiar un valor ya declarado.

ptrace is a system call found in several Unix and Unix-like operating systems. By using ptrace (the name is an abbreviation of “process trace”) one process can control another, enabling the controller to inspect and manipulate the internal state of its target. ptrace is used bydebuggers and other code-analysis tools, mostly as aids to software development. [Wikipedia]

Sinopsis

#include 

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

El código

#include 
#include 
#include 

int main()
{
ptrace(PTRACE_ATTACH, 3895, NULL, NULL);
wait(NULL);
ptrace(PTRACE_POKEDATA, 3895, 0x8070bd4, 1111111111);
ptrace(PTRACE_DETACH, 3895, NULL, NULL);

return 0;
}

Explicación

PTRACE_ATTACH: con esto nos “atachamos” al proceso, es decir, tomamos su control..cabe destacar que el proceso al que nos atachamos ya está en ejecución. Es como si abriera el proceso para modificarlo.

3895: es el PID (Process ID), es decir, un identificador que identifica a cada proceso, es único y diferente para cada proceso. Para poder ver los PIDs de todos los procesos en ejecución ejecutamos “ps aux” (sin las comillas) en una terminal y nos saldrá una lista con todos los procesos que se están ejecutando en nuestro sistema y en la segunda columna llamada “PID” nos sale el PID de cada proceso..cabe destacar que los PIDs son números. Este PID es el que colocamos aquí.

PTRACE_POKEDATA: esto nos permite introducir valores en la memoria del proceso al que nos atachamos anteriormente.

0x8070bd4: esta es la dirección de memoria en donde modificaremos y almacenaremos el valor que especificaremos a continuación. Esta dirección se puede obtener mediante scanmem que es un editor de memoria como Cheat-Engine, pero para Linux.

1111111111: este es el nuevo valor que se introducirá en la dirección de memoria que especificamos anteriormente. Lo pueden cambiar por los nuevos valores que quiera…cabe destacar que es un valor long en este caso, así que intenten probando este número por si el valor que quieren cambiar no cambia…

PTRACE_DETACH: dejamos seguir corriendo al proceso normalmente ya que hicimos las modificaciones que quisimos en el mismo.

 

Este código lo que hace es modificar al “Balance” en el Blackjack (juego que viene por defecto con Ubuntu). Acuerdensen que tienen que introducir el PID correcto del proceso para abrirlo y modificarlo, el PID una vez que finalizan y vuelven a abrir el proceso cambia, así que estén atentos.

ScanMem: Cheat-Engine para Linux

Muchos usuario de Windows ya habran experimentado el uso de CheatEngine para el hacking de videojuegos.

CHEAT-ENGINE: Para los que no conocen este programa, lo que hace es editar un valor en memoria (si leiste las entradas anteriores ya deberias saber que quiere decir), por ejemplo, para tener balas infinitas en algun juego FPS, o tener vida infinita (por supuesto congelando el valor de vida en la memoria del juego). O aumentar el dinero que posees en algun juego.

Bueno, en Linux existe una herramienta parecida, aunque mas sencilla que se utiliza por linea de comandos (en la Terminal de Linux). Esta herramienta se llama ScanMem.

Si tienes algun juego en Linux que te vuelve loco, o solo quieres ser Dios dentro del juego, esta aplicacion es tu opcion. Con ella podras editar todos los valores dentro del juego, y hasta crear inyecciones de codigo.

Aqui dejo los enlaces referidos a ScanMem:

Qué es GNU/Linux?

Linux es uno de los tantos flavors de Unix. Se trata de un sistema operativo de 32 bits de libre distribución, desarrollado originalmente por Linus Torvalds, un estudiante de la universidad finlandesa de Helsinki, quien, en 1991, se aboco a la tarea de reemplazar a Minix, un clon de Unix de pequenias proporciones y finalidad academica desarrollado anios antes por Andrew Tannenbaun.

GNU/Linux es uno de los terminos empleados para referirse a la combinacicn del NUCLEO (llamado kernel) libre, similar a Unix, denominado Linux, que es usado con herramientas de sistema GNU (herramientas y aplicaciones libres y gratis). Su desarrollo es uno de los ejemplos mas prominentes de software libre; todo su codigo fuente puede ser utilizado, modificado y redistribuido libremente por cualquiera bajo los terminos de la GPL (Licencia Publica General de GNU, en ingles: General Public License) y otra serie de licencias libres.

A pesar de que Linux (núcleo) es, en sentido estricto, el sistema operativo, parte fundamental de la interaccion entre el nucleo y el usuario (o los programas de aplicacion) se maneja usualmente con las herramientas del proyecto GNU o de otros proyectos como GNOME (escritorio gráfico). Sin embargo, una parte significativa de la comunidad, asi como muchos medios generales y especializados, prefieren utilizar el termino Linux para referirse a la unión de ambos proyectos.

A las variantes de esta union de programas y tecnologias, a las que se les adicionan diversos programas de aplicacion de propositos especificos o generales, se las denomina distribuciones. Su objetivo consiste en ofrecer ediciones que cumplan con las necesidades de un determinado grupo de usuarios. Algunas de ellas son especialmente conocidas por su uso en servidores y supercomputadoras donde tiene la cuota mas importante del mercado. Segun un informe de IDC, GNU/Linux es utilizado por el 78% de los principales 500 servidores del mundo,y otro informe le da una cuota de mercado de % 89 en los 500 mayores supercomputadores. Con menor cuota de mercado el sistema GNU/Linux tambien es usado en el segmento de las computadoras de escritorio, portatiles, computadoras de bolsillo, telefonos moviles, sistemas embebidos, videoconsolas y otros dispositivos.