类型:编程软件
语言:中文
更新:2025-12-24 09:33
大小:2.9M
版本:5.3.3 【java 代码混淆工具】
平台:WinAll, Win7, win8
Android开发的应用程序主要用Java代码撰写,但Java代码比较容易被反编译,为了非常不错的保护Java源码,大家需要对编译好后的class文件进行混淆。Proguard是一个Java类文件压缩器、优化器、混淆器、预校验器。ProGuard是一个命令行工具,并提供了图形化用户界面,它也可以结合Ant或J2MEWirelessToolkit用。通过ProGuard得到的更精简的jar文件意味着仅需更小的存储空间混淆环节会用无意义的短变量去重命名类、变量、办法。这类步骤让代码更精简,更高效,也更难被逆向(破解)。
压缩:测试并移除代码中无用的类、字段、办法和特质(Attribute)。
优化:对字节码进行优化,移除无用的指令。
混淆:用a,b,c,d如此简短而无意义的名字,对类、字段和办法进行重命名。
预检:在Java平台上对处置后的代码进行预检,确保加载的class文件是可实行的。
ProGuar由shrink、optimize、obfuscate和preveirfy四个步骤组成,每一个步骤都是可选的,大家可以通过配置脚本来决定实行其中的哪几个步骤。
混淆就是移除没用到的代码,然后对代码里面的类、变量、办法重命名为人可读性非常差的简短名字。
那样有一个问题,ProGuard如何了解这个代码没被用到呢?
这里引入一个Entry Point(入口点)定义,Entry Point是在ProGuard过程中不会被处置的类或办法。在压缩的步骤中,ProGuard会从上述的Entry Point开始递归遍历,搜索什么类和类的成员在用,对于没被用的类和类的成员,就会在压缩段遗弃,在下面的优化过程中,那些非Entry Point的类、办法都会被设置为private、static或final,不用的参数会被移除,除此之外,有的办法会被标记为内联的,在混淆的步骤中,ProGuard会对非Entry Point的类和办法进行重命名。
那样这个入口点如何来呢?就是从ProGuard的配置文件来,只须这个配置了,那样就不会被移除。
有个三个步骤的过程:
基本混淆
针对APP的量身打造
针对第三方jar包的解决方法
除去在压缩操作删除的无用类,字段和办法外,ProGuard也能在字节码级提供性能优化,内部办法有:
常量表达式求值
删除非必须的字段存取
删除非必须的办法调用
删除非必须的分支
删除非必须的比较和instanceof验证
删除未用的代码
删除只写字段
删除未用的办法参数
像push/pop简化一样的各种各样的peephole优化
在可能的状况下为类添加static和final修饰符
在可能的状况下为办法添加private, static和final修饰符
在可能的状况下使get/set办法成为内联的
当接口只有一个达成类的时候,就取代它
选择性的删除日志代码
实质的优化成效是依靠于你的代码和实行代码的虚拟机的。简单的虚拟机比有复杂JIT编译器的高级虚拟机更有效。无论怎么样,你的字节码会变得更小。
仍有一些明显需要优化的技术不被支持:
使非final的常量字段成为内联
像get/set办法一样使其他办法成为内联
将常量表达式移到循环以外
Optimizations that require escape analysis
TAG标签:ProGuard(1)代码混淆(1)
转载请说明来源于谷普绿色软件(https://www.guixh.com)
本文地址:https://www.guixh.com/soft/12958.html
郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com