Java反编译器JD

JD分为JD-GUI、JD-Eclipse两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse则是以一个Eclipse插件的方式运行。
下载地址:多特上的就不错。

基础知识:

什么是反编译器

大家都知道,将 源代码转换成二进制执行代码的过程叫“编译”,比如将C源代码编译成exe 可执行文件;那么把二进制执行代码的过程就叫“反编译”,比如把exe转换为C源代码就叫“反编译”。
由于主流的C的编译器都进行了代码的优化,因此把C编译生成的exe文件反编译成C代码非常困难。但是像Java、.net这样基于 虚拟机技术的编程语言则反编译非常容易,Java平台下有Jad、Jode、JD等反 编译器,.net平台下则有Reflector等反编译器,反编译质量非常高,甚至和 源代码几乎没什么差别。

反编译得到的是源代码吗?

反编译得到的代码是非常接近于 源代码,但是或多或少与源代码有一些差异的,比如一些表达式被优化掉了,比如:
下面的 源代码
int i=1+1;
学过《编译原理》的同学知道有“常量优化”这个编译优化算法,因此上边的 源代码一般会被优化为:int i=2;
由于在编译过程中已经进行了优化,把“1+1”这个原始的信息丢掉了,因此反编译出来的代码只能是:
int i=2;
可以看到反编译得到的代码和 源代码是有区别的。
比如:andriod中
download = (Button)findViewById(R.id.xiaz);
被优化成了download = (Button)findViewById(0x7f070018);

程序可以反编译岂不是很不安全?

可以采用 代码混淆等技术来加大反编译的难度和降低反编译代码的可读性,但是完全避免反编译是不可能的。

反编译器的原理是什么?

由于Java、.net这样的基于 虚拟机技术的语言都是采用了ByteCode的二进制结构,因此很容易将ByteCode转化为“ 抽象语法树”(简称AST,《编译原理》这门课中的概念),然后采用反编译器就可以将AST转换为代码了。
本词条资料来源于soso网友此处参考资料无法引用对于作者表示抱歉!!!
还有最重要的,那就是jd-gui只能查看,不能够将那些文件转换成.java文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值