tagger tag windows security batch-file cmd

windows - tagger - tag folders



El cursor simple(^) al final del archivo por lotes de Windows consume toda la memoria (1)

Pensamientos

La causa de esto (según entiendo) se debe al intérprete de cmd que busca un carácter para escapar ya que ^ es el carácter de escape del lote. En lugar de identificar correctamente el fin del archivo eof en este escenario, cmd simplemente sigue haciendo bucles e inicializando algo mientras busca al personaje para escapar.

Reproducido en Windows 8 Pro (64) con cc^^^ (quilates múltiples utilizados para acelerar la fuga).

Pruebas

cc^ loop infinito y gotea muy lentamente.

cc^^ bloquea con un error normal de comando no válido.

cc^^^ ciclo infinito y se filtra más rápido.

cc ^ loop infinito y gotea muy lentamente.

cc ^^ bloquea con un error normal de comando no válido.

cc ^^^ ciclo infinito y se filtra más rápido.

cc"^ bloquea con un error normal de comando no válido.

cc"^^ bloquea con un error normal de comando no válido.

cc"^^^ bloquea con un error normal de comando no válido.

Notas

  • Solo bucle infinito y fugas cuando quilates ^ se usan literalmente (fuera de las citas). Cuando se agrega una cita, la secuencia de comandos se bloquea con un error estándar de comando no válido.
  • Solo bucle infinito y pérdidas cuando el archivo por lotes está codificado como UTF-8 o ASCII . Cuando UTF-16 , la secuencia de comandos se bloquea con error estándar de comando no válido.
  • Debe ser un número impar de quilates para no escapar del último quilate.

Precauciones

  • Asegúrese de que ningún script de proceso finalice con un quilate ^ (0x5E) o al menos un número impar de quilates.
  • O codifícalos en UTF-16.

Este archivo de proceso por lotes simple en un orden relativamente corto consume toda la memoria disponible en Windows 7 (x64). ¿Que esta pasando? y ¿qué precauciones se pueden tomar para protegerse contra eso?

any-invalid-command-you-like-here ^

Precondiciones aparentemente necesarias para exhibir el efecto:

  • the caret ^ es lo último en el archivo, y el script no termina con una nueva línea
  • el símbolo de intercalación está precedido por al menos 2 espacios o caracteres, por ejemplo, si los puntos en los espacios siguientes representan espacios, la pérdida de memoria no se activará .^ , mientras que este será ..^ (solo lentamente)

En esta captura de pantalla de Process Explorer , el script había estado funcionando aproximadamente 30 segundos, consumió 2.9GB, y aún estaba subiendo a un ritmo constante:

Si vas a experimentar con esto, asegúrate de que puedes obtener el control Cerrar ventana [X] o tener un Administrador de tareas o Explorador de procesos encendido y listo como Ctrl-C , Ctrl-Break , Alt-F4 no tienen efecto .

Parece que múltiples cuidados causarán que el uso de la memoria aumente mucho más rápidamente. La primera vez que me encontré con esto no había suficiente memoria disponible en 1 o 2 minutos para hacer cosas simples como Alt-Tab e incluso el saludo de 3 dedos Ctrl-Alt-Del no fue efectivo. Tuve que apagar fuertemente la máquina.