
Originariamente inviata da
filips
1) capisco da quanto hai detto che i bug che si possono prendere in considerazione sono svariati (non credo però tutti)
La maggior parte dei bug (quelli più diffusi perlomeno) viene generata da una serie di errori concettuali ricorrenti e noti.

Originariamente inviata da
filips
2) riferendomi al bug che hai esemplificato in quel codice, cioè a un impallamento dell'applicazione nel caso di file non conforme, non riesco proprio a vedere il nesso col discorso codice malizioso; in altre parole non capisco come risulti possibile sfruttare un exploit sul tipo di falla in run-time del tipo indicato
Un file immagine "malizioso" può sovrascrivere l'indirizzo di ritorno della funzione (presente sullo stack) e modificare "a piacimento" il normale flusso del programma. Se vuoi un esempio di vulnerabilità da buffer overflow, il più celebre esempio che mi viene in mente è lo shellcode.
Vorrei fare un ultimo esempio usando la funzione printNextPixel (attenzione che nel while mancava l'incremento dell'indice):
codice:
#include <cstdio>
using namespace std;
int pixels[8] = {123, 123, 123, 3/*Valore di i*/, 1, 1, 0x4005c6/*indirizzo del main*/, -1};
void printNextPixel(int* pixels);
void wellcome();
main() {
//Saluto
wellcome();
//Stampo i pixel
printNextPixel(pixels);
}
void printNextPixel(int* pixels)
{
int buffer[3];
int i = 0;
while(pixels[i] != -1) {
buffer[i] = pixels[i];
i++; //Questo mancava mannaggia alla miseria
}
//print(buffer[0], buffer[1], buffer[2]);
}
void wellcome() {
printf("Hello the main address is: %p\n", &main);
}
Se vai a sostituire l'indirizzo presente nell'array pixels, con un qualsiasi indirizzo valido, potrai modificare il flusso dell'applicazione.
Io ho inserito l'indirizzo del main realizzando una sottospecie di chiamata ricorsiva.
test.jpg
Le informazioni necessarie ad un programmatore terminano qui. Spero che tutto questo possa bastare a soddisfare la tua curiosità, perché vorrei evitare di essere calciorotato da Habanero