反编译 VS “反反编译”???还会有“反反反编译”吗?

原创 2006年06月13日 07:56:00

Java是半编译半解释型语言,也就是源码首先要编译成字节码,再由虚拟机来解释执行,这也是java之所以能“平台无关”的原因。Java要实现这一点,就使得从字节码再反编译回源码不是什么难事(字节码“可读性”强)。Java也似乎没在源代码加密上下太多工夫,这也似乎不是Java的重点。

    从得到的class文件,程序员可以轻松的利用反编译器得到源码,现在最流行的应该就是JAD以及以JAD为引擎的几个GUI程序。

 

Jad - the fast JAva Decompiler

http://www.kpdus.com/jad.html

引擎。本身是个命令行程序,很多GUI程序是用它做引擎。

 

Cavaj Java Decompiler

Cavaj Java Decompiler is a graphical freeware utility that reconstructs java source code from CLASS files. You can decompile java applets, jar and zip files producing accurate java source code. Browse the reconstructed source code with the Class View for instant access to methods and fields.

Cavaj Java Decompiler is Windows 95/98/ME/NT/2000/XP compatible. Cavaj Java Decompiler is a standalone Windows application, it doesn't require you to have Java installed.

 

Cavaj Java decompiler uses Jad as its Java decompiling engine. If you have questions about Jad please visit the Jad site.

http://www.sureshotsoftware.com/cavaj/index.html

 

JODE

 

JODE is a java package containing a decompiler and an optimizer for java.

The decompiler reads in class files and produces something similar to the original java file. Of course this can't be perfect: There is no way to produce the comments or the names of local variables (except when compiled with debuging) and there are often more ways to write the same thing.

The optimizer transforms class files in various ways with can be controlled by a script file. It supports the following operations:

  • Renaming class, method, field and local names to shorter, obfuscated, or unique names or according to a given translation table
  • Removing debugging information
  • Removing dead code (classes, fields, methods) and constant fields
  • Optimizing local variable allocation

   http://jode.sourceforge.net/index.html

 

DJ JAVA DECOMPILER

http://members.fortunecity.com/neshkov/dj.html

这个东西收费,但功能较多,还可以当Java-IDE来用。免费版的只能用n次(好像是10次),不爽。

 

 

    既然能反编译,当然就能反反编译。但是并不像想象的那样可以完全让反编译的人得不到源代码,这是不可能的。所谓反反编译只是把源码中有意义的符号变得无意义,所以反反编译工具实际叫“混淆器”Obfuscator)。如:有一属性private long accessNumber; 猜也猜出大概就是指访问次数的变量,但经过混淆后也许会变成private long t001;这样的话,其他人就很难猜出它是什么意思了。如果你得到的是全篇都是这样无意义符号的源码,你是不是就立刻崩溃了?可读性很差。当然,如果你本来写代码就毫不注重编码规则的话,也就根本不需要混淆器了(笑)。另外,这样做的话,还会起到节省档案空间的作用,毕竟起一个长的容易懂的代号和短的无意义的代号,对JVM来说都一样,易读性只是对人类而言的。混淆器除了会对属性、方法、变量等符号作无意义化处理,有的还会加入根本不会执行的代码来“混淆视听”。

    常用的有Proguard,开源软件,当然免费。http://proguard.sourceforge.net/

 

    那么还会不会有反混淆器的东西呢(反反反编译器??)。如果要反混淆,那么就要从杂乱无意义的符号中读出原程序员的本意,即机器来理解人的思维,这需要较高的AI,短期内恐难实现。所以,用反混淆器作出的class就基本可以说是不可能被反编译回原本的源码了。

    但不可能被反编译 不等于 不可能被读懂。

    再烂的代码只要人想读,还是有读懂的可能性的。我们只是用混淆器,给试图盗用者制造一堆麻烦而以。拿到一大堆烂代码比重写还要困难吧?

 

 
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

.net反反编译-例子

Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译。

1、打开VS,博主所用版本是Visual Studio 2013。2、新建一个VC项目,选择类库,取名为JefferyChan,具体步骤如下图:3、因为要调用Unity中的相关文件,所以这里要引入外部...

VS的Tools工具(混淆/反编译/远程调试/Spy++等)

参考:http://baike.baidu.com/link?url=oCDe5ey3hAL-NJiMhn1lcqZao4KCmYsqJLCEuejBXEJvYWbLphYMeuh4n704Ms30t...

VS 使用自带的.NET Reflector单步调试编译好的程序集(反编译),以及相关其他反编译程序介绍

对于没有任何源代码和PDB文件的预编译程序集而言,如果没有合适的工具,调试起来并不容易。使用Red Gate的.NET Reflector可以在Visual Studio中即时反编译程序集,然后像...

反调试技术- IsDebuggerPresent,原理 与 反反调试

IsDebuggerPresent 这个函数可以用在程序中,检测当前程序是否正在被调试,从而执行退出等行为,达到反调试的作用。 1、IsDebuggerPresent 这个函数从汇编的角度看...

反调试与反反调试

1-DebugPort 2-KdDisableDebugger 3-IsDebuggerPresent和CheckRemoteDebuggerPresent 4-hook http://w...

反反爬虫之见招拆招

$.ajax()方法详解jquery中的ajax方法参数总是记不住,这里记录一下。1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。2.type: 要求为Stri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)