一、反编译
1. Fernflower
Fernflower 可以很轻松的实现 jar 的完整反编译,执行如下命令即可: java -jar fernflower.jar jarToDecompile.jar decomp/ 其中 jarToDecompile.jar 是需要反编译的 jar 文件, decomp 是反编译后的 class文件 所存放的目录。需要注意的是 Fernflower 如遇无法反编译的情况可能会生成空的 java 文件!
2. JD-GUI
JD-GUI 是一个带 GUI 的反编译工具,在 JD-GUI 的菜单中点击 File –> Save All Sources 即可反编译 jar。
3. IDEA
IDEA 默认就支持 jar 包反编译,同时还支持 class 文件名 ( ⇧⌘F )、类方法名称 ( ⇧⌘O ) 搜索。
4. Bytecode-Viewer
FernFlower 提供了 GUI 版本 Bytecode-Viewer, Bytecode-Viewer 提供了直接反编译的 class 、 jar 、 zip 、 apk 、 dex 功能,直接拖拽 jar 就可以直接对整个 jar 进行反编译了。
5.CodeReviewTools
通过正则搜索、批量反编译特定Jar包中的class名称
二、反编译项目结构
1、反编译后的文件格式
-com
-公司名
-项目名
-controller
-dao
-...
-META-INF
xxxx.properties
......等等文件
2、放到idea对应文件
-
idea创建maven项目
-src
-main
-java
将第1步的com整个文件复制到当前目录
-resources
将第1步的除com的其他文件夹以及文件都放到这个静态目录下
-lib
将反编译之前的jar包中整个lib包里面的所有lib包放到这个目录下
3、lib包中附带需要反编译的jar包情况
-
先查找当前项目中lib包下需要反编译的jar包,批量选中
-
通过上面的图形化界面:https://github.com/MountCloud/JavaDecompileTool-GUI工具,将选中的lib包拖到工具里。
-
然后再当前文件夹下会产生每个jar包反编译后的zip包,通过类型排序,删除原本的jar文件,然后选中所有zip文件解压缩到当前文件夹下,一个zip一个文件夹。
-
然后回到idea中,会发现lib包下的文件夹,通过文件—项目结构—模块,再这里将lib包下的文件夹选中然后标记为源。就可以既搜索内容,同样可以实现跳转。
三、IDEA使用技巧
1. 自定义范围搜索
-
IDEA 的搜索快捷键是 : ⇧⌘F , 使用 IDEA 提供的搜索功能可以非常快速的定位漏洞点信息。

2. 标记搜索
-
搜索快捷键: ⌘O ,标记搜索支持 类名 、 方法名 搜索( 包括class或jar文件 中的方法也支持搜索)。

3. Java 调用链搜索
-
当我们审计代码的时候发现某个方法或类有漏洞时我们需要定位到漏洞的请求地址 (触发点),复杂业务系统往往会让我们很难定位到漏洞的触发点。借助 IDEA 的方法调用链搜索功能就可以很轻松的找出方法的调用链和触发点。
-
选择 类或者方法名 –> 右键 –> Find Useages 或者使用快捷键 ⌥F7

4.显示类继承关系
-
某些类实现的非常复杂,继承和实现了非常多的类,比较影响我们分析业务,这个时候我们可以在 某个类的空白处右键->Diagrams->Show Diagram或者使用快捷键 ⌥⇧⌘U
-
点击 左上角的小图标F、M❤、M、P、I分别会展示详细的:成员变量、构造方法、方法、属性、内部类

-
如果想显示多个类的继承关系,可以将任意类文件拖拽到右图就会生成多类之间的继承关系,如Tomcat中的HttpServletRequest类和ApplicationHttpRequest类都实现了HttpServletRequest接口,那么拖拽到一起就可以看到它们俩之间的如下关联关系:

5. jar文件反编译
-
IDEA反编译jar文件也是非常的方便,只需把jar包丢到任意目录,然后右键->Add as library就可以了。

6.类/资源文件热更新
-
IDEA中默认不会将修改的文件和资源自动同步到 Web Server或者 SpringBoot,需要我们手动设置当类文件或资源文件发生修改后同步更新。
-
Web容器热更新:

-
SpringBoot热更新:

7.ctrl+F12 查看文件结构

8.ctrl+H 层次结构
查看类的继承关系之类的。

9.shift+shift
查找任何内容,可搜索类、资源、配置项、方法等,还能搜索路径

10.Alt + F7或者右击方法—查看用法
查找类或方法在哪被使用
