java的反编译器

基础知识:

什么是反编译器

大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将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转换为代码了。

Java反编译器JD

JD分为JD-GUI、JD-Eclipse两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse则是以一个Eclipse插件的方式运行。ID-Intellij是ide的插件。
JD-gui历史比较悠久了,用了好长时间,但是总有一些class文件显示 INTERNAL ERROR,所以下文为大家介绍另外两种java反编译器。






Java反编译器luyten(卢伊藤)

一个github上项目,目前支持.exe、.jar和源代码下载,还是充分的考虑到windows用户了,jd显示INTERNAL ERROR的class文件笔者用这个可以打开,并且设置比jd丰富,

这就看个人喜好了。有一个小缺陷,右键窗口不能全部关闭,jd是可以的。提示:这是一个maven的项目,如果用源码安装的话需要安装maven。

https://github.com/deathmarine/Luyten

打开连接,点击download可以进入下载页

https://camo.githubusercontent.com/126cf77d0b465a8840bb46a101987d008db916a1/687474703a2f2f696d672e6374726c762e696e2f696d672f31342f30392f32372f353432373162613630653634642e706e67

Java反编译器jadx

也是github上的项目,目前支持.zip和.gz的下载,windows用户需要运行一个batch文件,这个项目主页上都有介绍。

这个不是maven项目了,不需要安装maven。apache2.0的许可证,你可以再发布或者加入这个git项目。

https://github.com/skylot/jadx

打开连接,点击download可以进入下载页

https://camo.githubusercontent.com/bd3c0ea851c23c4535e43590a86c940a0786faa6/687474703a2f2f736b796c6f742e6769746875622e696f2f6a6164782f6a6164782d6775692e706e67



  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java反编译器JD-GUI是一款用于将二进制执行代码转换为源代码的工具。它提供了可视化的界面,可以方便地查看和编辑Java相关的文件,如.class和.tld文件。JD-GUI有两种运行方式,一种是以单独的程序方式运行,另一种是以Eclipse插件方式运行。要使用JD-GUI,只需将class文件或jar包拖放到JD-GUI界面中即可反编译并显示源代码。你可以通过Save All Sources保存反编译后的源代码到指定的磁盘路径。需要注意的是,由于反编译过程可能会导致部分代码出入,所以在使用JD-GUI反编译后,可能需要自行进行一些修改。JD-GUI可以从官方网站https://github.com/java-decompiler/jd-gui/releases进行下载,也可以通过其他途径获取。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java反编译工具--jd-gui](https://blog.csdn.net/weixin_44285713/article/details/125147683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java反编译器jd-gui-0.3.3](https://download.csdn.net/download/kinggod09/4023393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [java反编译工具--JD-GUI](https://blog.csdn.net/qq_44275015/article/details/131559995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值