java 加密class文件_JAVA 利用JNI加密class文件/自定义ClassLoader 类

代码:

public class MyClassLoader extends ClassLoader {

/**

* @param args

*/

private native void encrypt();

public byte[] bytes;

public String classDir;

private String LocalName;

private boolean Flag(FileInputStream fis, ByteArrayOutputStream bos) throws Exception{

boolean Result = false;

if(fis.read()==0xCA)Result=true;

return Result;

}

@SuppressWarnings("deprecation")

@Override

protected Class> findClass(String arg0) throws ClassNotFoundException {

String name;

if(LocalName!=null)

name=LocalName;

else

name=arg0;

System.out.println("on my Findclass way");

String ClassName = name.substring(name.lastIndexOf('.')+1) + ".class";

String classFileName = System.getProperty("user.dir")+"\\cn\\drawingbox\\"  + ClassName;

try {

FileInputStream fis = new FileInputStream(classFileName);

ByteArrayOutputStream  bos = new ByteArrayOutputStream();

fis.close();

//这里调用JNI函数进行解码

//System.getProperties().setProperties(String key,String value)

//System.setProperties(arg0);

System.load(classDir+"\\encrypt_main.dll");

//  System.loadLibrary("encrypt_main");

MyClassLoader encypt_function= new MyClassLoader();

encypt_function.classDir=classDir;

encypt_function.bytes = bos.toByteArray();

encypt_function.encrypt();

///

LocalName=null;

return defineClass(encypt_function.bytes, 0, encypt_function.bytes.length);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

@Override

public Class> loadClass(String name) throws ClassNotFoundException {

// TODO Auto-generated method stub

boolean Result = false;

String ClassName = name.substring(name.lastIndexOf('.')+1) + ".class";

if(ClassName.equals("Foo.class")||ClassName.equals("bar.class")){

String classFileName = classDir + "\\"  + ClassName;

try {

FileInputStream fis = new FileInputStream(classFileName);

ByteArrayOutputStream  bos = new ByteArrayOutputStream();

Result = Flag(fis, bos);

fis.close();

bos.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// TODO Auto-generated method stub

if(Result==true)

{

LocalName=name;

return super.loadClass("ThisIsJoy");

}

else

{

LocalName=null;

return super.loadClass(name);

}

}

else

return super.loadClass(name);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值