[quote="zhaomingzm_23"]1.Javassist 小日本的东西,先鄙视一下
如果用[url=http://www.yworks.com/en/products_yguard_about.html]yGroud[/url] 加密过的,你基本就没办法,你无法writeFile覆盖它长文件名的class,你可能都不知道要覆盖哪个。
2.没有什么软件是破解不了的(包括联网验证,我可以根本不让它联网,自己模拟一个response)
引用[url=http://www.pediy.com/tutorial/chap2/Chap2-1.htm]看雪[/url]的Tutorial:
软件的破解技术与保护技术这两者之间本身就是矛与盾的关系,它们是在互相斗争中发展进化的。这种技术上的较量归根到底是一种利益的冲突。
3.当然在只有class的前提下
想去掉原来讨厌的name, logo , not registered infomations 或者什么你不喜欢的东西,知道有个javassist你可以用,总比直接修改class byte[] 强点。[/quote]
另:了解到[url=http://www.ej-technologies.com/products/jclasslib/overview.html]jclasslib[/url] 也可以做这些事情,结合自带的Bytecode viewer 可以直接查看字节码
[img]http://dl.iteye.com/upload/attachment/248878/349364c7-028c-357d-a16b-f6e8f23af2e7.jpg[/img]
如果用[url=http://www.yworks.com/en/products_yguard_about.html]yGroud[/url] 加密过的,你基本就没办法,你无法writeFile覆盖它长文件名的class,你可能都不知道要覆盖哪个。
2.没有什么软件是破解不了的(包括联网验证,我可以根本不让它联网,自己模拟一个response)
引用[url=http://www.pediy.com/tutorial/chap2/Chap2-1.htm]看雪[/url]的Tutorial:
软件的破解技术与保护技术这两者之间本身就是矛与盾的关系,它们是在互相斗争中发展进化的。这种技术上的较量归根到底是一种利益的冲突。
3.当然在只有class的前提下
想去掉原来讨厌的name, logo , not registered infomations 或者什么你不喜欢的东西,知道有个javassist你可以用,总比直接修改class byte[] 强点。[/quote]
另:了解到[url=http://www.ej-technologies.com/products/jclasslib/overview.html]jclasslib[/url] 也可以做这些事情,结合自带的Bytecode viewer 可以直接查看字节码
public class Name
{
public static void main(String... mike) {
System.out.println("测试");
}
}
package com.mike.jclasslib.demo;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.CPInfo;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
/**
* @since 2010-5-13上午09:12:28
*/
public class ConstantPoolChanger {
private static String filePath = "C:/com/Name.class";
private static final String suffix = ".jclasslib";
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(filePath);
DataInput di = new DataInputStream(fis);
ClassFile cf = new ClassFile();
cf.read(di);
CPInfo[] infos = cf.getConstantPool();
int count = infos.length;
for (int i = 0; i < count; i++) {
if (infos != null) {
System.out.print(i);
if(i == 18){
//这里的18就是在Bytecode viewer 中查看得到的。
ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i];
System.out.println(
uInfo.getString()
);
uInfo.setString("mike");
}
}
}
cf.setConstantPool(infos);
fis.close();
//写到文件
File f = new File(filePath + suffix);
ClassFileWriter.writeToFile(f, cf);
}
}
[img]http://dl.iteye.com/upload/attachment/248878/349364c7-028c-357d-a16b-f6e8f23af2e7.jpg[/img]