You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v0.7.1 delivers a major upgrade to IOCX’s **PE heuristics engine**, **extractor correctness**, and **adversarial‑input resilience**. This release introduces six new structural heuristics, broad extractor hardening, and a significantly expanded adversarial test suite — including **full adversarial coverage for every IOC category**.
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+78-37Lines changed: 78 additions & 37 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,20 +6,24 @@ IOCX is part of the MalX Labs ecosystem — a family of modern, deterministic, d
6
6
We welcome contributions of all kinds: bug fixes, static‑analysis improvements, new extractors, documentation updates, and thoughtful design discussions.
7
7
This guide explains how to contribute effectively while keeping IOCX predictable, secure, and maintainable.
8
8
9
+
---
10
+
9
11
## Project Philosophy
10
12
11
13
IOCX is intentionally:
12
14
13
-
- Minimal — extremely small dependency footprint
14
-
- Secure — safe handling of untrusted input
15
-
- Deterministic — no network access, no non-deterministic behaviour
16
-
- Extensible — new static‑analysis modules can be added cleanly
15
+
-**Minimal** — extremely small dependency footprint
16
+
-**Secure** — safe handling of untrusted input
17
+
-**Deterministic** — no network access, no non‑deterministic behaviour
18
+
-**Extensible** — new static‑analysis modules can be added cleanly
17
19
18
20
All contributions must align with these principles.
19
21
22
+
---
23
+
20
24
## Core vs Plugins
21
25
22
-
IOCX has a strict boundary between core functionality and plugin‑based extensions.
26
+
IOCX has a strict boundary between **core functionality** and **plugin‑based extensions**.
23
27
This keeps the core predictable and universally safe while allowing users to extend IOCX for their own environments.
24
28
25
29
### What Belongs in the Core
@@ -51,7 +55,7 @@ Plugins are for functionality that is:
51
55
- optional or environment‑specific
52
56
- based on external data
53
57
- organisation‑specific
54
-
- user-maintained
58
+
- user‑maintained
55
59
- likely to evolve independently
56
60
57
61
Examples:
@@ -65,6 +69,8 @@ If the information comes from the user’s environment, it belongs in a plugin.
65
69
66
70
This separation keeps IOCX clean, predictable, and safe to run anywhere.
67
71
72
+
---
73
+
68
74
## How to Contribute
69
75
70
76
### Fix bugs
@@ -80,12 +86,12 @@ Open an issue or submit a PR with:
80
86
Regex‑based extractors live under:
81
87
82
88
```
83
-
detectors/extractors/
89
+
iocx/detectors/extractors/
84
90
```
85
91
86
92
Please include:
87
93
88
-
- a clear, well-scoped regex
94
+
- a clear, well‑scoped regex
89
95
- validation logic
90
96
- test cases
91
97
- example inputs
@@ -102,7 +108,7 @@ Enhancements to metadata extraction, imports, sections, or resources are welcome
102
108
103
109
- static
104
110
- deterministic
105
-
- dependency-minimal
111
+
- dependency‑minimal
106
112
107
113
### Add synthetic test samples
108
114
@@ -113,67 +119,69 @@ See the “Testing” section below.
113
119
114
120
Better examples, diagrams, and explanations are always appreciated.
115
121
116
-
### Contribution Process
122
+
---
123
+
124
+
## Contribution Process
117
125
118
-
1. Fork the repository
126
+
1.**Fork the repository**
119
127
120
128
```bash
121
129
git clone https://github.com/iocx-dev/iocx.git
122
-
123
130
```
124
131
125
-
2. Create a feature branch
132
+
2.**Create a feature branch**
126
133
127
134
```bash
128
135
git checkout -b feature/my-improvement
129
-
130
136
```
131
137
132
-
3. Install locally
138
+
3.**Install locally**
133
139
134
140
```bash
135
141
pip install -e .
136
142
```
137
143
138
-
4. Run tests
144
+
4.**Run tests**
139
145
140
146
```bash
141
147
pytest
142
148
```
143
149
144
-
5. Run security checks
150
+
5.**Run security checks**
145
151
146
152
```bash
147
153
bandit -r iocx -lll
148
154
pip-audit --skip-editable
149
155
```
150
156
151
-
6. Open a Pull Request
157
+
6.**Open a Pull Request**
152
158
153
-
- Target the main branch
159
+
- Target the `main` branch
154
160
- Describe what you changed and why
155
161
- Link any related issues
156
162
157
163
CI will run automatically.
158
164
165
+
---
166
+
159
167
## Testing
160
168
161
169
IOCX is designed to be **safe to develop on any machine**.
162
170
163
171
### Do NOT:
164
172
165
-
-Upload or commit real malware
166
-
-Submit password‑protected malware archives
167
-
-Include malicious payloads or exploit code
168
-
-Add samples requiring execution to analyse
173
+
-upload or commit real malware
174
+
-submit password‑protected malware archives
175
+
-include malicious payloads or exploit code
176
+
-add samples requiring execution to analyse
169
177
170
178
### Do:
171
179
172
-
-Use synthetic PE files
173
-
-Embed fake IOCs inside harmless executables
174
-
-Use benign Windows binaries for structural testing
175
-
-Use public test files like EICAR or GTUBE
176
-
-Add text files containing mixed IOCs
180
+
-use synthetic PE files
181
+
-embed fake IOCs inside harmless executables
182
+
-use benign Windows binaries for structural testing
183
+
-use public test files like EICAR or GTUBE
184
+
-add text files containing mixed IOCs
177
185
178
186
If unsure, open an issue before submitting.
179
187
@@ -183,33 +191,38 @@ All new features should include tests.
183
191
Bug fixes should include a test that reproduces the issue.
184
192
185
193
Tests live in:
186
-
```plaintext
194
+
195
+
```
187
196
tests/
188
197
```
189
198
190
199
We use pytest.
191
200
201
+
---
202
+
192
203
## Adding New Extractors
193
204
194
205
Extractors live in:
195
206
196
-
```plaintext
207
+
```
197
208
iocx/detectors/extractors/
198
209
```
199
210
200
211
To add one:
201
212
202
-
-Create a new file in that directory
203
-
-Follow existing patterns
204
-
-Ensure it registers itself on import
205
-
-Add tests under `tests/unit/extractors/`
213
+
-create a new file in that directory
214
+
-follow existing patterns
215
+
-ensure it registers itself on import
216
+
-add tests under `tests/unit/extractors/`
206
217
207
218
Extractors must be:
208
219
209
220
- deterministic
210
221
- side‑effect‑free
211
222
- safe for untrusted input
212
223
224
+
---
225
+
213
226
## Code Style
214
227
215
228
We keep the codebase clean and consistent.
@@ -225,20 +238,48 @@ ruff check iocx
225
238
black iocx
226
239
```
227
240
241
+
---
242
+
228
243
## Security
229
244
230
245
If you discover a security issue, do not open a GitHub issue.
246
+
Follow the instructions in `SECURITY.md`.
231
247
232
-
Follow the instructions in SECURITY.md.
248
+
---
233
249
234
250
## Code of Conduct
235
251
236
252
Be respectful, constructive, and supportive.
237
253
We aim for a collaborative, professional environment.
238
254
239
-
## License
255
+
---
256
+
257
+
## Licensing of Contributions
258
+
259
+
By contributing to IOCX, you agree that:
260
+
261
+
- Your contributions are licensed under the **Mozilla Public License 2.0 (MPL‑2.0)**.
262
+
- You grant the project maintainers the right to **dual‑license your contributions** under commercial terms as part of the IOCX open‑core model.
263
+
- You retain copyright to your contributions.
264
+
265
+
This ensures:
266
+
267
+
- the open‑source core remains healthy
268
+
- improvements remain open
269
+
- commercial customers can use IOCX under proprietary terms
270
+
- your work is properly attributed
271
+
272
+
By submitting a contribution, you certify that you have the right to do so and that your contribution does not violate any third-party rights.
273
+
274
+
---
275
+
276
+
## Trademark Notice
277
+
278
+
Contributors may not use the IOCX name in a way that implies endorsement.
279
+
See [TRADEMARK_POLICY.md](TRADEMARK_POLICY.md) for details.
280
+
See [LICENSE](LICENSE) for full MPL-2.0 terms.
240
281
241
-
By contributing, you agree that your contributions are licensed under the project's MIT License.
0 commit comments