Disruptor - 一款用于Java工程的加密和反盗版的Eclipse插件
程序截图:
Disruptor具有如下特点:
- 维护知识产权
多种运行控制手段,防止盗版行为。
独特的混淆机制可以完全的防止任何类型的反编译,反编译后的代码逻辑不完全,不具有任何可读性。
- 安装、使用方便
Disruptor以插件形式集成在Eclipse开发环境中,安装简单,使用时与开发环境相结合,操作方便。
- 轻松部署
无需对现有项目做任何改动,Disruptor会直接生成加密后的class文件和解密所需文件。
仅仅替换项目的类文件就可以完成部署,无需对运行环境做任何改动。
- 应用广泛
可以应用于任意的Java桌面应用及Java Web应用。
示例程序:
原始代码:
Test.java
package abc.test;
public class Test {
public static void main(String[] args) {
Human h1 = new Human();
h1.setName("Safrain");
h1.setAge(22);
Human h2 = new Human();
h2.setName("X");
h2.setAge(999);
h1.sayHello(h2);
h1.sayAge();
h2.sleep();
}
}
Human.java
package abc.test;
public class Human {
private String name;
private int age;
public void sayHello(Human h) {
System.out.println(String.format("Hello,%s! My name is %s.", h.name,
name));
}
public void sayAge() {
System.out.println(String.format("I am %d years old", age));
}
public void sleep() {
System.out.println("Zzzzz..");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
反编译加密后的类文件
Test.java
package abc.test;
public class Test {
public static void main(String[] args) {
Human h1 = new Human();
safrain.disruptor.Invoker.stub.stub_11("Safrain", h1, h1);
safrain.disruptor.Invoker.stub.stub_12(h1, 22, h1);
Human h2 = new Human();
safrain.disruptor.Invoker.stub.stub_13(h2, "X");
safrain.disruptor.Invoker.stub.stub_14(h2, h2, 999);
safrain.disruptor.Invoker.stub.stub_15(h1, h1, h2);
safrain.disruptor.Invoker.stub.stub_16(h1);
safrain.disruptor.Invoker.stub.stub_17(h2, h2);
}
}
Human.java
package abc.test;
public class Human {
private String name;
private int age;
public void sayHello(Human h) {
safrain.disruptor.Invoker.stub.stub_18(System.out, String.format("Hello,%s! My name is %s.", h.name,
name), name);
}
public void sayAge() {
safrain.disruptor.Invoker.stub.stub_19(System.out, String.format("I am %d years old", age), name);
}
public void sleep() {
safrain.disruptor.Invoker.stub.stub_20(System.out, name, "Zzzzz..");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行效果(直接输入密码启动方式):
C:\>java abc.test.Test
Loading native lib...
Input Decryption Key:123123
**Native Loader : Class loaded: safrain/disruptor/Stub
Hello,X!
My name is Safrain.
I am 22 years old.
Zzzzz..
C:\>
除了输入密码的启动方式,Disruptor还提供了程序绑定硬件启动的功能,让程序只能够在指定的计算机上运行,当加密后的程序启动时,会首先检测计算机的硬件信息是否与加密时指定的硬件信息一致,只有硬件信息一致程序才能够启动。目前以注册码进行版权控制的功能正在开发之中。
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
工作一阵子了
发现当初做的东西真是幼稚啊
JVM 都是开源的
得到Java文件的字节码可以说是易如反掌
再怎么折腾源代码都是没有用的
就算打乱了代码,也能通过一些手段把代码还原回来
唉 悲剧
还是使用proguard吧。
至少靠谱一点
有问题请留言或发送邮件到z.safrain@gmail.com,或者联系QQ:65439119