据说java编译成applet class的时候可以加密,以防止反编译软件的破解?(73分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
请问是编译器的选项?还是第三方工具?
如果是编译器的选项,请问是什么编译器可以做到?
就剩73分了! :-(
 
我见过的所谓加密也只是改变量和方法名等,降低反编译出来的源码可能性。
 
好像没听说过什么编译器有“加密”的选项,是不是?
 
同意cheka.
从理论上说,只要你的程序是pure java的,都能被反编译
 
JBuilder 有“加密”的选项,叫 "Obfuscate",在 Project properties | Build 里面。
不过,要效果好还是要用专门的“加扰器”- Java Obfuscator。
cheka 讲的 “改变量和方法名”,也就是“名称加扰”- Name Obfuscation,
是被称为第一代加密器所做的事情。而所谓的第二代加密器则可以做“流程加扰”-
Flow Obfuscation 以及“字符串加密”- String Encryption。效果大大不同。
下面的例子资料来自: http://www.zelix.com/klassmaster/features.html
原始代码:
package test;
import java.util.*;
class Demo {
private Vector buffer = new Vector();
/**
* Return the position of the specified String in the
* buffer. Remove the String once if it has been found.
* Return -1 if the String isn't found. */
int getStringPos(String string) {
for(int counter=0;
counter < buffer.size();
counter++) {
String curString = (String)buffer.elementAt(counter);
if (curString.equals(string)) {
buffer.remove(counter);
return counter;
}
}
return -1;
}
}
经过“名称加扰”,再反编译:
package a;
import java.util.Vector;
class a {
private Vector a new Vector();
int a(String s) {
for(int i = 0;
i < a.size();
i++) {
String s1 = (String)a.elementAt(i);
if(s1.equals(s)) {
a.remove(i);
return i;
}
}
return -1;
}
}
经过“流程加扰”,再反编译:
package a;
import java.util.Vector;
class a {
private Vector a;
public static int b;
a() {
a = new Vector();
}
int a(String s) {
int i;
int j;
j = b;
i = 0;
if(j == 0) goto _L2;
else
goto _L1
_L1:
String s1 = (String)a.elementAt(i);
s1.equals(s);
if(j != 0) goto _L4;
else
goto _L3
_L3:
JVM INSTR ifeq 48;
goto _L5 _L6
_L5:
break MISSING_BLOCK_LABEL_37;
_L6:
continue;
a.remove(i);
i;
_L4:
return;
_L2:
if(i >= a.size())
return -1;
if(true) goto _L1;
else
goto _L7
_L7:
}
}
这么一搞的话,源程序是恢复不出来了。
 
高!
我以前想过“名称加扰”,现在正在写一个小工具实现之(用于Delphi)。我认为这只是没有办法的
办法——太简单了,对Delphi这样的编译型语言用处不大。关于“流程加扰”,我认为关键在于如何做到
加扰前后的代码从接口外部看来有相同的特性(执行时间不能相差太多),不知孙老师能否提供一些相关
算法的参考资源?
 
自己建立Classloader类,先加密自己的类文件,由Classloader解密后加载运行!
 
Anfy 中的 class 文件用 DeJava 打开之后,挺像有流程加绕过的,不知道是不是?
 
后退
顶部