2017-02-03 56 views
-3

我有一個只讀腳本,第一行關閉回顯。例如script.bat與內容:如何忽略回顯並獲取命令執行日誌

@echo off 
REM bunch of logic goes here 
@echo on 

是否有可能以某種方式欺騙,並得到呼應/印刷反正所有的命令? 我可以在腳本調用之前/之後調用任何東西,只是不能更改腳本代碼本身。我想這將是這樣的:

REM what can I do here? 
call script.bat 
REM execution log printed? 
+4

'@echo off'只是禁用呼應的命令是執行,而不是命令的輸出。無論是否有@echo off,'bla bla'都可以看到。 –

+0

@MCND對不起,這個例子過於簡單。編輯問題以反映實際意圖。 – Andrey

回答

1

做的更簡單的方法,是批處理文件設置爲只讀是複製文件,刪除@echo off和運行復制的文件。

如果這是不可能的,你可以試試Jeb發現的buffer overflow。創建一個具有以下內容

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

(有點超過256個左括號),一個批處理文件,打開一個cmd實例並執行它。然後,從相同的cmd實例中,調用script.bat也許如果緩衝區溢出不會干擾,您可以看到執行的命令。

在這一刻我不記得另一種方式。

:就完成,你問什麼是技術上是可行的,但不能直接解決的。前一段時間,爲了解決關於批處理文件調用的問題,goto命令和標籤我修補了一個cmd.exe進程的副本,以避免何時輸出正在執行的命令的任何檢查,但此過程取決於可執行文件的確切版本。

+0

美麗!緩衝區溢出就像一個魅力。我做了以下操作:一個腳本有256個左括號,主腳本調用cmd-overflow.bat,然後調用script-to-debug.bat,打印所有的細節。 – Andrey

1

這漫長的命令讀取sample.bat行由行,每行沒有明確說@echo off,它執行它,有效地跳過@echo off

@for /F "tokens=*" %a in (sample.bat) do @if NOT "%a" == "@echo off" %a 

它可能不是非常適合有關閉命令呼應的偷偷摸摸的方式複雜BAT文件,但它應該在最基本的情況下工作: