自己编写的解密类加载器=================
package com.gaoxin;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class CreateClassloader extends ClassLoader{
public CreateClassloader()
{
}
public CreateClassloader(String classDir)
{
this.classDir=classDir;
}
public static void main(String[] args) {
try {
String strpath=args[0];
String despath=args[1];
FileInputStream fis=new FileInputStream(strpath);
//FileOutputStream os=new FileOutputStream(despath);
String destfileName=strpath.substring(strpath.lastIndexOf('\\')+1);
String destpath=despath+"\\"+destfileName;
FileOutputStream os=new FileOutputStream(destpath);
System.out.println("dongligang111----"+destfileName);
System.out.println("dongligan222----"+destpath);
cyphs(fis,os);
fis.close();
os.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private static void cyphs(InputStream is,OutputStream ops) throws Exception
{
int b=-1;
while((b=is.read())!=-1)
{
ops.write(b ^0xff);
}
}
private String classDir;
@Override
public Class<?> findClass(String name)
{
try {
String classFileName=classDir+"\\"+name.substring(name.lastIndexOf('.')+1)+".class";
System.out.println("dongligang----"+classFileName);
FileInputStream fis=new FileInputStream(classFileName);
ByteArrayOutputStream bos=new ByteArrayOutputStream();
cyphs(fis,bos);
System.out.println("dddd=======");
byte[] bytes=bos.toByteArray();
return defineClass(bytes,0,bytes.length);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
============================
package com.gaoxin;
import java.util.Date;
public class ClassLoaderAttachMent extends Date {
public String toString()
{
return "hello,dongligang";
}
}
=========================
package com.gaoxin;
import java.util.Date;
public class TestClassloader {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.out.println(TestClassloader.class.getClassLoader().getClass().getName());
ClassLoader cloader=TestClassloader.class.getClassLoader();
//System.out.println(cloader.getParent());
//System.out.println(System.class.getClassLoader());
//System.out.println(new ClassLoaderAttachMent().toString());
Class clazz=new CreateClassloader("dong").loadClass("ClassLoaderAttachMent");
Date d1=(Date)clazz.newInstance();
System.out.println(d1);
}
}