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.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Account takeover detection and behavioural risk intelligence. Sentinel builds a
behavioural profile for each account, scores new activity against that account's
own history, explains what moved the score, and presents the result through an
investigation console.
Every account, login and payment in this system is synthetic. It is a
learning project built against a public research dataset and a scenario
simulator. It is not connected to any real financial system and holds no real
credentials.
The finding the project is built around查看完整 README ↗Account takeover detection and behavioural risk intelligence. Sentinel builds a behavioural profile for each account, scores new activity against that account's own history, explains what moved the score, and presents the result through an investigation console.
Every account, login and payment in this system is synthetic. It is a learning project built against a public research dataset and a scenario simulator. It is not connected to any real financial system and holds no real credentials.
The RBA login dataset contains 31,269,264 rows and 141 account-takeover logins — a positive rate of 4.51e-06. Two measured facts shaped everything else:
Is Attack IP is a genuinely different task whose metrics must
never be presented as takeover performance.The gap between those two is reported rather than hidden. The simulator-trained model scores 89.3% on synthetic test data and 50.0% against real takeovers. Both numbers are on the Models screen, labelled by what they were measured against.
login event
|
behavioural profile <- built ONLY from events strictly before this one
|
feature engineering <- deviation from that account's own pattern
|
+-- XGBoost (attack-IP probability)
+-- Isolation Forest (anomaly score)
|
risk fusion -> score + band, with deterministic floors
|
SHAP -> ranked, plain-English factors
|
alert + timeline -> Postgres -> FastAPI -> React console
One feature-engineering package is imported by the training scripts, the seeder and the API. If a feature were computed differently offline than online, the demo would be a lie.
reports/burst_response.md.Requires Python 3.12, Node 22, and Docker.
docker compose up -d db
python -m venv .venv && .venv/Scripts/pip install -e ".[dev]"
cp .env.example .env
.venv/Scripts/python -m alembic upgrade head
.venv/Scripts/python scripts/seed_demo.py
.venv/Scripts/python -m uvicorn backend.app.main:app --reload
cd frontend && npm install && npm run dev
The console is at http://localhost:5173, the API at http://localhost:8000,
and its docs at /docs.
Deploying it is covered in DEPLOYMENT.md.
| Path | What lives there |
|---|---|
ml/ | features, profiles, models, risk fusion, explanations, simulator |
backend/ | FastAPI app, SQLAlchemy models, Alembic migrations |
frontend/ | React + TypeScript console — see its README |
reports/ | committed EDA and evaluation write-ups |
tests/ | leakage guards, feature fixtures, API integration tests |
scripts/ | dataset download, demo seeding |
.venv/Scripts/python -m pytest -q
The highest-value ones are the leakage guards: a profile built with as_of=t is
byte-identical whether or not events after t exist in the input, and the
chronological split asserts max(train) < min(test).
A few API tests read the seeded database live and reuse each account's most
recent device and city. Running a Security Lab scenario writes real rows and can
therefore break them until scripts/seed_demo.py is run again.
The login data is the RBA dataset (Wiefling et al., CC BY 4.0). Its IP addresses, user agents and timestamps were synthesised by its authors, so they are never geolocated here — the provided city and country columns are used instead. No public dataset links logins to transactions for the same account with takeover labels, so all transaction behaviour is simulator-generated and labelled as such in the database, the API and the UI.