Inyector de predicados opacos
Inyecta predicados opacos siempre verdaderos y siempre falsos en el código fuente para confundir a las herramientas de análisis estático y a los lectores humanos. Compatible con 6 tipos de predicado y 12 lenguajes de programación con densidad de inyección configurable. Todo el procesamiento es local y privado.
Inject always-true and always-false opaque predicates into your code to confuse static analysis tools and human readers. Supports 6 predicate types, 12 programming languages, and configurable injection density. All processing is local and private.
Try an example:
Paste source code and click Inject Opaque Predicates to add always-true and always-false conditions that confuse static analysis. Supports 6 predicate types and 12 programming languages. Configure type, language, and density in the settings above.
¿Por qué usar nuestro inyector de predicados opacos?
- Varios tipos de predicado: elige entre seis tipos distintos de predicado opaco: aritmético invariante (expresiones siempre verdaderas/falsas), trucos XOR y de bits, predicados de coerción de tipos, invariantes sensibles al flujo, comprobaciones autorreferenciales y predicados de código muerto. Cada tipo usa propiedades matemáticas distintas que resisten la detección por patrones.
- Varios lenguajes de salida: genera predicados opacos para JavaScript, Python, TypeScript, Java, C, C++, C#, Go, Rust, PHP, Ruby y Swift. El inyector adapta la sintaxis del predicado a los operadores y el sistema de tipos de cada lenguaje, preservando el invariante matemático que hace opaco el predicado.
- Densidad de inyección configurable: controla cuántos predicados opacos inyectar: ligera (1-2 predicados), media (3-5 predicados) o intensa (6-10+ predicados). Aumenta la densidad para una ofuscación más fuerte o mantenla ligera para minimizar el aumento de código. Los predicados se distribuyen aleatoriamente por todo el código.
- Procesamiento local y privado: toda la generación de predicados y la transformación del código ocurre íntegramente en tu navegador. Tu código fuente nunca sale de tu dispositivo. Sin llamadas a API, sin analíticas y sin recogida de datos: privacidad total para tu código propietario. Sin registro ni cuenta.
¿Qué es un predicado opaco?
Un predicado opaco es una expresión condicional en el código cuyo resultado se conoce (siempre verdadero o siempre falso) pero que parece una condición legítima de ejecución. A diferencia de las condicionales normales, los predicados opacos están diseñados para que las herramientas de análisis estático difícilmente los evalúen en tiempo de compilación. Por ejemplo, en aritmética entera siempre es verdadero (ya que elevar al cuadrado cualquier entero da un resultado no negativo), pero un descompilador ingenuo puede no reconocer ese invariante. Los predicados opacos son un bloque de construcción fundamental de la ofuscación de código: añaden rutas de código muerto que nunca se ejecutan (predicados siempre falsos) o garantizan que ciertos bloques siempre se ejecuten (predicados siempre verdaderos), confundiendo tanto a lectores humanos como a herramientas de análisis automático.
Cómo funciona el inyector de predicados opacos
- Análisis de la entrada: la herramienta acepta código fuente como entrada. El código se analiza como texto plano para identificar posibles puntos de inyección: antes de definiciones de funciones, antes de bloques if/else, dentro del cuerpo de funciones en límites de sentencias y al final de las funciones. Los límites de sentencia se identifican por saltos de línea y puntos y coma.
- Selección del predicado: según el tipo de predicado y el lenguaje de destino elegidos, la herramienta genera expresiones de predicado opaco con la sintaxis específica del lenguaje. Para JavaScript, podría ser if ((a + a) / 2 === a) (siempre verdadero para números). Para Python, podría usar trucos de coerción de tipos como if (True == 1) (siempre verdadero).
- Generación de variables: para que los predicados parezcan legítimos, el inyector genera nombres de variables aleatorios que coinciden con el estilo de codificación del lenguaje de entrada. Las variables se declaran con los tipos adecuados y se inicializan con valores que hacen que el predicado se evalúe correctamente.
- Inyección: los predicados se inyectan en ubicaciones válidas aleatorias de todo el código. Cada predicado envuelve un bloque de código (para siempre verdaderos) o inserta un bloque de código muerto (para siempre falsos). El inyector aplica una densidad configurable para controlar cuántos predicados añade.
Tipos de predicados opacos
- Aritmético invariante: usa propiedades matemáticas que siempre se cumplen. Ejemplos: x * 0 === 0 (siempre verdadero), x * x >= 0 (siempre verdadero para enteros), y - y === 0 (siempre verdadero). Explotan invariantes algebraicos.
- Trucos XOR y de bits: usa propiedades de las operaciones bit a bit. Ejemplos: x ^ x === 0 (siempre verdadero para cualquier x), (x & ~x) === 0 (siempre verdadero), x | x === x (siempre verdadero). Difíciles de analizar estáticamente.
- Predicados de coerción de tipos: explotan conversiones implícitas de tipo. Ejemplos: 1 + 1 !== "11" (siempre verdadero: suma numérica frente a concatenación de cadenas), [] == false (siempre verdadero en JS). Específicos del lenguaje y muy confusos.
- Invariantes sensibles al flujo: usan propiedades que se cumplen en puntos concretos del código. Ejemplo: typeof x === typeof x (siempre verdadero), x === x (siempre verdadero salvo NaN). Sencillos pero eficaces.
- Predicados de código muerto: condiciones siempre falsas que envuelven código que nunca se ejecuta. Crean bloques inalcanzables que confunden el análisis de flujo de control. Ejemplo: if (false && complexCondition) cuando el compilador no puede demostrar fácilmente que la condición siempre es falsa.
Privacidad y seguridad
Esta herramienta se ejecuta íntegramente en tu navegador con JavaScript del lado del cliente. Tu código fuente, los predicados generados y la salida ofuscada nunca se suben a ningún servidor, no se almacenan en ninguna base de datos ni se transmiten por la red. Toda la generación de predicados, el análisis del código, el renombrado de variables y el formateo de la salida se ejecutan localmente en tu dispositivo. No hay llamadas a API, seguimiento analítico, cookies ni recogida de datos de ningún tipo. Esto lo hace totalmente seguro para ofuscar código propietario, software con licencia o algoritmos sensibles.
Preguntas frecuentes
Un predicado opaco es una expresión condicional que siempre se evalúa con el mismo valor (siempre verdadero o siempre falso) pero parece una condición legítima de ejecución. Por ejemplo, `x * 0 === 0` (siempre verdadero) o `x !== x` (siempre falso para números). Se usan para confundir a las herramientas de análisis estático y a los lectores humanos.
Seis tipos: aritmético invariante (p. ej., `x * 0 === 0`), trucos XOR y de bits (p. ej., `x ^ x === 0`), coerción de tipos (p. ej., `[] == false`), invariantes sensibles al flujo (p. ej., `typeof x === typeof x`), predicados de código muerto (siempre falsos) y combinado (mezcla todos los tipos para máxima complejidad).
JavaScript, TypeScript, Python, Java, C, C++, C#, Go, Rust, PHP, Ruby y Swift. Los predicados se adaptan a cada lenguaje con los operadores, sistemas de tipos y convenciones de sintaxis adecuados.
No. Los predicados siempre verdaderos garantizan que el código envuelto se ejecute siempre. Los predicados siempre falsos envuelven código muerto inalcanzable. La lógica y el comportamiento del programa permanecen completamente intactos. Solo aumenta el tamaño del código y hay una sobrecarga mínima en tiempo de ejecución al evaluar las condiciones del predicado.
Los descompiladores básicos no pueden detectar la mayoría de los predicados opacos. La ejecución simbólica avanzada puede evaluar predicados aritméticos simples. Usar varios tipos de predicado juntos ofrece una protección más fuerte que cualquier tipo por sí solo.
Por supuesto. El inyector se ejecuta íntegramente en tu navegador. Tu código fuente, los predicados generados y la salida ofuscada nunca se suben a ningún servidor ni se transmiten por la red. Todo el procesamiento es local, sin llamadas a API ni recogida de datos.
La densidad ligera añade 1-2 predicados (~10-30 líneas). La media añade 3-5 predicados (~30-80 líneas). La intensa añade 6-10+ predicados (~80-200+ líneas). Cada predicado suele añadir 2-5 líneas, incluidas las declaraciones de variables.
Sí: 100 % gratis, sin registro, sin cuenta y sin límites de uso. Ofusca tanto código como necesites. Sin niveles premium, cargos ocultos ni límites de velocidad. Tu código nunca sale de tu dispositivo.