Los días cero se encuentran exactamente de la misma manera que cualquier otro tipo de agujero. Lo que hace que un agujero de seguridad sea un "día cero" se basa exclusivamente en quién es consciente de la existencia del agujero, no en ninguna otra característica técnica.
Los agujeros se encuentran, generalmente, por personas inquisitivas que notan un comportamiento extraño, o imaginan un posible error y luego intentan ver si el programador se dio por vencido. Por ejemplo, puedo imaginar que cualquier código que maneje el contenido de la cadena y se esfuerce por ser impermeable a las diferencias de caso (es decir, que maneja "A" como equivalente a "a") puede tener problemas cuando se ejecuta en una computadora turca (porque en idioma turco, la letra minúscula para "I" es "ı", no "i") que puede provocar errores divertidos, incluso agujeros de seguridad (p. ej., si algunas partes del sistema verifican la equivalencia de la cadena en una ubicación sensible al entorno camino, mientras que otros no lo hacen). Por lo tanto, puedo intentar configurar mi computadora con una configuración local turca y ver si el software que apunto comienza a hacer cosas raras (además de hablar turco).
Parte de la búsqueda de errores se puede automatizar probando muchas "combinaciones inusuales". Esto se conoce como fuzzing . Puede ayudar como primer paso, encontrar combinaciones de entrada que desencadenen bloqueos; cualquier cosa que haga que el sistema de destino se bloquee debe ser investigada, ya que los bloqueos generalmente significan corrupción de memoria, y la corrupción de memoria puede a veces ser objeto de abuso en cosas ingeniosas como la ejecución remota de código. Sin embargo, tales investigaciones aún deben ser realizadas por cerebros humanos.
(Si hubiera una forma completamente automática de detectar agujeros de seguridad, entonces los desarrolladores de software lo usarían para producir código libre de errores).