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));
花點時間看看你是否能弄清楚這裡發生了什麼。
繼續。我會等待 15 到 45 秒,然後發送 Shift F15 組合鍵。
由於F15 鍵存在,但大多數鍵盤不再有它,因此按Shift F15 不太可能執行任何操作,除了充當一般按下的組合鍵之外,在大多數情況下會阻止計算機進入睡眠狀態(某些VDI 設定除外) ).
它無需管理員權限即可在普通 Windows 安裝上運行,儘管有些管理員停用 JScript。
0
那麼當任何字串都可以去那裡時為什麼要使用 /* 呢?因為這是 javascript/jscript 區塊註解的開始,而且 jscript 解譯器不需要嘗試解析 /* 和 */ 之間的批次腳本。那麼 jscript 解譯器如何看到這段程式碼呢?它從 0
我將跳過關閉回顯、設定變數和標籤循環,因為這些都是相當簡單的概念,儘管有趣的事實 - ECMAScript 也有標籤。
下一個重要的行是 CScript //nologo //E:JScript "%~F0" " {F15}",它將這個 .bat 檔案傳送到 CScript。 CScript 在命令列環境中啟動一個腳本,有多個腳本引擎選擇(本例中為 JScript)。 WScript 類似,但在 Windows GUI 中執行腳本,並且在此上下文中與批次檔中的最後一行並不完全相關。 $~F0 是目前運行的批次檔的完整路徑、檔案名稱和副檔名。 {F15} 是 Shift 鍵,F15 鍵是 SendKeys。重申一下,當發送此批次檔時,它會將整個批次腳本視為 0
set /a rand = (%RANDOM% * (%max% - %min% 1) / 32768) %min% 1 唯一有趣的事情是%RANDOM% 是一個產生整數的內建變數從0 到32767(含),使用set /a 總是向下取整,最後一個1 專門用於下面的行;當使用睡眠或超時時,您不會添加額外的1。
下一行, ping -n %rand% -w 1 127.0.0.1 > NUL 是一種創建計時器的舊方法,它比睡眠和超時的處理器密集程度要低。您基本上會 ping 自己 %rand% 次,每次嘗試之間間隔 1 秒;上一行中的 1 是因為在第一次 ping 之前沒有等待。 > NUL 將標準輸出重定向到 NUL,這當然只是丟棄它。
如果這個腳本沒有無限循環,你會想要在 */ 0; 之前有一個 goto :eof使您的批次腳本跳過文件中無效腳本的其餘部分。
我們終於到了最後,看到了實際的 JScript:WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));。 JScript 大致相當於 JavaScript 1.5/ECMAScript3,並且具有大致類似於 VBScript 的 WScript API。
可能不要這樣做。但也許您可能想要這樣做,現在其中一些是有道理的。
以上是這個 Windows 腳本並不是尋求幫助的詳細內容。更多資訊請關注PHP中文網其他相關文章!