|
24 | 24 |
|
25 | 25 | `SinkFinder` 内置了常见的`Java` 代码`Web`漏洞`sink` 点,高危组件调用`sink` 点,通过`Idea` 自身的`Problem` 模块进入,通过此模块你可以快速收集项目中的`Sink` 点: |
26 | 26 |
|
27 | | - |
| 27 | +<img src="./img/image-20250331010159751.png" alt="Sink收集界面" width="50%" /> |
28 | 28 |
|
29 | 29 | `Sink` 收集完毕后,双击即可跳转到代码所在位置: |
30 | 30 |
|
31 | | - |
| 31 | +<img src="./img/image-20250331010358550.png" alt="Sink跳转演示" width="50%" /> |
32 | 32 |
|
33 | 33 | #### 反编译 |
34 | 34 |
|
35 | 35 | 反编译模块和原来目前没有更改,在列表中选择要反编译的`jar` 包后,点击`Run` 即可反编译回源代码(目前没有做任何优化、失败率高)。 |
36 | 36 |
|
37 | | - |
| 37 | +<img src="./img/image-20250331010458737.png" alt="反编译界面" width="35%" /> |
38 | 38 |
|
39 | 39 | #### 代码分析 |
40 | 40 |
|
41 | 41 | 本次更新的最大内容是代码分析模块,通过此模块你可以快速查找一个方法的调用路径,下面逐步介绍功能: |
42 | 42 |
|
43 | | - |
| 43 | +<img src="./img/image-20250331010441318.png" alt="代码分析界面" width="50%" /> |
44 | 44 |
|
45 | 45 | 首先是功能区,`Generate CallGraph` 按钮用于生成项目的调用图,旁边的**下拉菜单**用来选取调用图的**构建范围**,如果你选择了`Entire` 则会对整个项目进行构建,如果你选择了`Selected Module` 那么在你点击`Generate CallGraph` 的时候就会弹出一个窗口用来选择构建范围。 |
46 | 46 |
|
47 | | - |
48 | | - |
49 | | -除了这种方式构建图之外,你还可以使用右键点击某一个方法的形式进行图构建: |
50 | | - |
51 | | - |
| 47 | +<img src="./img/image-20250331010933308.png" alt="模块选择" width="50%" /> |
| 48 | +<img src="./img/image-20250331123256112.png" alt="右键菜单" width="50%" /> |
52 | 49 |
|
53 | 50 | 在构建图之前,你应该看到了界面上的两个复选框,这两个框分别代表: |
54 | 51 |
|
|
58 | 55 |
|
59 | 56 | 一般情况下,如果你的代码量不是很大并且电脑内存充足,建议全都选上。 |
60 | 57 |
|
61 | | - |
| 58 | +<img src="./img/image-20250331123349918.png" alt="复选框说明" width="50%" /> |
62 | 59 |
|
63 | 60 | 隐藏窗口: |
64 | 61 |
|
|
72 | 69 |
|
73 | 70 | `@Override,@xxx` 用这个参数可以查找到所有拥有`Override`注解和`xxx`注解的方法。 |
74 | 71 |
|
75 | | - |
| 72 | +<img src="./img/image-20250331124009118.png" alt="隐藏窗口" width="50%" /> |
76 | 73 |
|
77 | 74 | 使用示例: |
78 | 75 |
|
79 | | - |
| 76 | +<img src="./img/image-20250331124429606.png" alt="搜索示例" width="50%" /> |
80 | 77 |
|
81 | 78 | 搜索路径: |
82 | 79 |
|
83 | 80 | 当你完成了图的构建之后(进度条可能会因为你的工具窗口太窄而无法显示,你可以选择将工具窗口拖出来作为一个独立的窗口使用),就可以使用搜索功能进行搜索: |
84 | 81 |
|
85 | 82 | 搜索有三种方式,第一种是如果你想要查找指定两个方法的调用路径,只需要将起始方法作为`ROOT`,将结束方法作为`SINK`然后点击`Search` 就可以快速搜索,搜索结果进行双击就能跳转到代码对应的位置(有可能不准确): |
86 | 83 |
|
87 | | - |
| 84 | +<img src="./img/image-20250331124823202.png" alt="路径搜索" width="50%" /> |
88 | 85 |
|
89 | 86 | 第二种方式是如果你不知道起点,只想找到某一个方法的调用链/位置的时候,单独输入`SINK` 也可以进行查找: |
90 | 87 |
|
91 | | - |
| 88 | +<img src="./img/image-20250331124952438.png" alt="单独Sink搜索" width="50%" /> |
92 | 89 |
|
93 | 90 | 第三种方法是,当你在程序中发现了一个有趣的方法,并想查找所有能够调用到该方法的路径时,可以通过右键菜单中的`Search as sink` 进行搜索,点击后会自动将你选中的方法名填写到`SINK`搜索框中并自动运行搜索: |
94 | 91 |
|
95 | | - |
| 92 | +<img src="./img/image-20250331125202792.png" alt="右键搜索" width="50%" /> |
96 | 93 |
|
97 | 94 | 所有的结果折叠可以用`回车` 展开或重新折叠,所有的节点都可以双击跳转到指定的位置。 |
98 | 95 |
|
99 | | - |
100 | | - |
101 | | -<img src="/home/springkill/.config/Typora/typora-user-images/image-20250401025726431.png" alt="image-20250401025726431" style="zoom: 33%;" />检测`log4j` 示例 |
| 96 | +<img src="./img/image-20250401025726431.png" alt="log4j检测示例" width="50%" /> |
102 | 97 |
|
103 | 98 | #### 展示界面 |
104 | 99 |
|
|
110 | 105 |
|
111 | 106 | `MethodNode`用来展示当前的调用图中有多少节点,以及下方会展示使用了多少内存,是否有提示信息或者报错信息等内容。 |
112 | 107 |
|
113 | | - |
| 108 | +<img src="./img/image-20250331125415889.png" alt="初始界面" width="50%" /> |
114 | 109 |
|
115 | 110 | `Search Results`界面用来展示搜索结果: |
116 | 111 |
|
117 | | -<img src="./img/image-20250331125928270.png" alt="image-20250331125928270" style="zoom:10%;" />图标用来表示搜索路径 |
118 | | - |
119 | | -<img src="./img/image-20250331130037060.png" alt="image-20250331130037060" style="zoom:10%;" />图标用爱表示方法声明,也就是方法被定义的位置 |
| 112 | +<img src="./img/image-20250331125928270.png" alt="搜索路径图标" width="5%" /> 图标用来表示搜索路径 </br> |
| 113 | +<img src="./img/image-20250331130037060.png" alt="方法声明图标" width="5%" /> 图标用来表示方法声明,也就是方法被定义的位置 </br> |
| 114 | +<img src="./img/image-20250331130128343.png" alt="方法调用图标" width="5%" /> 用来表示方法的调用 </br> |
| 115 | +<img src="./img/image-20250331130217321.png" alt="新建对象图标" width="5%" /> 用来展示对象的新建,当前版本也用来表示隐藏窗口中的方法的搜索结果</br> |
| 116 | +`文件图标` 当前版本用来表示一个接口中的方法或者抽象类中的方法被实现或重写 </br> |
120 | 117 |
|
121 | | -<img src="./img/image-20250331130128343.png" alt="image-20250331130128343" style="zoom:10%;" />用来表示方法的调用 |
122 | | - |
123 | | -<img src="./img/image-20250331130217321.png" alt="image-20250331130217321" style="zoom:10%;" />用来展示对象的新建,当前版本也用来表示隐藏窗口中的方法的搜索结果 |
124 | | - |
125 | | -`文件图标` 当前版本用来表示一个接口中的方法或者抽象类中的方法被实现或重写 |
126 | 118 |
|
127 | 119 | ## 注意&功能开发 |
128 | 120 |
|
|
175 | 167 |
|
176 | 168 | ## 授权 |
177 | 169 |
|
178 | | -关于当前版本的授权问题,可联系公众号:阿呆攻防进行获取,也可以添加我的个人微信(微信号:SpringKill_)进行交流,如果你认为这个项目对你有帮助,请点个小小的Star和Follow鼓励一下我吧~ |
179 | | - |
180 | | -<img src="./img/image-20250401204010387.png" alt="image-20250401204010387" style="zoom:50%;" /> |
| 170 | +关于当前版本的授权问题,可联系公众号:卫界安全-阿呆攻防进行获取,也可以添加我的个人微信(微信号:SpringKill_)进行交流,如果你认为这个项目对你有帮助,请点个小小的Star和Follow鼓励一下我吧~ |
181 | 171 |
|
182 | 172 | ## 结语 |
183 | 173 |
|
184 | 174 | 林地生长于漫宿墙外。每一个研习诸史的人都知道,漫宿无墙。 |
185 | | - |
0 commit comments