Ein paar schnelle Dinge aus dem Weg, da ich weiß, dass diese Art von Fragen oft einen böswilligen Hintergrund haben.
- Ich versuche nicht, etwas in einem Dateiformat (jpg) auszuführen
- Ich versuche nicht, einfach das Endziel zu erreichen (dh etwas wie ein JPG aussehen zu lassen, sondern es herauszuholen)
- Ich versuche nur, den Unterschied zwischen dem Parsen von Informationen durch einen Computer zu erkennen
Nach meinem Verständnis analysiert ein Computer, der sich mit einem Datendateiformat wie JPG, PDF usw. befasst, die Informationen nur in einem Container, der meiner Meinung nach bestimmten Layouts / Spezifikationen entspricht. Häufig ist zu hören, dass der Unterschied zwischen einem Datendateiformat und einer ausführbaren Datei darin besteht, dass der Computer die Datendatei nicht "ausführt". Meine Frage ist: Woher weiß der Computer, was er lesen und was er ausführen soll? Was ist der Unterschied? Mein geistiges Bild von einem Computer ist etwas, das Anweisungen Schritt für Schritt liest. Wenn in der Mitte eines Jpg, das analysiert wurde, ein Shellcode zum Aufklappen eines Nachrichtenfelds angezeigt wird, warum wird es beim Lesen nicht aktiviert?
Mir ist bewusst, dass Dinge über Exploits für die Software ausgeführt werden können, indem der Parser ausgetrickst wird - vielleicht über Pufferüberläufe usw. usw. Auch hier ist das Endziel, wie es erreicht werden kann, weniger wichtig. Ich bin mehr daran interessiert, wie der Computer erkennen kann, was gelesen werden soll, was ausgeführt werden soll und wie das Lesen ohne Ausführung erreicht werden kann.
Unter Windows ist es nur die Erweiterung, die die Datei ausführbar macht - um genau zu sein, werden EXE-Dateien ausgeführt und einige andere Formate werden von
cmd
oder PowerShell interpretiert .Auf Unix-ähnlichen Systemen gibt es ein Ausführungsbit. Wenn Sie mit dem Konzept der Windows-Dateiattribute vertraut sind, können Sie sich das als eine Art Attribut vorstellen. Jede Datei kann ein gesetztes Ausführungsbit haben - es ist möglich, es auszuführen (als Programm, Skript usw.). Andernfalls wird es vom Betriebssystem immer als reguläre Datei behandelt, die nicht ausgeführt werden kann.
Unix-ähnliche Betriebssysteme verwenden nicht das Konzept der Dateierweiterungen, sondern versuchen, Dateien anhand ihres Inhalts zu identifizieren. In der Regel bilden nur wenige erste Bytes einer Datei eine magische Zahl - eine eindeutige Dateitypkennung (siehe Wikipedia-Artikel ).
quelle