• Fuentes

 #366783  por adwind
 
Este es un ejemplo de cargar una clase encriptada.

Creamos una interfaz llamada Hola.
Hola.java
Código: Seleccionar todo
public interface Hola {
    
    public void imprimme();
    
}
Extendemos de la clase Hola
HolaMundo.java
Código: Seleccionar todo
public interface HolaMundo implements Hola {
    
    public void imprimme(){

System.out.println("Hola mundo");
}
    
}
Extendemos de la clase ClassLoader, aquí es donde nace la magia
ClassLoaderMod.java
Código: Seleccionar todo
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 *
 * @author adwind
 */
public class ClassLoaderMod extends ClassLoader {

    public ClassLoaderMod() {
    }

    @Override
    public Class findClass(String name) {
        byte[] b = loadClassData(name);
        return defineClass(name, b, 0, b.length);
    }

    private byte[] loadClassData(String name) {
        InputStream m = getResourceAsStream(name);
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        try {
            byte[] buf = new byte[m.available()];
            m.read(buf);
            b.write(buf, 0, buf.length);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return Base64.decode(new String(b.toByteArray()));
    }
}

Esta clase Prueba.java es donde hacemos uso de las demas.
Código: Seleccionar todo



/**
 *
 * @author adwind
 */
public class Prueba {

    
    public static void main(String[] args){
        ClassLoader cc=new ClassLoaderMod();
        
        try {
            //Si el constructor tiene, parametros entonces en el metodo
            //getDeclaredConstructor() se le pasan el tipo de clase
            //getDeclaredConstructor(String.class, int.class).newInstance("HOLAMUNDO", 2);
            Hola aaa=(Hola)cc.loadClass("HolaMundo").getDeclaredConstructor().newInstance();
         
            aaa.imprimme();
            
        } catch (Exception ex) {
          ex.printStackTrace();
        }
    }
}
NOTA: Compilamos HolaMundo.java y tenemos HolaMundo.class y esta la encriptamos con Base64 y agregamos Holamundo.class y le quitamos la extensión y lo agregamos donde están las otras clases compiladas y vuala!!! Cargamos las clases Runtime :P