Repository navigation
NOIR v0.4.2 — security & safety release
Everyone running 0.4.1 or earlier should update.
This release fixes issues that could cause unexpected AppOps changes, unintended uninstalls, lost rollback records, and false-negative scans. If you use --apply, noir block, or noir deepscan --purge, update before your next run.
Critical fixes
--apply=false,--yes=false, and--purge=falseare now treated as false. Previously they were treated as enabled, which could change device state or skip confirmation when you explicitly asked not to.rollback.txtis now written only after a successful apply, includes the device serial, and is no longer erased by a later scan or dry run. This is the safety net for AppOps changes.noir blockno longer emits the obsoletePROJECT_MEDIAno-op or runs AppOps after uninstalling a package. It performs a per-user uninstall and writes a concreteblock-rollback.txt.noir deepscan --purgenow uses the current Android user, writespurge-rollback.txt, and states clearly that reinstalling restores the APK but not app data.- Failed AppOps commands and non-interactive
--applywithout--yesnow exit nonzero instead of silently claiming success. - User-supplied package names are validated, and adb/jadx commands have real timeouts.
- Tool downloads reject non-HTTPS redirects and zip-slip paths.
Scan accuracy
- Split APKs and
classes16.dex+ are scanned. - Failed pulls/parses are no longer cached as “no endpoints”; the cache is scoped to the device/build.
- DeepScan no longer reuses a stale APK or stale decompiled sources.
Runtime.getRuntime().execis detected again.- Upload detection now covers
/stats,/logs,/tracking,/analytics,/metrics, and/crash. - Coarse location and legacy storage permissions are included.
- Domain classification no longer treats
static,biometrics, orsoundtrackas trackers. - Manifest/AXML/Dumpsys parsing handles application permissions, provider read/write permissions,
enabled=false, defaultallowBackup, malformed AXML, legacyuserId=, and shared UIDs.
Reports and CLI
- Reports add stable
leaksByTypekeys; HTML/Markdown escaping and upload-host counting are fixed. noir diffrejects empty/malformed reports and records scan filters.- Global flags work before commands;
noir scan --helpno longer runs a scan. --ascii, 40/50-column layouts, CJK table alignment, and Chinese TUI labels are fixed.
Packaging
- Intel (
x86_64) and Apple Silicon (arm64) macOS builds are both published. - Tagged releases run the test suite before packaging.
- Portable archives include the MIT
LICENSEandSHA256SUMS.txt.
Upgrade notes
- Download the asset for your platform and replace the old portable directory.
- Keep
--apply/block/purgereview habits: this release makes destructive intent explicit, but it still changes device state only when you ask. - The endpoint cache moved to
endpoints-v3.tsv; the first scan after upgrading will rebuild it. - Verify
SHA256SUMS.txtbefore running any downloaded build.
Full changelog: https://github.com/Verlintas/NOIR/blob/main/CHANGELOG.md
Source: https://github.com/Verlintas/NOIR
If you are unsure whether to update: yes, update. The previous version could act on --flag=false and could lose the rollback record.