rymga ← Volver a Lock Master

Tracing & retrace

Dos herramientas posteriores a la compilación basadas en la misma idea: la información necesaria para interpretar una compilación protegida es tuya y solo tuya. rymga te entrega los archivos y no conserva nada; así, nadie —ni siquiera nosotros— puede deshacer tu ofuscación o falsificar tus marcas de agua.

Retrace

La ofuscación lo renombra todo, por lo que el informe de error de un usuario llega ilegible: at a.a.b(...) instead of at app.EventDispatcher.foo(...). Retrace lo recupera sin conexión usando el mapa de nombres generado por tu compilación. Sin subidas, claves ni servidores: solo una búsqueda de texto.

El archivo de correspondencias

Cada compilación que renombra genera un archivo de correspondencias —un pequeño archivo de texto que relaciona los nombres originales con los ofuscados—. La CLI lo descarga junto al resultado (app-obf.map beside app-obf.jar), or wherever --mapping-out points.

Keep it, per release. Trata el .map como un artefacto de compilación: guárdalo en el repositorio o archívalo con cada versión. Si lo pierdes, no podrás reconstruir los informes de esa compilación y, como rymga nunca lo almacena, no podremos darte otra copia. Es la misma disciplina que con mapping.txt.)

No lo conservamos porque el mapa es la clave para leer el código ofuscado. Almacenarlo nos convertiría en un único punto desde el que deshacer la protección de todos; por eso lo entregamos y lo olvidamos.

Nombres estables entre versiones (incremental)

Indica el mismo archivo a la CLI mediante --mapping rymga.map y hará ambas cosas: subirá el mapa anterior para que las clases y métodos sin cambios keep their obfuscated names, y escribirá el mapa actualizado en ese mismo archivo para la próxima vez. Guarda rymga.map con cada versión y la API pública renombrada permanecerá estable; todo lo que se compiló contra ella seguirá enlazando. Esta es la «ofuscación incremental» que una seed por sí sola no puede ofrecer.

Running retrace

Indica el mapa de la compilación y proporciona el stack trace desde un archivo o mediante una tubería:

# from a file
java -jar rymga-cli.jar retrace --mapping app-obf.map --trace crash.txt

# or straight from a pipe
cat crash.txt | java -jar rymga-cli.jar retrace --mapping app-obf.map

El trace ofuscado de la izquierda se convierte en el legible de la derecha:

Lo que envió el usuario
Exception in thread "main" java.lang.IllegalStateException: boom
	at a.a.b(EventDispatcher.java:4)
	at a.a.a(EventDispatcher.java:3)
	at app.Main.main(Main.java:2)
Después de retrace
Exception in thread "main" java.lang.IllegalStateException: boom
	at app.EventDispatcher.foo(EventDispatcher.java:4)
	at app.EventDispatcher.launchSomething(EventDispatcher.java:3)
	at app.Main.main(Main.java:2)
Usa el mapa correspondiente a la compilación. Los nombres cambian entre versiones —se asignan en orden, por lo que añadir una clase los reorganiza—. Reconstruye cada trace con el mapa de esa misma compilación ; por eso debes guardar uno por versión. Para una API pública cuyos nombres deban permanecer estables, keep su nombre en vez de renombrarlo.

Marca de agua por comprador

Si vendes tu plugin, puedes marcar cada copia entregada con el identificador del compradorde forma invisible. Si se filtra una copia, recuperas ese identificador y sabes exactamente a quién pertenecía. La marca está distribuida con redundancia por el JAR, por lo que resiste el reempaquetado e incluso el borrado de algunas clases.

It's la misma CLI: una única herramienta, sin nada adicional que instalar o gestionar. El marcado y el trazado se realizan en nuestra nube; cada licencia tiene un secreto propio que nunca sale de nuestros servidores ni se incluye en ningún JAR. No tienes que gestionar un archivo de claves: solo indicas el JAR a la CLI.

Cómo funciona

  1. Obfuscate once. Una compilación normal produce tu archivo protegido app-obf.jar.
  2. Stamp per sale. Para cada comprador, watermark stamp el JAR ofuscado se marca con su identificador. No se vuelve a ofuscar: es una modificación ligera y cuesta 1 token.
  3. Traza una filtración. Run watermark trace sobre la copia filtrada para recuperar el identificador. Es gratuito.
Nosotros custodiamos el secreto para que tú no puedas perderlo. Conservamos un secreto por licencia en el servidor; nunca tienes que verlo ni gestionarlo, y una licencia siempre reconoce sus propias marcas. Límite real: la marca de agua es tracing, not tamper-proofing —el secreto impide falsificarla, pero un atacante decidido que compare dos copias con marcas distintas puede localizar y limpiar los campos que la transportan—. Aumenta el esfuerzo y permite atribuir una filtración; no es imposible de eliminar.

Commands

# per sale, stamp the obfuscated jar with that buyer's id (1 token, no re-obfuscation)
java -jar rymga-cli.jar watermark stamp \
  --in app-obf.jar --id "order-8842-jane" --out app-jane.jar
# a copy leaks → recover the id (free)
java -jar rymga-cli.jar watermark trace --in leaked.jar
# → order-8842-jane

La autenticación es la misma que para el resto: tu clave de plaza (--key or OBF_KEY). La CLI solo realiza la llamada; ni la lógica de marcado ni el secreto llegan al cliente.