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.