java反编译工具jd-gui使用

《JD-GUI》是一款反编译软件,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转换为代码了。

 

java的反编译工具,简单使用:

JD-GUI下载地址:https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/JD-GUI.shtml#download

  1. 打开文件。单击“file”从中选择“Open File ...“选项,弹出一个文件选择框,可以选择要打开的文件,或者直接单击文件夹图标,直接弹出文件选择框;从文件选择框中选择要打开的.class类型的文件,单击‘确定’。在打开的文件里,左侧可以看到文件的保存位置,类及方法,右侧显示类的具体内容,注释不会显示;
  2. 还有一种方法是直接打开jar包,鼠标单击文件夹图标,弹出文件选择框,选择一个jar包,单击“确定”
  3. 高级搜索。快捷键 Ctrl+Shift+S ,在菜单栏也有快捷方式,如下图
  4. java反编译工具jd-gui使用_第1张图片
  5. 搜索方法。类似电脑的快捷键Ctrl+F,此时不会打开小窗,在界面的下方会显示一个输入框,输入想要查找的方法名,即可;
  6. 搜索类。菜单栏快捷方式,在弹框内输入想要查找的类名。

     java反编译工具jd-gui使用_第2张图片

 

你可能感兴趣的:(工具,java技术)