反编译字节码所生成的源代码几乎与原始的源代码一致.
使用反编译器能够把没有经过特殊处理的class文件还原成几乎和源码一样的java文件.因为在class文件中几乎包括了一切可以用于调试的信息,行号,成员变量,参数类型和参数名称etc, 但是应该不包括javadoc和注释,正应为这样你才能用现代的IDE方便的调试你的程序.定位行,单步执行,审查值etc. 如果我们在编译源码的时候加上-g:none选项,反编译的代码就会损失一些清晰度.例如方法参数名称和局部变量的名称等等.
2. 在java字节码中,混淆是保护知识产权的最佳途径,混淆执行如下一些或全部变换:去除调试信息,<fontface="宋体, simsun"="">名称的处理,编码字符串,改变控制流程,插入讹用的代码,删除未使用的代码和优化代码.混淆带来了维护的困难,这可以通过配置混淆程序将其减到最小.混淆的代码仍旧可读,除非使用了控制流程的混淆和字符串编码.
没有被声明为public的方法和变量仍然可以访问.
具有package或protected可视属性的成员可以通过将助手类插入其包中或使用反射API访问
当变量或方法没有用可视性关键字(publicprotected private)声明时,就是packagevisible的.假如一个包中的某个类有个packagevisible的属性,但是他又没有提供getter方法给你,你又想获得这个属性的值,那我们可以在这个包中加一个助手方法.为这个packagevisible的属性提供一个getter方法.不过当那个包是系统包时,可能会发生SecurityException.我们下面会讨论这个.
使用反射访问私有类成员或方法.
这里要注意的是,如果设置了安全管理器(大多数应用服务程序和中间产品通常都是这样),那么我们还需要多做一些工作,要不就会发生RumtimePermission发生.为了让我们的代码能和已安装的安全管理器协同工作,必须准予通过反射访问声明的成员以及禁止访问检查的许可,这通过添加准予codebase这两种许可java政策文件的方式来实现:
grant{
permissionjava.lang.RuntimePermission “accessDeclaredMembers”;
permissionjava.lang.reflect.ReflectPermission “suppressAccessChecks”;
};
在javacommand中加上 -Djava.security.manager–Djava.security.policy=../conf/java.policy
分享到:
相关推荐
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而闻名。这份压缩包中的资源全面覆盖了Java的学习和应用,包括学习资料、面试题、DOS命令、设计模式以及Excel技巧和Java学习笔记。让我们...
在IT行业中,报表设计和生成是数据可视化的重要环节,而iReport作为一款强大的Java报告工具,因其易用性和灵活性深受开发者喜爱。本学习笔记主要围绕iReport 3.6.7版本展开,探讨其核心功能与使用技巧。 一、...
### 金蝶EAS BOS开发学习笔记:制作第一个列表查询界面 #### 一、环境准备与基础配置 1. **透视图与视图的开启**:为了方便后续的开发工作,首先确保所需的透视图和视图处于打开状态。这包括但不限于BOS透视图下的...
Eclipse插件开发是Java开发领域中的一个重要分支,它允许开发者通过扩展Eclipse IDE的功能来创建自定义的工作环境。这份“Eclipse插件开发笔记源码”提供了丰富的学习材料,帮助开发者深入理解并实践Eclipse插件开发...
Eclipse 插件开发是Java开发领域中的一个重要分支,它允许开发者通过扩展Eclipse平台来创建自定义功能,提升开发效率。本学习笔记涵盖了从第15章到第24章的内容,这部分主要包括了以下几个核心知识点: 1. **插件...
Eclipse 是一个广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据重要地位。对于初学者来说,掌握Eclipse的基本操作是学习Java编程的第一步。本指南将帮助“小白”快速入门,了解如何安装、配置以及使用...
OpenCV支持多种编程语言,如C++、Python、Java等,能运行在多种操作系统上,例如Windows、Linux、Android和Mac OS。 毛星云编著的《OpenCV3编程入门》是一本面向初学者的教程,旨在帮助读者快速入门OpenCV3,书中...
Eclipse是一款广泛使用的Java集成开发环境(IDE),它提供了丰富的快捷键以提高开发效率。这篇笔记主要汇总了Eclipse中的一些常用快捷键,这些快捷键可以帮助开发者更高效地编写、调试和管理代码。 1. **Ctrl+1**:...