-
Notifications
You must be signed in to change notification settings - Fork 18
/
project-scan-file.yml
163 lines (142 loc) · 11.1 KB
/
project-scan-file.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# 被分析项目对应扫描相关的配置
# 使用方法
# 添加参数: --output ${output} 在 corax 分析参数 --extra-args 前
# 添加参数: --project-config project-scan-config.yml 在命令最后
# 本配置含有大量详细说明, 如需跳过, 可以跳转到第100行开始配置
#
# 配置产生的作用
# 本配置对扫描过滤的实际作用结果可以在分析完成后打开 ${output}/scan-classifier-info.json 查看,可以得知class的扫描分类和哪些源码被分析哪些源码被排除
# 此文件中的 ScanAction 有如下几种:
# Process:表示会被扫描
# Skip:表示不会被主动扫描
# Keep: 保持原状
#
# 其他
# 可以前往 https://regex101.com 测试正则,并选择 FLAVOR 为 java
# 注意 "\." 是匹配 "." , 而单个 "." 是匹配任何字符(行终止符除外)
# 分析对象被划分为 class (一般包含在于文件夹/jar/war/apk/dex/zip等) 和 普通文件(非class的任何文件,如源码文件、xml、txt、properties等)两类
process-regex: # 分析对象的过滤器配置
# 可配置的字段如下: (多个字段同时存在时,采用逻辑与匹配)
# class: # 仅用于配置 class 的分类,不影响源码文件
# classpath: # 用于配置过滤 class 的加载,被排除的 classpath 所对应包含的 class 不会被分析器加载,故也不可能会被分析到
# file: # 仅用于配置扫描或排除扫描各类资源文件,如源码和各种资源文件,但不影响class
# 匹配机制: 越靠后的规则优先级越高,比如下面的3个有序匹配配置,*/src/Abc.java 文件会被排除分析, */src/Efg.java 文件会被分析。
# - op: Add
# path: /src/Abc.java # 所有路径字符串中包含 ‘/src/Abc.java’ 的文件
# - op: Sub
# path: /src/ # 所有路径字符串中包含 ‘/src/’ 的文件
# - op: Add
# path: /src/Efg.java # 所有路径字符串中包含 ‘/src/Efg.java’ 的文件
class: # 仅用于配置 class 的分类,不影响源码文件
# 前置知识:
# 我们将所有的运行时类分为三种:application class(用户期望直接扫描的重点类),library class(依赖的三方库,增加分析精度), phantom class(class not found,可能没编译可能没有三方库)
# +-------------+---------------------------------------+-----------------------------------------------+---------------------------------------------------+
# | class分类 | 来源 | 解释 | 注意 |
# +=============+=======================================+===============================================+===================================================+
# | | --process参数指定的类 | | 如果因为参数或过滤配置不当, |
# | application +---------------------------------------+ 分析器重点分析的class,用户期望直接扫描的重点类 | 多包含了库代码则会导致分析目标过多而大量消耗机器内存和性能 |
# | | --auto-app-class参数中存在源码文件的类 | | 无法高效地扫描我们关心的代码 |
# +-------------+---------------------------------------+-----------------------------------------------+---------------------------------------------------+
# | | --class-path参数指定的类 | 一般为项目依赖的三方库, | 如果因为参数或过滤配置不当, |
# | library +---------------------------------------+ 当application class依赖到的这部分class才会被分析 | 导致用户期望重点分析的class被归类为library class |
# | | --auto-app-class参数中不存在源码文件的类 | 用于增加分析精度 | 很可能导致漏扫 |
# +-------------+---------------------------------------+-----------------------------------------------+---------------------------------------------------+
# | phantom | class not found | 可能因为项目没有完整编译,三方库不全, | 尽量保证较少的phantom class数量 |
# | | 被项目引用了但无法找到的class | 参数指定不全,二进制格式不支持等 | |
# +-------------+---------------------------------------+-----------------------------------------------+---------------------------------------------------+
# class 在 match 前就已经通过参数 --auto-app-class,--process,--auto-app-class 等参数分类过了
# 如果参数中还配置了 --project-config project-scan-config.yml 并且包含本分类配置,则还会根据match结果调整原有的分类
# +--------------+--------------+---------------+
# | before match | match result | after match |
# +--------------+--------------+---------------+
# | | Add | application |
# | +--------------+---------------+
# | application | Sub | *library* | 🟡应该避免期望分析的class被Sub,如Sub项目自身的class是需要斟酌的。
# | +--------------+---------------+
# | | NotMatch | application |
# +--------------+--------------+---------------+
# | | Add | *application* | 🟡应该避免不期望分析的class被Add,如Add三方库的class是不应该的,会导致分析目标过多而大量消耗资源。
# | +--------------+---------------+
# | library | Sub | library |
# | +--------------+---------------+
# | | NotMatch | library |
# +--------------+--------------+---------------+
# | | Add | phantom |
# | +--------------+---------------+
# | phantom | Sub | phantom |
# | +--------------+---------------+
# | | NotMatch | phantom |
# +--------------+--------------+---------------+
#
# 可配置的字段如下: (一个规则存在多个字段时,采用逻辑*与*匹配)
# - op: Add # Add 表示包含,Sub 表示排除
# class:name: %regex% # 用于匹配 class 的名字,如 com.example.Main,
# # 注意:class名 使用正斜杠\或反斜杠/进行匹配是被禁止的
# class:src: %regex% # 因为一个源码可以关联多个class, 所以筛选class时候可以用class对应源码路径作为正则匹配目标,但不会影响源码
# # 注意:不允许包含正斜杠\ , 表示文件夹路径时前后请加上/
#
# method:signature: %regex% # 用于匹配 soot 格式的类方法签名如 <com.example.Main: void main(java.lang.String[])>
# method:name: %regex% # 用于匹配方法的名字:如 "main"
#
# field:signature: %regex% # 用于匹配 soot 格式的类成员变量签名如 <com.example.util.Optional: java.lang.Object value>
# field:name: %regex% # 用于匹配 class field 的名字:如 "value"
- op: Sub # 如果 Sub all class,则可理解为本配置属于白名单模式, 反之如果Add all class,则可理解为本配置属于黑名单模式
# 既不想使用白名单也不想使用黑名单,则请不要使用.+匹配全部资源。
# 所有扫描过滤配置中均没有匹配到的资源,则保持原始的分析处理方式
class:name: .+ # 表示任意 class
# 🟢 请在这里加上您需要扫描的 class ↙ (可以直接通过 class name 进行匹配)
# - op: Add # 还需要去除本行和下一行的注释
# class:name: com.insecurebank # <- 请填写; (不允许填写 com\android\insecurebankv2 或者 com/android/insecurebankv2)
# 也可以通过 class 对应的源码路径来匹配 class
- op: Add
class:src: /src/main/ # <- 请填写; (不允许填写 src\\main ; 也不建议写 src/main , 可能会匹配到如 /js-src/main)
- op: Add
class:src: /.+_jsp.java$ # 匹配如 build/jsp-classes/org/**/View_jsp.java 对应的任意 class,注意是匹配 class
- op: Sub
class:name: \.R(\$.*)?$ # 如 com.android.R$id
classpath: # 用于配置过滤 class 的加载,被排除的 classpath 所对应包含的 class 不会被分析器加载,故也不可能会被分析到
# 一般用于屏蔽加载一些无效的jar包(比如class只有方法声明但是不包含方法体定义,分析器加载后无法分析这些空壳class会导致大量漏报(假如还同时存在正常的class,也会因同名class只加载一份的机制,仍会导致分析异常),在android中常见)
# 可配置的字段如下:
# - op: Add # Add 表示包含,Sub 表示排除
# path: %regex% # 匹配class所在的文件路径,如.class/jar/war/apk/dex/zip等路径
# # 压缩包内部资源以 !/ 分割,如 build/application.jar!/BOOT-INF/classes/
# # 注意:不允许包含正斜杠\ , 表示为文件夹路径时前后请加上/
- op: Sub
path: /classes-header.jar # bad android intermediates jar
- op: Sub
path: /classes-turbine.jar # bad android intermediates jar
file: # 仅用于配置扫描或排除扫描各类资源文件,如源码和各种资源文件,但不影响class
# 可配置的字段如下:
# - op: Add # Add 表示包含,Sub 表示排除
# path: %regex% # 注意:不允许包含正斜杠\ , 表示为文件夹路径时前后请加上/
# # 压缩包内部资源以 !/ 分割,如 build/application.jar!/META-INF/MANIFEST.MF
- op: Sub
path: /out/
- op: Sub
path: /output/
- op: Sub
path: /tmp/
- op: Sub
path: /temp/
- op: Sub
path: /log/ # 表示为文件夹路径时,路径正则尽量加上"/", , 否则所有名字包含log的文件也会被排除
- op: Sub
path: /logs/
- op: Sub
path: /build/
- op: Sub
path: /target/
- op: Sub
path: /\.git/
- op: Sub
path: /\.idea/
- op: Sub
path: /\.gradle/
- op: Sub
path: /\.mvn
- op: Sub
path: /\.run/
- op: Add
path: /.+_jsp.java$ # 匹配如 build/jsp-classes/org/**/View_jsp.java 源码文件,注意是仅匹配源码
- op: Sub
path: /R\.java$ # 如 com/android/R.java