Ich möchte irgendwie die "Anzahl der ausgeführten Assembler-Anweisungen" aus einer Binärdatei bekommen. Betrachten Sie das folgende Stück Code:Wie wird die Anzahl der ausgeführten Assembler-Anweisungen gemessen?
if(password[0] == 'p') {
if(password[1] == 'a') {
......
printf("Correct Password\n");
}
}
Dann, wenn ich das Programm mit z beginnen würde "abc" würde den ersten Zweig nicht benötigen, daher würde es weniger Befehle ausführen. Wenn ich "pbc" einfüge, würde es den ersten Zweig nehmen, daher würde es etwas mehr (ungefähr 4-5) Anweisungen ausführen. (Dies ist etwas Forschung für CTF (Capture The Flag) -Dateien). Also meine Idee ist, anstatt eine binäre umzukehren und zu versuchen, den Algorithmus zu verstehen, verwende ich den schnelleren Ansatz beim Zählen der Anzahl der ausgeführten Assembler-Anweisungen für verschiedene Setups (wie verschiedene Zeichen oder Passwortlängen und so weiter, um zu sehen, ob ich einen anderen Zweig nehmen kann) Verwenden einer anderen Eingabe, wodurch mehr Assembleranweisungen erstellt werden).
Meine Grundidee wäre, einen einfachen Debugger zu schreiben, nur ein int3 nach dem aktuellen Befehl platzieren, dort einen Zähler inkrementieren, den nächsten Befehl disassemblieren und direkt nach diesem Befehl ein int3 platzieren (stark vereinfachte Version meiner Idee).
Gibt es ein Programm/eine Bibliothek/... welches schon das Zeug gemacht hat? (Weil ich einige Probleme sehe, wenn das Programm mit Signalen beschäftigt, ...)
(Ich habe bereits versucht, mit hoher Präzision Timer, um die Zeit zu messen, aber das war ein komplettes Scheitern wegen des Unterschieds sind nur 4-5 Anweisungen)
Offenbar ist diese Art von Riss hat einen Namen, Angriff Timing-http://en.wikipedia.org/wiki/Timing_attack jedoch Es funktioniert nur, wenn der betreffende Algorithmus schnell ausfällt oder aufgrund seiner Eingabe andere Ausführungszeiten benötigt, was nicht garantiert ist. – Patashu
Im Grunde sprichst du über eine Anweisungsablaufverfolgung. –
Nein, ich möchte keinen "Timing-Angriff" machen Ich möchte nicht die "Zeit" zum Vergleich verwenden, ich möchte die "Anzahl der ausgeführten Anweisungen" verwenden. Nutzungszeit ist wegen der Verzerrung nicht möglich. Und ich suche nach Programmen, die ich dazu verwenden kann, –