Podrías hacer algo como, donde codificar todas las condiciones en un hash, que está construido cuidadosamente para devolver bits específicos en ciertas posiciones. Tenga en cuenta que el hash generará un valor aleatorio, por lo que usted mismo tendría que aplicar fuerza bruta a algunas de las constantes para obtener la salida que desea:
if chr(sha512((length(c) > 1000) + "764065445" + b + md5(b.substr(0,10))).substring(15,1)) % 64 then (repeat as many times as neccessary to pick out bits)
PERO: Esto también significa que tiene que aceptar algunos falsos positivos, por ejemplo, donde se rechaza la entrada, incluso si esto no resulta en una vulnerabilidad explotada.
Aquí, el atacante, por supuesto, podrá ver la primera condición, la longitud de c debe estar por encima o por debajo de 1000. Pero aquí, los 10 primeros caracteres de b deben dar como resultado un hash de md5 desconocido. eso, combinado con la longitud de c, ya sea por encima o por debajo de 1000, y el resultado de b, dará como resultado que los bits específicos de un hash512 hash sean 1 o 0.
Seleccionar más bits del hash sha512 hará que los falsos positivos sean menos probables, pero también aumentará la posibilidad de encontrar la vulnerabilidad mediante el uso de tablas de arco iris.
Al seleccionar solo tantos bits necesarios para reducir los falsos positivos al mínimo, intentar forzar el hash o utilizar tablas de arco iris, solo se obtendrá un número ilimitado de resultados.
Esto es similar a vanitygen a bitcoin, donde haces fuerza bruta para obtener ciertos bits del hash que deseas. Tenga en cuenta que NO prueba el hash sha512 completo, solo prueba que ciertos bits sean verdaderos o falsos.