Wie funktioniert dieser verschleierte Perl-Code?

7

Wie funktioniert dieser Code überhaupt?

%Vor%     
user279639 23.02.2010, 16:19
quelle

3 Antworten

16

Lasst uns das zuerst durch perltidy

bringen %Vor%

Die erste Zeile ist offensichtlich.

In der zweiten Zeile wird eine Liste ">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", "" erstellt, die alle gleich lang sein soll und an ein Sternchen und ein 'Shift Out' (das Zeichen nach einem Wagenrücklauf) angehängt wird.

Die dritte Zeile hängt die Elemente 5 bis 1 (in dieser Reihenfolge) an diese Liste an, also wird ">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", "", ">", ">>", ">>>", ">>>E" angezeigt.

Die Karte dekrementiert alle Zeichen um eins und erzeugt Elemente wie 8===D () .

Die zweite Schleife gibt die Elemente in der Liste alle 0,25 Sekunden in einer Schleife aus. Der Wagenrücklauf verursacht, dass sie einander überschreiben, so dass eine Animation gesehen wird. Die letzten paar Zeilen werden nie erreicht und somit falsch.

    
Leon Timmermans 23.02.2010 16:45
quelle
14

Daten aus der Datei werden in ein Programm namens Perl-Interpreter geladen. Der Interpreter analysiert den Code und konvertiert ihn in eine Reihe von "Opcodes" - eine Bytecode-Sprache, die auf halbem Wege zwischen Perl-Code und der Maschinensprache liegt, auf der der Code läuft. Wenn im Konvertierungsprozess keine Fehler aufgetreten sind ("Compilieren" genannt), wird der Code von einem anderen Teil des Perl-Interpreters ausgeführt. Während der Ausführung kann das Programm verschiedene Zustände der Maschine ändern, wie z. B. Zuweisen, Aufheben der Freigabe, Lesen und Schreiben in den Speicher oder Verwenden der Eingabe- / Ausgabe- und anderer Merkmale des Systems.

(CW - Mehr Hardcore-Hacker als ich sind willkommen, um Fehler oder Missverständnisse zu korrigieren und weitere Informationen hinzuzufügen)

    
mob 23.02.2010 16:51
quelle
8

Hier gibt es keine Magie, nur Verschleierung. Nehmen wir eine hochrangige Sicht. Das erste, was zu bemerken ist, dass später jedes Zeichen in Strings interpretiert wird, als wäre es das vorherige Zeichen:

%Vor%

Eine Zeichenfolge wie "6qD" ergibt also "5rC" (die Zeichen vor "6", "q" und "D"). Der Hauptpunkt von Interesse ist das Array von Strings in der Nähe des Anfangs:

%Vor%

Dies definiert eine Folge von "Masken", die wir später in dieser Zeichenfolge ersetzen werden:

%Vor%

Sie werden am Punkt $_ eingefügt. Die Zeichenfolge \x{0e} steht für ein Hexadezimalzeichen; Beachten Sie, dass \x{0d} , das Zeichen unmittelbar davor, ein Wagenrücklauf ist. Das wird in [3] ersetzt, wenn wir [1] machen.

Bevor die [3] Zeichenkette zusammengefügt wird, geben wir eine Anzahl von ! gleich i für jedes Element in [2] an. Jedes nachfolgende Element erhält ein weiteres ! als das Element davor. Beachten Sie, dass das Zeichen, dessen Wert unmittelbar vor ! liegt, ein Leerzeichen ist.

Der Rest des Skripts iteriert über jedes der assemblierten Array-Elemente, die nun mehr wie folgt aussehen:

%Vor%

Dann fügt die Operation reverse die gleichen Elemente in umgekehrter Richtung an und erstellt eine Schleife.

An diesem Punkt sollten Sie in der Lage sein, das Muster zu sehen, das die Animation erzeugt. Jetzt geht es nur darum, sich durch jeden Schritt in der Animation und wieder zurück zu bewegen, was durch den Rest des Skripts erreicht wird. Die Zeitverzögerung jedes Schritts wird durch die Select-Anweisung bestimmt:

%Vor%

bedeutet, dass wir zwischen jeder Iteration 250 Millisekunden warten müssen. Sie können dies ändern, wenn Sie es schneller oder langsamer sehen möchten.

    
John Feminella 23.02.2010 16:44
quelle

Tags und Links