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
Copy file name to clipboardExpand all lines: README.md
+20-20Lines changed: 20 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ Fauxx is an open-source Android privacy tool that poisons data broker and ad-tec
13
13
14
14
> 💬 **Questions about how Fauxx works, or wishlist ideas?** Use [Discussions](https://github.com/digital-grease/fauxx/discussions). Bug reports and feature requests stay in [Issues](https://github.com/digital-grease/fauxx/issues).
15
15
16
-
> 💬 **Looking for AI Usage discolosure?** See [AIUSE.md](https://github.com/digital-grease/fauxx/blob/main/AIUSE.md)
16
+
> 💬 **Looking for the AI usage disclosure?** See [AIUSE.md](https://github.com/digital-grease/fauxx/blob/main/AIUSE.md)
17
17
18
18
> 📦 **Where to get it:** Fauxx ships via **F-Droid**, **GitHub Releases**, and sideload / Obtainium. **The Google Play build is no longer maintained or published.** Play is too restrictive for Fauxx's full feature set (it disallows the location-spoofing and ad-profile-pollution modules), and it is moving toward requiring the age-verification API, which a no-account privacy tool has no business integrating. The `play` build flavor stays in the source in case that ever changes (CI still debug-compiles and unit-tests it so it doesn't rot unnoticed), but it carries no quality gates and is no longer built, shipped, or allowed to block a release.
19
19
@@ -35,14 +35,14 @@ The baseline: equal probability across all content categories. This is your foun
35
35
36
36
### Layer 1: Self-Report (Optional)
37
37
38
-
You optionally tell Fauxx coarse demographics (age range, interests, profession, region). Fauxx then weights AWAY from these categories—generating noise in the things you don't care about, maximizing confusion.
38
+
You optionally tell Fauxx coarse demographics (age range, interests, profession, region). Fauxx then weights AWAY from these categories—generating believable decoy activity in the things you don't care about, so the interests it steers clear of are your real ones.
39
39
40
-
- Skip it? You keep Layer 0 uniform noise.
40
+
- Skip it? You keep Layer 0's uniform, unbiased decoys.
41
41
- Enable it? Your real profile becomes harder to infer.
42
42
43
43
### Layer 2: Ad-Profile Import (Opt-in, Advanced)
44
44
45
-
Fauxx imports the ad-interest profile the platforms have already built about you, from a data export you provide: Google Takeout ("My Ad Center") or Facebook's "Download Your Information" (JSON). It reads exactly what the ad networks think they know about you, then aggressively suppresses those confirmed categories so the synthetic activity floods everything else instead.
45
+
Fauxx imports the ad-interest profile the platforms have already built about you, from a data export you provide: Google Takeout ("My Ad Center") or Facebook's "Download Your Information" (JSON). It reads exactly what the ad networks think they know about you, then aggressively suppresses those confirmed categories so the decoy activity concentrates on believable off-profile interests instead.
46
46
47
47
- You provide an exported file. Fauxx never logs in, reads cookies, or touches the platforms.
48
48
- Reads the file only. Nothing is sent anywhere.
@@ -51,21 +51,21 @@ Fauxx imports the ad-interest profile the platforms have already built about you
51
51
52
52
### Layer 3: Synthetic Persona Rotation (Active When L1 or L2 Enabled)
53
53
54
-
To prevent pattern detection, Fauxx generates a coherent synthetic persona every 7 days (with random jitter). This persona—a fake age, profession, interests, region—becomes your "noise profile" for that week. It changes on a schedule, adding temporal coherence and making you harder to fingerprint.
54
+
To avoid a predictable change-point, Fauxx rotates to a fresh coherent persona on a jittered schedule: a 7-day base plus 1 to 3 days of random jitter, re-rolled every cycle, so rotations never land on a fixed weekly tick. This persona (a fake age, profession, interests, and region) becomes the decoy identity that shapes the next stretch of activity: a believable person who isn't you. And it doesn't all flip at once. The persona's channels (device, location, queries, rhythm, category weights) phase in over hours through staggered adoption, so a broker sees no single synchronized change-point to lock onto.
55
55
56
56
### How Weights Combine
57
57
58
58
All layers produce a weight map across content categories. These weights multiply together and normalize, so the final distribution sums to 1.0. Categories are clamped with a minimum weight of 0.001—absence is still a signal.
59
59
60
-
Example: If you report yourself as a 25-year-old software engineer, Layer 1 drops RETIREMENT and PARENTING to 0.15× (away-from) and boosts GAMING and TECHNOLOGY to 2.5× (toward other interests). When Layer 2 imports your ad profile and sees Google has tagged you with TECH, it further suppresses TECH (0.05×) and boosts categories Google has never associated with you (3.0×). These multiply together, then Layer 3 blends in the weekly persona's preferences. The result: a noise distribution that looks nothing like your real profile.
60
+
Example: If you report yourself as a 25-year-old software engineer, Layer 1 drops RETIREMENT and PARENTING to 0.15× (away-from) and boosts GAMING and TECHNOLOGY to 2.5× (toward other interests). When Layer 2 imports your ad profile and sees Google has tagged you with TECH, it further suppresses TECH (0.05×) and boosts categories Google has never associated with you (3.0×). These multiply together, then Layer 3 blends in the weekly persona's preferences. The result: a decoy profile that reads like a real person, just not you.
61
61
62
62
## Modules
63
63
64
64
Fauxx poisons through seven complementary channels:
65
65
66
66
### 1. Search Poisoning
67
67
68
-
Executes synthetic search queries across Google, Bing, DuckDuckGo, and Yahoo. Queries are generated using a Markov-chain model trained on a bundled corpus—they're natural-sounding and topically coherent, not random gibberish. Each query is followed by 1–3 result clicks with random dwell time (2–30 seconds).
68
+
Executes synthetic search queries across Google, Bing, DuckDuckGo, and Yahoo. Most queries are composed on-device by a per-install grammar model (with a Markov fallback) over a bundled corpus, so they read as natural, topically coherent searches rather than random gibberish. The grammar is styled per install, so no two devices emit the same query distribution for a broker to fingerprint. Each query is followed by 1–3 result clicks with random dwell time (2–30 seconds).
69
69
70
70
**Category-aware:** Query bank selection is weighted by your targeting engine output.
71
71
@@ -86,21 +86,21 @@ Powered by a database of 800+ world city centers. Location selection is weighted
86
86
87
87
### 4. Device Identity
88
88
89
-
Presents a **stable, coherent device identity** per synthetic persona rather than churning random User-Agents. Each persona gets one believable Android device — a consistent User-Agent plus matching client-hint and `navigator` values (hardware concurrency, device memory, screen) — derived deterministically from the persona, so the synthetic traffic reads as one real device instead of the User-Agent-hopping pattern anti-fraud systems trivially flag and discard. The browser version drifts slowly over time to mimic real auto-updates. Canvas fingerprint noise is injected via JavaScript, and the Android Advertising ID is periodically reset.
89
+
Presents a **stable, coherent device identity** per synthetic persona rather than churning random User-Agents. Each persona gets one believable Android device — a consistent User-Agent plus matching client-hint and `navigator` values (hardware concurrency, device memory, screen) — derived deterministically from the persona, so the synthetic traffic reads as one real device instead of the User-Agent-hopping pattern anti-fraud systems trivially flag and discard. The browser version drifts slowly over time to mimic real auto-updates. Canvas fingerprint noise is still injected via JavaScript to blunt pixel-level fingerprinting.
90
90
91
91
### 5. Cookie Saturation
92
92
93
93
Visits 2,400+ categorized URLs in isolated background WebViews, accumulating tracker cookies across diverse categories. Each URL load respects a per-domain rate limit (minimum 5 seconds between hits). WebViews are pooled and process-isolated to avoid contaminating your real browser cookies.
94
94
95
95
**Category-aware:** URL selection weighted by your targeting engine.
96
96
97
-
### 6. App Signal Noise
97
+
### 6. App Signals
98
98
99
-
Opens deep links and app store pages for off-profile applications, triggering attribution pixel fires that make ad networks think you're interested in categories you've never touched.
99
+
Opens deep links and app store pages for off-profile applications, triggering attribution pixel fires that lead ad networks to believe you're interested in categories you've never touched.
100
100
101
101
### 7. DNS Noise
102
102
103
-
Resolves diverse domain names, generating DNS query noise visible to ISP and network-level trackers. Adds another layer of confusion at the network level.
103
+
Resolves a diverse spread of domain names, so the DNS lookups visible to ISP and network-level trackers reflect the decoy activity instead of only your real destinations.
104
104
105
105
## Privacy Guarantees
106
106
@@ -175,7 +175,7 @@ On first launch, Fauxx offers an optional demographic self-report flow:
175
175
- Profession
176
176
- Region
177
177
178
-
Every screen has a visible "Skip" button. You can skip all of it and run on pure Layer 0 uniform noise.
178
+
Every screen has a visible "Skip" button. You can skip all of it and run on pure Layer 0 uniform, unbiased decoys.
- Current synthetic persona (name, age, interests)
187
-
- Category distribution donut chart showing how noise is spread
187
+
- Category distribution donut chart showing how the decoy activity is spread
188
188
189
189
### Targeting
190
190
@@ -202,7 +202,7 @@ Toggle each poison module independently:
202
202
- Location Spoofing (location spoofing mode)
203
203
- Device Identity
204
204
- Cookie Saturation (URL categories)
205
-
- App Signal Noise
205
+
- App Signals
206
206
- DNS Noise
207
207
208
208
### Log
@@ -212,7 +212,7 @@ Scrollable audit log of all actions with timestamps, types, and details. Export
212
212
### Settings
213
213
214
214
Global controls:
215
-
-**Wi-Fi intensity:** Low (light noise) / Medium (balanced) / High (aggressive) / Max (highest volume)
215
+
-**Wi-Fi intensity:** Low (light activity) / Medium (balanced) / High (aggressive) / Max (highest volume)
216
216
-**Mobile data intensity:** a separate Off / Low / Medium / High / Max ladder for mobile data — Off (the default) never touches mobile data; any tier runs the engine on mobile at its own rate
217
217
-**Battery threshold:** Minimum battery % to run actions
218
218
-**Active hours:** Time range when actions should run (e.g., 7am–11pm)
@@ -226,7 +226,7 @@ All configurable values are exposed in the app UI and backed by Room preferences
226
226
-**Action timing:** Poisson-distributed with human-like bursts (3–7 actions, then 5–20 min gaps)
227
227
-**Cross-niche dwell:** Lognormal dwell-time multiplier on category transitions (e.g., Finance → Legal) with a 30s floor — defeats heuristic bot detection that flags sub-second niche switches
228
228
-**Circadian pattern:** Near-zero activity 11pm–7am local time
229
-
-**Layer 3 rotation:**Every 7 days ± [1, 3] days jitter
229
+
-**Layer 3 rotation:**7-day base + 1–3 days random jitter (~8–10 days), re-rolled each cycle; channels phase in via staggered adoption
230
230
-**Layer 2 re-import reminder:** about 90 days (the import is manual, not scheduled)
231
231
232
232
## Project Structure
@@ -332,9 +332,9 @@ See `.devloop/spikes/multilingual-support.md` for the design and threat model.
332
332
333
333
It's a throughput indicator: `min(actions today / 500, 100%)`. 500 actions in a day reads as a "saturated" Noise Ratio of 100%.
334
334
335
-
What it *doesn't* measure: the *quality* of the noise — whether the synthetic activity is hitting categories that are actually different from your real interests, whether it's fooling profiling systems, or how diverse the topics are. It's just a rate gauge.
335
+
What it *doesn't* measure: the *quality* of the decoy activity — whether it's hitting categories that are actually different from your real interests, whether it's fooling profiling systems, or how diverse the topics are. It's just a rate gauge.
336
336
337
-
If you want to see where the noise is actually going, the **Targeting screen's category-weight chart** is more useful: red bars are categories Fauxx is suppressing (because they match your demographic profile), green bars are categories it's boosting (off-profile noise), gray is neutral.
337
+
If you want to see where the decoy activity is actually going, the **Targeting screen's category-weight chart** is more useful: red bars are categories Fauxx is suppressing (because they match your demographic profile), green bars are categories it's boosting (off-profile decoys), gray is neutral.
338
338
339
339
A future release will move Noise Ratio toward a quality-aware metric rather than pure throughput. Tracked as a planned improvement.
340
340
@@ -385,11 +385,11 @@ Fauxx operates within the terms of service of search engines and ad platforms, b
385
385
386
386
-**Adversaries:** Data brokers, ad networks, analytics platforms, ISPs.
387
387
-**Data in scope:** The weak, low-confidence signals these adversaries infer from search queries, URL visits, location history, device fingerprints, app-store interest signals, and DNS queries.
388
-
-**Goal:** Dilution at the edge of the identity graph. Fauxx adds plausible synthetic activity so that low-confidence behavioral inferences become noisier and less certain. It does not replace or overwrite a profile.
388
+
-**Goal:** Dilution at the edge of the identity graph. Fauxx adds plausible decoy activity so that low-confidence behavioral inferences become less certain and less trustworthy to the profiler. It does not replace or overwrite a profile.
389
389
390
390
### What Fauxx does not reach
391
391
392
-
Fauxx jams weak signals. It deliberately does not attempt to defeat the strong, deterministic mechanisms modern profiling anchors on, and it makes no claim to affect the following:
392
+
Fauxx targets weak signals with believable decoys. It deliberately does not attempt to defeat the strong, deterministic mechanisms modern profiling anchors on, and it makes no claim to affect the following:
393
393
394
394
-**Deterministic identity joins** from your real email address or phone number.
395
395
-**Google Privacy Sandbox Topics.** Fauxx runs in isolated WebViews that do not influence the Topics your real browser computes.
• New: Device Identity. Each persona now presents one stable, believable device, a consistent browser user-agent with matching device signals, instead of rotating at random. Coherent decoys are much harder for data brokers to filter out (#242).
2
+
• Fixed a crash when exporting a large log history to HTML or JSON (#239).
3
+
• LAN Sync now converges: a persona pushed to a paired phone is adopted as its active persona, so both devices match (#234).
• Novedad: Identidad de dispositivo. Cada persona presenta ahora un dispositivo estable y creíble, con un user-agent de navegador coherente y señales de dispositivo acordes, en lugar de rotar al azar. Los señuelos coherentes son mucho más difíciles de filtrar para los agregadores de datos (#242).
2
+
• Corregido un fallo al exportar un historial de registros extenso a HTML o JSON (#239).
3
+
• La sincronización LAN ahora converge: una persona enviada a un teléfono emparejado se adopta como su persona activa, de modo que ambos dispositivos coinciden (#234).
4
+
• Mantenimiento: actualizaciones de dependencias y de compilación.
• Nouveau : Identité d'appareil. Chaque persona présente désormais un appareil stable et crédible, avec un user-agent de navigateur cohérent et des signaux d'appareil concordants, au lieu d'une rotation aléatoire. Les leurres cohérents sont bien plus difficiles à filtrer pour les courtiers en données (#242).
2
+
• Correction d'un plantage lors de l'export d'un long historique de journaux en HTML ou JSON (#239).
3
+
• La synchro LAN converge désormais : une persona envoyée à un téléphone appairé est adoptée comme sa persona active, de sorte que les deux appareils correspondent (#234).
4
+
• Maintenance : mises à jour des dépendances et de la compilation.
• Новое: идентичность устройства. Каждая персона теперь представляет одно стабильное, правдоподобное устройство, с согласованным user-agent браузера и соответствующими сигналами устройства, вместо случайной ротации. Согласованные приманки гораздо труднее отфильтровать сборщикам данных (#242).
2
+
• Исправлен сбой при экспорте большого журнала в HTML или JSON (#239).
3
+
• Синхронизация по локальной сети теперь сходится: персона, отправленная на сопряжённый телефон, принимается как его активная персона, поэтому оба устройства совпадают (#234).
0 commit comments