【推荐阅读:配置自已的JAVA环境】
通常c.c++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码.通常所有的源文件被编译.链接成一个可执行文件.在这些可执行文件中,编译器删除了程序中的变量名称.方法名称等信息,这些信息往往是由内存地址表示,例如如果需要使用一个变量,往往是通过这个变量的地址来访问的.因此,反编译这些本地的目标代码就是非常困难的. 【扩展信息:JSP的login程序代码】 java语言的出现,使得反编译变得非常容易而有效.原因如下:1.由于跨平台的需求,java的指令集比较简单而通用,较容易得出程序的语义信息;2.java编译器将每一个类编译成一个单独的文件,这也简化了反编译的工作;3.java 的class文件中,仍然保留所有的方法名称.变量名称,并且通过这些名称来访问变量与方法,这些符号往往带有许多语义信息.由于java程序自身的特点,对于不经过处理的java程序反编译的效果非常好. 目前,市场上有许多java的反编译工具,有免费的,也有商业使用的,还有的是开放源代码的.这些工具的反编译速度与效果都非常不错.好的反编译软件,能够反编译出非常接近源代码的程序.因此,通过反编译器,黑客能够对这些程序进行更改,或者复用其中的程序.因此,如何保护java程序不被反编译,是非常重要的一个问题. 常用的保护技术 由于java字节码的抽象级别较高,因此它们较容易被反编译.本节介绍了几种常用的方法,用于保护java字节码不被反编译.通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境与弱点. 隔离java程序 最简单的方法就是让用户不能够访问到java class程序,这种方法是最根本的方法,具体实现有多种方式.例如,开发人员可以将关键的java class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问class文件.这样黑客就没有办法反编译class文件.目前,通过接口提供服务的标准与协议也越来越多,例如 http.web service.rpc等.但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离java程序.这种保护方式见图1所示. 图1隔离java程序示意图 对class文件进行加密 为了防止class文件被直接反编译,许多开发人员将一些关键的class文件进行加密,例如对注册码.序列号管理相关的类等.在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到jvm当中.... 下一页