IntelliJ IDEA技巧
1. IDEA搜索技巧
IDEA的搜索快捷键是:⇧⌘F,使用IDEA提供的搜索功能可以非常快速的定位漏洞点信息。

IDEA可以通过自定义搜索范围来精确查找我们需要审计的代码。默认搜索的是所有的位置,不过我们可以点击红色箭头指向的...按钮来细化我们的搜索范围。
1.1 自定义范围搜索

自定义搜索范围示例:

自定义搜索范围后就可以在搜索时使用自定义的配置进行范围搜索了,有助于我们在挖漏洞的时候缩小代码定位范围。

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

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

3. 显示类所有方法
如果某个类有非常多的方法,我们无法快速找到想看的方法时可以使用快捷键⌘F12

如果想显示父类方法可以把Inherited members勾上,反之去掉。
4. 显示类继承关系
某些类实现的非常复杂,继承和实现了非常多的类,比较影响我们分析业务,这个时候我们可以在某个类的空白处右键->Diagrams->Show Diagram或者使用快捷键⌥⇧⌘U

示例RequestFacade类的继承关系图:

点击左上角的小图标F、M❤、M、P、I分别会展示详细的:成员变量、构造方法、方法、属性、内部类。
如果想显示多个类的继承关系,可以将任意类文件拖拽到右图就会生成多类之间的继承关系,如Tomcat中的HttpServletRequest类和ApplicationHttpRequest类都实现了HttpServletRequest接口,那么拖拽到一起就可以看到它们俩之间的如下关联关系:

5. 自动反编译
IDEA的反编译效果非常的不错,大部分时间都可以直接使用IDEA的反编译功能来代替反编译工具。
5.1 自动反编译class文件
将任意的class文件丢到IDEA的源码目录就可以立即看到反编译之后的文件,这样就可以省去打开反编译工具的时间了,如图:

请注意,直接在IDEA中粘贴是会出错的,应该以文件的形式拷贝到对应目录。如果嫌打开目录IDEA中的文件所在目录过于麻烦,可以点击文件名或在已打开的文件中右键->Reveal in Finder

如果不想鼠标点击可以设置个自己喜欢的快捷键,这样就会非常方便了:

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

jar反编译示例:

6. Http请求测试
很多人为了测试API接口总喜欢使用Burp或者Postman之类的工具去发送Http请求,殊不知IDEA就内置了非常方便的Http请求工具。在项目的任意位置:右键->new->File->test.http,然后就会创建出一个叫test.http的文件。

Http环境变量配置文件不是必须的,如需配置,需点击右上角的Add Environment File,然后自行添加变量,如:
{
  "dev": {
    "url": "http://localhost:8080",
    "json": "application/json"
  }
}
7. 本地历史记录
在调试IDEA的时候如果不小心误删了文件或者改某个文件时都改一半了发现改错了,而且还没有git之类的版本提交记录。这个时候我们可以使用IDEA的本地文件历史编辑记录功能,选择任意文件或者目录右键->Local History->Show History:

查看本地修改文件记录:

也可直接选择时间点,点击Revert还原文件到指定时间修改的版本:

8. 文件比较
IDEA不仅可以很方便的比较版本控制中的修改文件,还自带了一个文件比较功能。
8.1 粘贴板文件比较
复制一个文件的内容到粘贴板,然后打开需要比较的文件后点击右键->Compare with Clipboard:

文件对比:

8.2 文件比较
如果嫌比较粘贴板比较麻烦,可以直接选中需要比较的文件右键->Compare With...,如下:

然后在本地文件中选择一个需要比较的文件即可:

8.3 VCS文件比较
版本控制的文件比较方式非常简单,配置好VCS(Version Vontrol System,版本控制系统)后本地修改的文件和远程的文件可以直接比较,如图:

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

SpringBoot热更新:
