Voglio in qualche modo ottenere il "numero di istruzioni assembler eseguite" da un binario. Si consideri il seguente pezzo di codice:Come misurare il numero di istruzioni assembler eseguite?
if(password[0] == 'p') {
if(password[1] == 'a') {
......
printf("Correct Password\n");
}
}
Poi se vorrei iniziare il programma con esempio "abc" non avrebbe preso il primo ramo, quindi avrebbe eseguito meno istruzioni. Se inserissi "pbc" ci vorrebbe il primo ramo, quindi eseguirò un po 'di più (circa 4-5) istruzioni. (Si tratta di alcuni file di ricerca per CTF (Capture The Flag)). Quindi la mia idea è invece di invertire un binario e provare a capire l'algoritmo, io uso l'approccio più veloce nel conteggio del numero di istruzioni assembler eseguite per diverse configurazioni (come caratteri diversi o lunghezze di password e così via per vedere se posso prendere un'altra filiale usando un altro input creando così più istruzioni assembler).
La mia idea di base sarebbe scrivere un semplice debugger inserendo un int3 dopo l'istruzione corrente, incrementare un contatore, disassemblare l'istruzione successiva e inserire un int3 subito dopo questa istruzione (versione fortemente semplificata della mia idea).
C'è qualche programma/libreria/... che ha già fatto quella roba? (Perché vedo alcuni problemi quando il programma si occupa di segnali, ...)
(Ho già provato a utilizzare i timer ad alta precisione per misurare il tempo, ma quello era un completo fallimento a causa della differenza sono solo 4-5 istruzioni
A quanto pare questo tipo di crepa ha un nome, Timing attacco http://en.wikipedia.org/wiki/Timing_attack Tuttavia , funziona solo se l'algoritmo in questione fallisce velocemente, o altrimenti richiede tempi di esecuzione diversi in base al suo input, il che non è garantito. – Patashu
Fondamentalmente stai parlando di una traccia di istruzioni. –
No, non voglio fare un "attacco di temporizzazione" Non voglio usare il "tempo" per il confronto, voglio usare il "numero di istruzioni eseguite". Il tempo di utilizzo non è possibile a causa del bias. E cerco programmi che posso usare per fare questo –