Heim >Web-Frontend >js-Tutorial >Dieses Windows-Skript ist kein Hilferuf
0< /* :: @echo off set /a min = 15 set /a max = 45 :loop CScript //nologo //E:JScript "%~F0" "+{F15}" set /a rand = (%RANDOM% * (%max% - %min% + 1) / 32768) + %min% + 1 ping -n %rand% -w 1 127.0.0.1 > NUL goto :loop */ 0; WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));
Nehmen Sie sich einen Moment Zeit und sehen Sie, ob Sie herausfinden können, was hier passiert.
Mach weiter. Ich warte 15 bis 45 Sekunden und sende dann die Tastenkombination Umschalttaste F15.
Da es die F15-Taste gibt, die meisten Tastaturen sie aber nicht mehr haben, ist es sehr unwahrscheinlich, dass das Drücken der Umschalttaste F15 irgendetwas bewirkt, außer dass es sich wie eine allgemein gedrückte Tastenkombination verhält, was in den meisten Fällen verhindert, dass der Computer in den Ruhezustand wechselt (mit Ausnahme einiger VDI-Setups). ).
Es funktioniert ohne Administratorrechte und auf einer einfachen Windows-Installation, obwohl einige Administratoren JScript deaktivieren.
0< /* :: ist eine Eingabeumleitung von einer Datei für Dateideskriptor 0, was ein Sonderfall ist und sich auf die Standardeingabe (STDIN) bezieht. Wenn Sie beispielsweise 0< test.txt find „hello“ ausführen würde, würde die Shell tatsächlich find „hello“ 0 Warum also das /*, wenn jede Zeichenfolge dorthin passen kann? Denn das ist der Anfang eines Javascript/Jscript-Blockkommentars und der Jscript-Interpreter muss nicht versuchen, das Batch-Scripting zwischen /* und */ zu analysieren. Aber wie sieht dann der Jscript-Interpreter diesen Codeblock? Es liest den gesamten Block von 0< /* :: bis */ 0; als: 0 < 0; was als falsch ausgewertet wird, aber das spielt keine Rolle – es ist gültiges JScript und hat keine Nebenwirkungen und die primäre Hürde wurde überwunden: eine Möglichkeit, Batch-Skript oder JScript selektiv zu analysieren, basierend darauf, welcher Interpreter die Datei liest. Ich überspringe das Ausschalten des Echos, das Festlegen von Variablen und das Label-Looping, da dies ziemlich einfache Konzepte sind, obwohl es eine lustige Tatsache ist – ECMAScript hat auch Labels. Die nächste wichtige Zeile ist CScript //nologo //E:JScript „%~F0“ „{F15}“, die diese .bat-Datei an CScript sendet. CScript startet ein Skript in einer Befehlszeilenumgebung mit mehreren Skript-Engine-Optionen (in diesem Fall JScript). WScript ist ähnlich, führt jedoch ein Skript in einer Windows-GUI aus und bezieht sich in diesem Zusammenhang nicht vollständig auf die letzte Zeile in der Batchdatei. $~F0 ist der vollständige Pfad, Dateiname und die Erweiterung der aktuell ausgeführten Batchdatei. {F15} ist Shift und die F15-Taste für SendKeys. Um es noch einmal zu wiederholen: Wenn diese Batch-Datei gesendet wird, sieht sie das gesamte Batch-Skript nur als 0<0; führt dann die letzte Zeile aus, die ebenfalls gültiges JScript ist. Das einzig Interessante an set /a rand = (%RANDOM% * (%max% - %min% 1) / 32768) %min% 1 ist, dass %RANDOM% eine integrierte Variable ist, die eine Ganzzahl erzeugt von 0 bis 32767 (einschließlich), mit set /a wird immer abgerundet, und die letzte 1 gilt speziell für die folgende Zeile; Wenn Sie Sleep oder Timeout verwenden, würden Sie die zusätzliche 1 nicht hinzufügen. Die nächste Zeile, ping -n %rand% -w 1 127.0.0.1 > NUL ist eine alte Methode zum Erstellen eines Timers, der weniger prozessorintensiv ist als Ruhezustand und Timeout. Grundsätzlich pingen Sie sich selbst %rand% Mal mit einer Sekunde Abstand zwischen jedem Versuch; Die 1 aus der vorherigen Zeile liegt daran, dass vor dem ersten Ping nicht gewartet werden muss. > NUL leitet die Standardausgabe zu NUL um, wodurch sie natürlich einfach verworfen wird. Wenn dieses Skript keine Endlosschleife hätte, würden Sie ein goto :eof vor */ 0; Damit Ihr Batch-Skript den Rest der Datei überspringt, der kein gültiges Skript ist. Und wir kommen endlich zum Ende und zum eigentlichen JScript: WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));. JScript entspricht in etwa JavaScript 1.5/ECMAScript3 und verfügt über eine WScript-API, die in etwa mit VBScript vergleichbar ist. Machen Sie die Dinge wahrscheinlich nicht so. Aber vielleicht möchten Sie es vielleicht, und jetzt macht einiges davon Sinn. Das obige ist der detaillierte Inhalt vonDieses Windows-Skript ist kein Hilferuf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Einpacken