Laboratorio 5 15/05/2023


Patching di slow_printer.file

Dopo aver installato Ghidra e aperto il file binario abbiamo cominciato ad ambientarci e provare a capire cosa avevamo davanti e come funzionasse, studiando codice e interfaccia.

Durante questa fase di “comprensione testo” abbiamo notato una chiamata a funzione usleep all’interno della seguente funzione:

void FUN_004011d6(void)
{
	DAT_00404058 = DAT_00404058 * 2;
	usleep((int)DAT_00404058 * 500000);
	return;
}

Questa funzione ci ha subito incuriositi in quanto direttamente associata a quello che era il “problema” da risolvere dato che l’obiettivo era stampare più velocemente la flag.

A confermare i nostri sospetti c’era una variabile (presumibilmente globale) che veniva raddoppiata ogni volta che la funzione era chiamata, per poi essere successivamente usata come input della funzione usleep insieme al numero “500000” in una moltiplicazione, andando a generare dei tempi esponenzialmente piu’ lunghi.

Untitled

Date le precedenti considerazioni il primo cambiamento che abbiamo provato ad applicare è stato quello di modificare quel 500000 sospetto tramite il cambiamento del valore 0x7a120 nel contenuto del file a destra (sottolineato in rosso nell’immagine sotto), cambiamento che poi si rivelerà essere sufficiente al compimento dell’obiettivo.

Untitled

Untitled

I passi successivi sono stati intuitivamente l’esportazione da Ghidra e l’esecuzione di entrambi (originale e patched) i file da terminale; da questi test abbiamo potuto verificare che la flag venisse stampata correttamente.