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.
.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:
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)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)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
- Obfuscate once. Una compilación normal produce tu archivo protegido
app-obf.jar. - Stamp per sale. Para cada comprador,
watermark stampel JAR ofuscado se marca con su identificador. No se vuelve a ofuscar: es una modificación ligera y cuesta 1 token. - Traza una filtración. Run
watermark tracesobre la copia filtrada para recuperar el identificador. Es gratuito.
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.