Requisitos de software

Los ejercicios de la primera parte del curso serán mayormente sobre binarios de linux. Para tener resultados uniformes, vamos a instalar todosla misma versión de una máquina virtual Lubuntu 22.04 que se encuentra a través de https://www.linuxvmimages.com/images/lubuntu-2204/. Una vez instalada, el username/password es: lubuntu/lubuntu.

Instala Virtual Box

Para correr la máquina virtual debes tener instalado Virtual Box en tu computadora. Sigue las instrucciones en https://www.virtualbox.org/wiki/Downloads.

Descarga e instala el VM

El link directo es https://www.linuxvmimages.com/images/lubuntu-2204/

Descomprime el archivo que descargó. Debe crear un directorio llamado Lubuntu_22.04_VB que dentro debe tener un archivo con extensión .vdi.

En VirtualBox. Crea un nuevo VM, dale un nombre que refleje el nombre y versión del VM (algo así como Lubuntu22.04). Luego debes especificar que el disco duro que usará el VM es el archivo vdi (Lubuntu_22.04_VB_LinuxVMImages.COM.vdi) que descomprimiste anteriormente.

Corre el VM. La pantalla se ve minuscula pero lo vamos a arreglar pronto. Logueate usando el password lubuntu y abre un terminal (System Tools -> QTerminal). Alli escribe:

sudo apt update

Seguido de..

sudo apt upgrade -y

Este paso tomará varios minutos en completarse. Además de actualizar las programas del VM, correrá los llamados "Guest Additions" de Virtual Box y logrará que cuando de restart la pantalla se pueda ver en dimensiones adecuadas. Da el siguiente comando para "restart" el VM.

sudo shutdown -r now

Si el display del VM todavía se ve minúsculo, ve a los Settings de Display del VM en Virtual Box y ajusta su Scale Factor a 200%.

Instalar programas adicionales

Ejecuta los siguientes comandos para que instales algunos de los programas relacionados a compilación y debugging.

sudo apt update 
sudo apt install gcc dbg git wget curl bless ascii gcc-multilib readelf

Ejecuta los siguientes comandos para que instales sublime text y/o visual studio code.

sudo snap install sublime-text --classic
sudo snap install code --classic

Una vez instalados puedes correr subl desde el terminal para correr sublime o code para correr Visual Studio Code.

Instalar funcionalidades adicionales para el debugger

Hoy día, usar gdb en su estado vainilla es considerado un deporte extremo solo apto para masoquistas de verdad. Como tendremos muchas otras cosas en que rompernos la cabeza durante el semestre, vamos a instalar gdb-peda un ambiente para gdb que facilitar un poco su uso.

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

Prueba las herramientas

  1. Abre el editor de código de tu preferencia, copia el siguiente programa y guardalo como hw.c.

    #include <stdio.h>
    int main() {
        printf("Hola 4702!\n");
        return 0;
    }
    
  2. Desde el terminal, compílalo usando

    gcc -o hw hw.c -m32
    
  3. Ejecútalo usando:

    ./hw
    
  4. Abre el ejecutable usando gdb con el siguiente comando:

    gdb hw
    
  5. En gdb da el comando b main seguido de r.. Debes ver una pantalla como la siguiente:

        EFLAGS: 0x282 (carry parity adjust zero SIGN trap INTERRUPT direction overflow)
    [-------------------------------------code-------------------------------------]
       0x565561a8 <main+11>:        mov    ebp,esp
       0x565561aa <main+13>:        push   ebx
       0x565561ab <main+14>:        push   ecx
    => 0x565561ac <main+15>:        call   0x565561d9 <__x86.get_pc_thunk.ax>
       0x565561b1 <main+20>:        add    eax,0x2e27
       0x565561b6 <main+25>:        sub    esp,0xc
       0x565561b9 <main+28>:        lea    edx,[eax-0x1fd0]
       0x565561bf <main+34>:        push   edx
    Guessed arguments:
    arg[0]: 0xffffd120 --> 0x1 
    arg[1]: 0xf7fa1000 --> 0x225dac 
    arg[2]: 0xf7ffd020 --> 0xf7ffda40 --> 0x56555000 --> 0x464c457f 
    arg[3]: 0xf7d9c519 (add    esp,0x10)
    [------------------------------------stack-------------------------------------]
    0000| 0xffffd100 --> 0xffffd120 --> 0x1 
    0004| 0xffffd104 --> 0xf7fa1000 --> 0x225dac 
    0008| 0xffffd108 --> 0xf7ffd020 --> 0xf7ffda40 --> 0x56555000 --> 0x464c457f 
    0012| 0xffffd10c --> 0xf7d9c519 (add    esp,0x10)
    0016| 0xffffd110 --> 0xffffd3ae ("/tmp/hw")
    0020| 0xffffd114 --> 0x70 ('p')
    0024| 0xffffd118 --> 0xf7ffd000 --> 0x36f2c 
    0028| 0xffffd11c --> 0xf7d9c519 (add    esp,0x10)
    [------------------------------------------------------------------------------]
    Legend: code, data, rodata, value
    
    Breakpoint 1, 0x565561ac in main ()
    
  6. Sal de gdb dando exit

  7. Probaremos el resto de los programas según los vayamos necesitando.