2017-02-03 45 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文件,但它应该在最基本的情况下工作:

相关问题