透视java读书笔记(一)
-
反编译字节码所生成的源代码几乎与原始的源代码一致.
使用反编译器能够把没有经过特殊处理的class文件还原成几乎和源码一样的java文件.因为在class文件中几乎包括了一切可以用于调试的信息,行号,成员变量,参数类型和参数名称etc, 但是应该不包括javadoc和注释,正应为这样你才能用现代的IDE方便的调试你的程序.定位行,单步执行,审查值etc. 如果我们在编译源码的时候加上-g:none选项,反编译的代码就会损失一些清晰度.例如方法参数名称和局部变量的名称等等.
2. 在java字节码中,混淆是保护知识产权的最佳途径,混淆执行如下一些或全部变换:去除调试信息,
-
没有被声明为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
发表评论
- 浏览: 220463 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
我的相册
共 13 张
最近加入圈子
最新评论
-
使用Terracotta和Tomcat建 ...
renavatior 写道"运行start.bat 9081 这样我们就启动了目 ...
-- by rainsf -
使用Terracotta和Tomcat建 ...
"运行start.bat 9081 这样我们就启动了目录9081中的tomcat ...
-- by renavatior -
广州3年多经验 5500的 ...
fucku 写道广州的软件厂家可比深圳多多了,不过比起北京上海来,还是少了很多, ...
-- by yongfan_420 -
广州3年多经验 5500的 ...
广州的软件厂家可比深圳多多了,不过比起北京上海来,还是少了很多,导致机会也没有这 ...
-- by fucku -
广州3年多经验 5500的 ...
想高工资就去厂家咯,老在集成商里面混能有多大个奔头
-- by fucku






评论排行榜