如何忽略echo off并获取命令执行日志

时间:2017-02-03 21:38:45

标签: windows batch-file echo

我有一个只读脚本,第一行关闭了回显。例如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?

2 个答案:

答案 0 :(得分:1)

更简单的方法是将批处理文件作为只读方式,即复制文件,删除@echo off并运行复制的文件。

如果无法做到这一点,您可以尝试使用Jeb发现的buffer overflow。使用以下内容创建批处理文件

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

(略多于256个左括号),打开一个cmd实例并执行它。然后,从同一个cmd实例调用script.bat也许如果缓冲区溢出没有干扰,你可以看到执行的命令。

此刻我不记得另一种方式了。

note :只是为了完成,您提出的要求在技术上是可行的,但不能直接解决。前段时间,为了解决有关批处理文件调用,goto命令和标签的问题,我修补了cmd.exe进程的副本以避免检查何时输出正在执行的命令,但此过程取决于cmd可执行文件的确切版本。

答案 1 :(得分:1)

这个冗长的命令逐行读取sample.bat,对于没有明确说出@echo off的每一行,它会执行它,有效地跳过@echo off

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

对于那些采用偷偷摸摸的方式关闭命令回显的复杂bat文件,它可能并不完美,但它应该适用于大多数基本情况: