2017-02-03 11 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' просто отключает повторяющее имя команду выполненный, а не вывод команды. 'Bla bla' будет виден с или без' @echo off' –

+0

@MCND Извините, пример был упрощен. Отредактировал вопрос, чтобы отразить фактическое намерение. – Andrey

ответ

1

Чем проще способ сделать это, будучи пакетный файл только для чтения, чтобы скопировать файл, удалить @echo off и запустить скопированный файл.

Если это невозможно, вы можете попробовать с помощью buffer overflow, обнаруженного Jeb. Создайте пакетный файл со следующим содержанием

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

(чуть более 256 открывающей скобки), откройте cmd экземпляр и выполнить его. Затем из того же экземпляра cmd вызовите script.bat. Возможно, вы могли видеть команды, выполняемые, если переполнение буфера не мешает.

В этот момент я не помню другого способа.

примечание: Просто для завершения, то, что вы просите, технически возможно, но не разрешено напрямую. Некоторое время назад, чтобы решить вопрос о вызове командного файла, команды и метки goto, я исправил копию процесса cmd.exe, чтобы избежать какой-либо проверки, когда вывести исполняемую команду, но этот процесс зависит от точной версии исполняемого файла cmd ,

+0

Красивая! Переполнение буфера работает как шарм. Я сделал следующее: один скрипт с 256 открывающимися скобками и главный скрипт, выполняющий 'call cmd-overflow.bat', а затем' call 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 

Это не может быть идеальным для сложных рукокрылых файлов, которые имеют хитрые способы выключения командного эха, но он должен работать в большинстве основных случаев: