IDEA代码审计神器!IDEA插件实现Java项目全自动代码审计
CodeAuditAssistant
请勿利用文章内的相关技术从事非法渗透测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具和内容均来自网络,仅做学习和记录使用,安全性自测,如有侵权请联系删除。
项目地址在文章底部哦
功能介绍
代码检查
CodeAuditAssistant 是一个代码审计辅助插件,其包含三部分功能:Decompiler、Code Analysis和SinkFinder,三个部分共同配合来实现强大的代码审计辅助。
SinkFinder
SinkFinder 内置了常见的Java 代码Web漏洞sink 点,高危组件调用sink 点,通过Idea 自身的Problem 模块进入,通过此模块你可以快速收集项目中的Sink 点:

Sink 收集完毕后,双击即可跳转到代码所在位置:

反编译
反编译模块和原来目前没有更改,在列表中选择要反编译的jar 包后,点击Run 即可反编译回源代码(目前没有做任何优化、失败率高)。

代码分析
本次更新的最大内容是代码分析模块,通过此模块你可以快速查找一个方法的调用路径,下面逐步介绍功能:

首先是功能区,Generate CallGraph 按钮用于生成项目的调用图,旁边的下拉菜单用来选取调用图的构建范围,如果你选择了Entire 则会对整个项目进行构建,如果你选择了Selected Module 那么在你点击Generate CallGraph 的时候就会弹出一个窗口用来选择构建范围。


在构建图之前,你应该看到了界面上的两个复选框,这两个框分别代表:
Info:收集全部方法相关信息(用于按条件查找特定的方法)
Path:构建图时包含方法的调用路径(用于构建方法的调用关系)
一般情况下,如果你的代码量不是很大并且电脑内存充足,建议全都选上。

隐藏窗口:
点击此按钮可唤出一个隐藏窗口,如果在上一步构件图的时候你勾选了Info 就可以在这里快速按照条件查找想要的方法:
其中的ParamType 输入框需要使用全限定类名,用英文逗号分隔,并支持使用* 作为通配符,示例如下:
java.lang.String,* 用这个参数可以查找到所有第一个参数是String 类型,第二个参数是任意类型的方法。
其中Annotations 字段同样是用英文逗号分隔,但是不用写全限定类名,示例如下:
@Override,@xxx 用这个参数可以查找到所有拥有Override注解和xxx注解的方法。

使用示例:

搜索路径:
当你完成了图的构建之后(进度条可能会因为你的工具窗口太窄而无法显示,你可以选择将工具窗口拖出来作为一个独立的窗口使用),就可以使用搜索功能进行搜索:
搜索有三种方式,第一种是如果你想要查找指定两个方法的调用路径,只需要将起始方法作为ROOT,将结束方法作为SINK然后点击Search 就可以快速搜索,搜索结果进行双击就能跳转到代码对应的位置(有可能不准确):

第二种方式是如果你不知道起点,只想找到某一个方法的调用链/位置的时候,单独输入SINK 也可以进行查找:

第三种方法是,当你在程序中发现了一个有趣的方法,并想查找所有能够调用到该方法的路径时,可以通过右键菜单中的Search as sink 进行搜索,点击后会自动将你选中的方法名填写到SINK搜索框中并自动运行搜索:

所有的结果折叠可以用回车 展开或重新折叠,所有的节点都可以双击跳转到指定的位置。
log4j检测示例:

展示界面
当你没有进行任何操作的时候,会看到如下界面:
其中Root Methods中用来展示所有的没有被其他人调用的方法。
Info 中用来展示一些提示信息,它会识别你的系统平台(方便提交ISSUE的时候进行识别),在没有构建图的时候CallGraph 的状态是Not Ready,只有当你成功构建图之后状态才会变成Ready。
MethodNode用来展示当前的调用图中有多少节点,以及下方会展示使用了多少内存,是否有提示信息或者报错信息等内容。

📖 项目地址
https://github.com/SpringKill-team/CodeAuditAssistant
💻 威胁情报推送群
如果师傅们想要第一时间获取到最新的威胁情报,可以添加下面我创建的钉钉漏洞威胁情报群,便于师傅们可以及时获取最新的IOC。
如果师傅们想要获取网络安全相关知识内容,可以添加下面我创建的网络安全全栈知识库,便于师傅们的学习和使用:
覆盖渗透、安服、运营、代码审计、内网、移动、应急、工控、AI/LLM、数据、业务、情报、黑灰产、SOC、溯源、钓鱼、区块链等 方向,内容还在持续整理中……。






夜雨聆风
