Операторы и приоритет кавычек в запутанном cmd - PullRequest
0 голосов
/ 12 декабря 2018

У меня проблемы с пониманием того, как это будет оцениваться, это из-за вредоносного кода, который я анализирую, так что будьте осторожны.

Я удалил ascii giberish и целые числа в цикле foor, который, вероятно, содержит вредоносные инструкции.Так что все должно быть в порядке, я могу предоставить его, если это необходимо.

Если я урежу код, который позволяет мое основное понимание, он пытается передать это:

cmd.exe /c CmD /V/C"set foo=ASCIIgibberish bazz=moreASCIIgibberish&&for %f in (BunchOfIntegers)do set bar=!bar!!foo:~%f,1!&&if %f == 88 powershell.exe "!bar:~6!""

Кому:

Interaction.Shell(`here`,0)

Итак, я не уверен, как cmd и powershell будут разрешать кавычки или имена переменных, так как я не очень знаком с приоритетами powershell и cmd.

Что бы я хотелзнать,

будет ли cmd интерпретировать ! как логическое нет?

если так, то как cmd или powershell оценивают отрицание литерального значения ?, я хочу предположить, что он видитзначение ascii и логически отрицает его (0001 становится 1110), но не уверен.

Правильно ли я считаю, что это просто запутанный способ сказать powershell.exe barSubstringStartingAt6, потому что, как я вижу, barназначается только символ 88 из foo длиной 79 символов, поэтому невозможно узнать, что будет в bar [6].

Они просто пытаются отправить переполненный адрес в powershell?

1 Ответ

0 голосов
/ 13 декабря 2018

Как любезно объяснено @MC ND и @lit, !var! - не логический оператор, а скорее сокращение для синтаксиса с отложенным расширением.Поэтому оператор просто переставляет символы в переменной, используя int в цикле for в качестве индекса

...