A Multimodal agentic system that proactively stops financial fraud by analyzing web pages for scam signals and live audio for deepfakes.
- fraudshield/ (Chrome Extension: SherLock)
- Real-time page analysis + risk flags
- Warning overlays and “input protection” (blur/lock sensitive fields on risky pages)
- Optional mobile relay alert support (pair-code + polling model)
- frauddetector/ (Python “engine”)
- Socket.IO server that accepts call transcripts + metadata and returns a strict JSON “CONTINUE / HANG UP” decision
- Uses a local LLM (
Qwen/Qwen2.5-3B-Instruct) via Hugging Face Transformers
- fraudvoice/ (Swift / Xcode)
- iOS/macOS-side voice components (project scaffolding and Whisper-related code)
GenAIFraud/
fraudshield/ Chrome extension (SherLock)
manifest.json
background/
content/
popup/
server-mock/ Reference relay server
icons/
frauddetector/ Python model server + test client
engine.py
client.py
requirements.txt
fraudvoice/ Swift/Xcode voice components
package.json Root Node dependencies (project-wide utilities)
- Open Chrome and go to:
chrome://extensions
- Enable Developer mode
- Click Load unpacked
- Select the
fraudshield/folder
Notes:
- The extension runs on pages matching
<all_urls>. - The popup UI lives in
fraudshield/popup/. - The content script (page overlays, input scanning/locking) is
fraudshield/content/content.js. - The background orchestrator is
fraudshield/background/service-worker.js.
There is a reference relay server in:
fraudshield/server-mock/relay-server.js
Typical flow:
- A mobile app posts “alert active/inactive” to the relay server keyed by a pair code.
- The extension polls the relay server periodically and shows a banner/alert when active.
If you use the server mock, follow the instructions inside fraudshield/README.md and/or the server file itself.
The frauddetector/engine.py file runs a Socket.IO server that listens for analyze_call events and returns a strict JSON decision.
From the repo root:
python -m venv .venv
# Windows PowerShell:
.venv\Scripts\Activate.ps1pip install -r frauddetector/requirements.txtpython frauddetector/engine.pyBy default it listens on port 3000.
In another terminal:
python frauddetector/client.pyThis sends a few example transcripts to the engine and prints the JSON responses.
SherLock is designed to be “explainable-by-default”:
- It detects suspicious patterns and presents them as user-readable flags.
- When risk is elevated, it can shift from passive warnings to active protection by disabling/locking sensitive inputs (passwords, payment fields, etc.) until the user confirms they understand the risk.
The Python engine focuses on transcript-based fraud risk classification:
- Input: transcript text + simple metadata
- Output: strict JSON containing risk score, a command (
HANG UPorCONTINUE), reasoning, and suspicious phrases
- This repo contains components that may transmit or process sensitive data depending on configuration.
- Treat any API keys, pair codes, and transcripts as sensitive.
- Do not hardcode API keys into source files; prefer environment variables or local-only config.
- The Chrome extension is MV3 (Manifest V3).
- If you change
manifest.json, reload the extension inchrome://extensions. - If you edit content scripts, refresh the target web page to see updates.
ISC (see package.json).