日期:2014-05-20  浏览次数:20701 次

100分请教java代码混淆
java代码混淆中,可以保留包名,类名,类属性,函数方法参数,只混淆函数方法里面的逻辑么

------解决方案--------------------
参考一下这个链接吧
------解决方案--------------------
不明什么意思。。。
------解决方案--------------------
是算法么?没用过
------解决方案--------------------
Q: 如何安装和运行JOC?
A: 下载joc.jar (http://www.apusic.com/product/cpsy.htm),运行java -jar joc.jar就可以启动Java混淆编译器,joc的命令行参数和javac完全相同,但增加了一个新的参数-Xobfuscate,它的用法如下:
       -Xobfuscate:<level>
其中<level>指定混淆级别,可以是以下几种级别:
       -Xobfuscate:none        不进行混淆
       -Xobfuscate:private     对所有private访问级别的元素进行混淆
       -Xobfuscate:package     对所有private或package private元素进行混淆
       -Xobfuscate:protected   对所有private, package private, protected元素进行混淆
       -Xobfuscate:public      对所有的元素都进行混淆
       -Xobfuscate:all         相当于-Xobfuscate:public
如果使用-Xobfuscate不带级别参数,则相当于-Xobfuscate:package


Q: 如何使用符号保留指令?
A: 除了在命令行用-Xobfuscate参数控制符号混淆级别外,还可以在源代码中使用符号保留指令来控制那些符号需要保留,符号保留指令是一个Java文档注释指令,可以插入在类和类成员的文档注释中,例如:
       /**
        * This class should preserve.
        * @preserve
        */
       public class Foo {
           /**
            * You can specify which field should be preserved.
            * @preserve
            */
           private int x;


           /**
            * This field is not preserved.
            */
           private int y;


           /**
            * You can also preserve methods.
            * @preserve
            */
           public void hello() {}


           /**
            * This method is not preserved.
            */
           private void collect() {}
       }
如果没有@preserve指令,则根据混淆级别及成员的访问级别来确定符号是否保留。


对于类的符号保留指令可以附带一个保留级别参数,来控制类成员的符号保留,包括:
       @preserve            仅对类名进行保留,类成员的保留根据-Xobfuscate命令行参数决定
       @preserve public     保留所有public成员
       @preserve protected  保留所有public和protected成员

       @preserve package    保留所有public, protected, package private成员
       @preserve private    保留所有成员
       @preserve all        相当于@preserve private


------解决方案--------------------
不明觉厉
------解决方案--------------------
就是控制流混淆咯;

给LZ提供几个软件的地址:
几款商业的:
Allatori,这个真心不错,我们公司就用的它;
Stringer;
ZKM;
DashO;
另外也有开源的,但是我看了几个都只提供命名混淆,估计不是LZ相要的吧
------解决方案--------------------
引用: