dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Check a sender address or a full email for phishing signals, with each finding explained. PhishGuard’s scores are heuristic evidence, not a guarantee of safety.
SecurityPython · JavaScriptGitHub @Lushangtu123OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
CS 166 Final Project — Phishing & Scam Email Detection
Course: CS 166 – Information Security
GitHub: https://github.com/Lushangtu123/Phishing-Scam-Email-Detection
PhishGuard is a FastAPI web application for explainable phishing-email
screening. It supports three distinct workflows:
• sender/domain risk analysis from an email address;
• message analysis from subject/body text or a complete RFC 5322 .eml file;
• public-safe DNS/MX/SPF/DMARC/PTR/WHOIS domain checks, with optional local
SMTP mailbox probing kept separate from domain evidence.Read the full README ↗CS 166 (Information Security) final project, continued as a personal project. Live demo: https://phishguard-email-analyzer.vercel.app · Changes: CHANGELOG.md
PhishGuard is a FastAPI web application that screens an email for phishing and explains
every finding. It reads a sender address, a pasted subject and body, an original .eml
file, or a screenshot (its text and QR codes are read in the browser), and returns a
verdict together with the rule, link, sender and structure evidence behind it. A test
mode also checks a pasted text message (SMS or iMessage). Scores are explainable
heuristics, not calibrated probabilities.
SMS_ANALYSIS_ENABLED): what kind of number or name sent
the text, the organisation it claims to be, its links, and English and Chinese scam
wording (parcel, fine, refund, account, loan, gambling and "new number" lures). Rules
only: the text model was trained on email.Details: detection design and API.
flowchart LR
A["Sender address, text,<br/>.eml or screenshot"] --> B["MIME and headers<br/>email_structure.py"]
B --> C["Text each rendering shows<br/>html_visibility.py"]
C --> D["Rules: requests, lures, links,<br/>sender, structure"]
C --> E["Text model<br/>TF-IDF + logistic regression"]
D --> F["Conservative fusion<br/>fuse_content_risk"]
E --> F
F --> G["Verdict, score and<br/>the findings behind it"]
.eml, whose
sender, authentication and structure showed nothing ("Low Risk — Text Model Signal
Only"). With weak rule evidence beside it, it raises the message to High for review.Measured with the full serving pipeline on 2026-10-04 and 10-05, before this branch's 2026-10-05 changes (evaluation log):
| Cohort | Alerts |
|---|---|
| The owner's 92 genuine emails, pasted as text | 35 (38%) |
The same, as .eml, mailbox not chosen | 24 (26%) |
The same, as .eml downloaded from Gmail or Outlook.com and chosen | 3 (3%) |
| UniqueData legitimate (58) | 39 (67%) |
| PhishFuzzer recent legitimate seeds (102) | 63 (62%) |
| Nazario phishing, 2015–25 (3,466) | 3,445 (99.4%) |
| PhishFuzzer recent phishing seeds (103) | 88 (85%) |
.eml uploads: making it a note on pasted text
too would have cut Nazario alerts on local public corpora from 96.5% to 71.2% and
PhishNChips from 99.3% to 43.5%. The .eml note is not yet measured on the cohorts
above; see the evaluation log for its estimate.python3.12 -m venv .venv
.venv/bin/python -m pip install -r requirements-dev.txt
APP_ENV=development CONTENT_MODEL_ENABLED=false .venv/bin/uvicorn app:app --app-dir website --host 127.0.0.1 --port 8000
Then open http://127.0.0.1:8000. This starts the rules-only analyzer. To load the
committed text model, also set CONTENT_MODEL_ENABLED=true, and copy
CONTENT_MODEL_ARTIFACT and CONTENT_MODEL_ARTIFACT_SHA256 from vercel.json. Use Python
3.12, which the artifact requires; see deployment for every setting.
.venv/bin/python -m unittest discover -s website/tests
node --test website/static/*.test.mjs
CI also lints with ruff, smoke-tests the Vercel profile and compares screenshots; see
testing.
Phishing-Scam-Email-Detection/
├── app.py # Vercel entry point; imports website/app.py
├── vercel.json, render.yaml # deployment profiles
├── pyproject.toml # Vercel settings and the serving pins it installs
├── requirements*.txt # pinned runtime and development dependencies
├── website/
│ ├── app.py # API, analysis steps and fusion
│ ├── content_rules.py # keyword categories, requests, lures, attachment-text rules
│ ├── link_analysis.py # link extraction and destination checks (email and texts)
│ ├── http_policy.py # allowed hosts, rate-limit keys, security and cache headers
│ ├── domain_verification.py # MX, SPF, DMARC, PTR, WHOIS and SMTP checks for /api/verify-email
│ ├── html_visibility.py # HTML parsing, CSS cascade and the text each rendering shows
│ ├── email_structure.py # RFC 5322/MIME, authentication results, official senders,
│ │ # PDF and Word attachment text
│ ├── sender_features.py # sender-address features and domain registries
│ ├── sms_analysis.py # text messages: sender kind, claimed organisation, SMS rules
│ ├── content_model.py # offline text-model training and evaluation
│ ├── content_inference.py # digest-verified model loading and scoring
│ ├── language_coverage.py # script coverage (Han text)
│ ├── server_messages.py # message codes and English templates
│ ├── visual_evidence.py # browser OCR/QR evidence; enhanced_vision.py: optional RapidOCR
│ ├── local_review.py # optional local language-model review (development only)
│ ├── case_*.py, manage_case_access.py, feedback_*.py # optional /cases workspace and reports
│ ├── jev.py, jev_control.py # experimental Jev opinions
│ ├── sender_history.py, rate_limits.py, request_limits.py, domain_age.py,
│ │ ip_reputation.py, disposable_registry.py, verification_runtime.py,
│ │ model_environment.py, config.py, prebuild_demo_model.py
│ ├── data/ # registries and the message catalogue
│ ├── model/ # committed, digest-pinned text-model artifact
│ ├── static/ # frontend (vanilla JavaScript, English and Chinese)
│ ├── tools/ # evaluation, data and maintenance scripts
│ └── tests/ # Python regression tests
├── docs/ # design, API, deployment, evaluation and workflows
└── phishing-detection/ # archived CS 166 benchmark: UCI phishing websites
The UCI Phishing Websites notebook is the archived CS 166 course benchmark. It classifies websites from 30 URL, domain and HTML features; its results (Random Forest accuracy 0.9747) do not describe this email detector.
CS 166 – Information Security | Final Project