黑马程序员技术交流社区

标题: 类加载器解密流程求大神解 [打印本页]

作者: 高波    时间: 2013-12-31 20:46
标题: 类加载器解密流程求大神解
  1. package cn.itcast.day2;

  2. import java.io.ByteArrayOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;

  8. public class MyClassLoader extends ClassLoader{

  9.         /**
  10.          * @param args
  11.          */
  12.         public static void main(String[] args) throws Exception {
  13.                 // TODO Auto-generated method stub
  14.                 String srcPath = args[0];
  15.                 String destDir = args[1];
  16.                 FileInputStream fis = new FileInputStream(srcPath);
  17.                 String destFileName = srcPath.substring(srcPath.lastIndexOf('\\')+1);
  18.                 String destPath = destDir + "\\" + destFileName;
  19.                 FileOutputStream fos = new FileOutputStream(destPath);
  20.                 cypher(fis,fos);
  21.                 fis.close();
  22.                 fos.close();
  23.         }
  24.        
  25.         private static void cypher(InputStream ips ,OutputStream ops) throws Exception{
  26.                 int b = -1;
  27.                 while((b=ips.read())!=-1){
  28.                         ops.write(b ^ 0xff);
  29.                 }
  30.         }

  31.         private String classDir;

  32.         @Override
  33.         protected Class<?> findClass(String name) throws ClassNotFoundException {
  34.                 // TODO Auto-generated method stub
  35.                 String classFileName = classDir + "\\"  + name.substring(name.lastIndexOf('.')+1) + ".class";
  36.                 try {
  37.                         FileInputStream fis = new FileInputStream(classFileName);
  38.                         ByteArrayOutputStream  bos = new ByteArrayOutputStream();
  39.                         cypher(fis,bos);
  40.                         fis.close();
  41.                         System.out.println("aaa");
  42.                         byte[] bytes = bos.toByteArray();
  43.                         return defineClass(bytes, 0, bytes.length);
  44.                 } catch (Exception e) {
  45.                         // TODO Auto-generated catch block
  46.                         e.printStackTrace();
  47.                 }
  48.                 return null;
  49.         }
  50.        
  51.         public MyClassLoader(){
  52.                
  53.         }
  54.        
  55.         public MyClassLoader(String classDir){
  56.                 this.classDir = classDir;
  57.         }
  58. }
复制代码

张老师的自定义类加载器,在利用自定义类加载器加载类文件时,找到的是已经加密的文件,具体是怎样用自定义类加载器解密的,流程是怎样的?求大神讲解,已晕




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2