我有一个只读脚本,第一行关闭了回显。例如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?
答案 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文件,它可能并不完美,但它应该适用于大多数基本情况: