Java 加密 防盗版 源码保护 - Disruptor
一款用于Java工程的加密和反盗版的Eclipse插件,Java加密
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