java源代码加壳问题(100分)

jklot66 2009-10-20 05:04:27
有做过java加壳的么,给点指点意见。看了jboss中的javassist。都说能够解决,但是我做出来不是我想要的效果,有谁做过这样的么?就是.class文件不能正常反编译。
...全文
536 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2009-10-23
  • 打赏
  • 举报
回复
up!
Agile牧 2009-10-23
  • 打赏
  • 举报
回复
代码混淆器
jklot66 2009-10-23
  • 打赏
  • 举报
回复
解决这个问题马上结贴 谢谢大家了
jklot66 2009-10-23
  • 打赏
  • 举报
回复
在问下 我用了jocky混淆器 混淆一个web工程做测试 但是每次都是报jvm内存溢出。当我只混淆部分代码时他又报class file has wrong version 50.0, should be 49.0 该如何处理呢?
hui94781674 2009-10-20
  • 打赏
  • 举报
回复
只能用用混淆器了、、
阿士匹灵 2009-10-20
  • 打赏
  • 举报
回复
学习 帮顶

不能改变结果 就去完善过程
秦π 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 swandragon 的回复:]
代码混淆器


[/Quote]
up
swandragon 2009-10-20
  • 打赏
  • 举报
回复
代码混淆器

crowxiao 2009-10-20
  • 打赏
  • 举报
回复
学习,收藏了。
xiaozejun 2009-10-20
  • 打赏
  • 举报
回复
好像jdk提供的java类都能进行java反编译
他反编译就是遵循的java语义规则
如果你要不能进行反编译 那么就必须不遵守它的语义规则
那么就必须要你自己写的JDK
一头头 2009-10-20
  • 打赏
  • 举报
回复
URLClassLoader。用URLClassLoader可以在java程序的运行期间,再将文件夹或者jar加入到classpath中,这个特性事实上就是动态加载。既然可以动态加载class的文件夹或者jar,为何不可以加载加密后的classes呢,将classes用自己的方式加密,在URLClassLoader调用时,使用自己的方式解密。不就是达到了加壳的目的了吗?不过解密的代码放在何处是个问题,就是说解壳器的代码暴露在外,还是很危险的。


//URLClassLoaderUtil jar文件载入工具类
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

publicclass URLClassLoaderUtil {
URLClassLoader classLoader = null;// URLClassLoader类载入器
private String jarFileName;
privatebooleanisFile = true;
List<String> jars = new ArrayList<String>(0);

public URLClassLoaderUtil(String jarFileName) {
this.setJarFileName(jarFileName);
this.inti();
}

public URLClassLoaderUtil(String jarFileName, boolean isFile) {
this.setJarFileName(jarFileName);
this.setFile(isFile);
this.inti();
}

/**
*初始化,读取文件信息,并将jar文件路径加入到classpath
*/
privatevoid inti() {
// 添加jar文件路径到classpath
if (this.isFile) {
File f = new File(jarFileName);
addPath(f.toURI().toString());
jars.add(f.getAbsolutePath());
} else {
ReadJarFile df = new ReadJarFile(jarFileName, new String[] { "jar",
"zip" });
this.jars = df.getFiles();
List<String> jarURLs = df.getFilesURL();
Object[] o = jarURLs.toArray();
addPath(o);
}
}

/**
*回叫方法,class操作
*
*@paramcallBack
*/
publicvoid callBack(ClassCallBack callBack) {
for (String s : this.jars) {
loadClass(s, callBack);
}
}

/**
*添加单个jar路径到classpath
*
*@paramjarURL
*/
privatevoid addPath(String jarURL) {
try {
classLoader = new URLClassLoader(new URL[] { new URL(jarURL) });
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

/**
*添加jar路径到classpath
*
*@paramjarURLs
*/
privatevoid addPath(Object[] jarURLs) {
URL[] urls = new URL[jarURLs.length];
for (int i = 0; i < jarURLs.length; i++) {
try {
urls[i] = new URL(jarURLs[i].toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
classLoader = new URLClassLoader(urls);
}

/**
*动态载入class
*
*@paramjarFileName
*@paramcallBack
*/
privatevoid loadClass(String jarFileName, ClassCallBack callBack) {
JarFile jarFile = null;
try {
jarFile = new JarFile(jarFileName);
} catch (IOException e) {
e.printStackTrace();
}
Enumeration<JarEntry> en = jarFile.entries();
while (en.hasMoreElements()) {
JarEntry je = en.nextElement();
String name = je.getName();
String s5 = name.replace('/', '.');
if (s5.lastIndexOf(".class") > 0) {
String className = je.getName().substring(0,
je.getName().length() - ".class".length()).replace('/',
'.');
Class c = null;
try {
c = this.classLoader.loadClass(className);
System.out.println(className);
} catch (ClassNotFoundException e) {
System.out.println("NO CLASS: " + className);
// continue;
} catch (NoClassDefFoundError e) {
System.out.println("NO CLASS: " + className);
// continue;
}
callBack.operate(c);
}
}
}

public String getJarFileName() {
returnjarFileName;
}

publicvoid setJarFileName(String jarFileName) {
this.jarFileName = jarFileName;
}

publicboolean isFile() {
returnisFile;
}

public URLClassLoader getClassLoader() {
returnclassLoader;
}

publicvoid setClassLoader(URLClassLoader classLoader) {
this.classLoader = classLoader;
}

publicvoid setFile(boolean isFile) {
this.isFile = isFile;
}
}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/myloon/archive/2007/11/17/1889297.aspx
平淡面对 2009-10-20
  • 打赏
  • 举报
回复
通常都是采用混淆器的方法。class文件如果不能正常反编译,那就说明class文件不是符合java规范的有效的文件。那运行的时候,就得提供自己的jre。
一头头 2009-10-20
  • 打赏
  • 举报
回复
混淆器算一个解决方案吗
config_man 2009-10-20
  • 打赏
  • 举报
回复
没听过...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧