Cargue un archivo sin usar una nueva URL () a través de Java

Así que estoy haciendo un juego pequeño y el mercado en el que estoy es bastante... competitivo... Tan competitivo que es extremadamente común que se filtre de forma gratuita al público. Para filtrar el juego, la persona debe eliminar el sistema HWID y el sistema Killswitch. Para hacer esto, el método más común es simplemente buscar "nueva URL" en todo el proyecto y verificar todos los enlaces que crea, luego eliminarlos si es necesario.

Esto DEBE usar solo las clases de Java predeterminadas, no puedo usar ninguna biblioteca u otras descargas enlazables.

Mi pregunta es: "¿Es posible hacer una solicitud a mi archivo de Dropbox para leer un documento de texto SIN usar la clase URL?"

No estoy seguro si cubrí todo lo que necesitaba cubrir, así que si está confundido, podría brindarle más información si puedo.

Gracias de antemano!

preguntado el 03 de mayo de 12 a las 19:05

Siempre puede implementar el protocolo usted mismo, lo mínimo que realmente necesita. -

3 Respuestas

Esta es realmente la vieja pregunta "¿Cómo protejo mi aplicación Java de X?".

El hecho es que no puedes. Cualquier persona con suficiente tiempo y trabajo podrá desarmar su aplicación Java y volver a unirla. Por supuesto, puede trabajar con algunos ofuscadores geniales que lo hacen poco práctico para cualquiera que quiera hacerlo rápido.

Más allá de ese punto, ha hecho una pregunta algo trivial. Que es "¿Cómo oculto 'nueva URL'". Supuse que terminará confiando en la clase urlconnection para trabajar realmente con la url. Esto podría tratar con un poco de optimización y podría agregar más capas, como almacenar el nombre de la clase y la URL como una matriz de bytes y muchas otras cosas. También podría funcionar con algo de almacenamiento en caché del constructor y la clase. ¡Realmente te recomiendo que no uses esto!

public static URLConnection getConnection() {
    try {
        Class<?> cla = Class.forName("java.net.URL");
        return (URLConnection) cla.getMethod("openConnection", new Class[0]).invoke(cla.getConstructor(String.class).newInstance("http://somtopsecereturl.tld"), new Object[0]);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    return null;
}

Por supuesto, puede seguir bajando la pila y hacer la lectura real a través de llamadas de reflexión para que nunca haga referencia a los tipos de objetos reales, lo que hace que sea muy difícil de encontrar.

contestado el 03 de mayo de 12 a las 20:05

@ Krroae27 El problema es que necesito cargar un archivo con este método. Como dije, necesito ocultar la mayor cantidad posible de conexiones que los ofuscadores simplemente no harán. No estoy seguro si el método que me diste es lo suficientemente confiable para funcionar siempre, pero esto solo debe ejecutarse al comienzo del lanzamiento: André

@ user1363526 ¿Cómo está cargando un archivo ahora? ¿Al cargar te refieres a la carga de clases? Lo único que he hecho aquí es usar la reflexión para invocar la clase de URL y el método de conexión abierta para que no haya una referencia textual a la 'nueva URL' (es tan confiable como invocarla normalmente). Como eso es lo que creía que me hizo su pregunta. - krrose27

Puede usar URI en su lugar.

URI uri = new URI("http://...");
uri.toURL().openConnection():

contestado el 03 de mayo de 12 a las 20:05

Una ofuscación de bastante baja tecnología: cree una clase que contenga una instancia de URL:

class myFoo {
    private URL url;
    myFoo (String s)  throws MalformedURLException {
        this.url = new URL(s);
    }
    public getHatSize() {
        return this.url;
    }
}

contestado el 03 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.