QuishGuard – QR Code Scam Detection App | Cyber Security Final Year Project with Source Code

QuishGuard – QR Code Scam Detection App | Cyber Security Final Year Project with Source Code

A Flutter app that scans a QR code and tells you in seconds whether it's safe, suspicious, or a scam backed by a Django risk-scoring engine. Full source code, report, and setup support included.

Technology Used

Flutter | Dart | Riverpod | go_router | Django 5 | Django REST Framework | Python 3.11 | SQLite | Celery | Redis | Groq LLaMA API | Google Safe Browsing API | RDAP/WHOIS | Nginx | Gunicorn | GitHub Actions

codeAj
codeAjVerified
🏆5K+ Projects Sold
Google Review
5991999

Get complete project source code + Installation guide + chat support


Abstract

Scan to pay. Scan to donate. Scan to check in. QR codes have quietly become the default way Indians move money, and scammers noticed that a long time ago. "Quishing" — QR phishing — works because nobody can look at a black-and-white square and tell what's inside it. A scammer pastes a sticker over the shop's real QR, and the money goes somewhere else entirely. You'd never click a random link from an SMS, but you'll happily point your camera at a sticker on a petrol pump.

QuishGuard fixes that blind spot. The app decodes a QR on the device, sends the payload to a Django backend, and the backend actually investigates it — where the URL really redirects to, how old the domain is, whether the TLS certificate is valid, whether Google Safe Browsing has flagged it, whether the UPI handle belongs to a real payment service provider or a lookalike pretending to be one. Then it returns a verdict: safe, suspicious, or dangerous. In plain English or Hinglish. With every single rule that fired shown on screen, so it's never a mystery number.

What This Project Actually Does

Think of it as a background check for QR codes.

You open the app, point the camera at a QR, and it decodes on-device — no image ever leaves your phone, only the decoded text. That text goes to POST /api/v1/scan/ on the Django backend. The backend figures out what kind of payload it is (a URL or a UPI intent), runs it through a chain of analyzers, adds up weighted scores from a rule table stored in the database, and hands back a verdict plus a findings list.

A few rules skip the arithmetic entirely. If the link triggers an APK download, or Safe Browsing flags it, or the domain is already on the community blacklist — dangerous, immediately, no matter what the numeric score says. Because a 47/100 that ends in a malware install isn't "suspicious," it's just dangerous.

Then a Groq-hosted LLaMA model turns that findings list into two or three human sentences. If the LLM call fails or you haven't added an API key, a template fallback writes the explanation instead — so the app never shows a blank screen just because an external service was having a bad day.

The scoring pipeline, step by step

  1. Flutter decodes the QR (live camera or a gallery import, and it handles images containing more than one code).
  2. Payload is POSTed to the backend with an X-Device-Id header — no login, no account, no OTP.
  3. Backend parses it as a URL or a UPI intent string.
  4. Analyzers run: RDAP/WHOIS domain age, TLS certificate check, Google Safe Browsing lookup, URL-shortener expansion, suspicious TLD check, lookalike-domain detection, PSP handle validation, brand-impersonation check.
  5. Each hit contributes a weighted score from an editable rule table. Critical rules override the total.
  6. The LLM writes the explanation. The verdict, score, and every individual finding go back as JSON.
  7. App renders it, caches it in local SQLite for offline history, and offers a "Report this QR" button.

Key Features

  • Camera and gallery scanning with multi-code handling — point at a QR or import a screenshot; if a single image has three QR codes in it, you pick which one to check instead of the app silently grabbing the first.
  • A verdict in seconds, not a raw score — safe, suspicious, or dangerous, colour-coded, with the reasoning underneath.
  • Every rule that fired is visible — "domain registered 6 days ago," "not a recognized PSP handle," "certificate expired." Each with its own severity. Open the box and look inside.
  • English or Hinglish explanations — generated by Groq/LLaMA, switchable in settings, with a template fallback if the API is unreachable.
  • Works with no internet, partially — the app syncs the backend's blacklist to a local cache, so a known scam domain or VPA still gets flagged even when the scan request can't reach the server. Scan history is cached locally too.
  • Community blacklist with moderation — a user reports a scam QR from the verdict screen, an admin approves it in the Django moderation queue, and it lands in the blacklist every other device syncs against.
  • Zero-friction identity — a locally generated device id instead of accounts. Rate limiting is per device id, so there's no auth system to build, break, or explain to your examiner.
  • Async enrichment via Celery — a brand-new domain is scored inline, but a stale cached one is served instantly while Celery refreshes it in the background, plus a nightly sweep. Live scans never sit there waiting on a slow WHOIS server.
  • Accessibility done properly — screen-reader semantics throughout, a light/dark "Trust Grid" theme, and a non-gesture alternative to swipe-to-delete in history. Small thing. Examiners notice it.
  • In-app Learn screen — short explainers on how quishing scams actually work, which makes this an awareness tool and not just a filter.

Real-World Applications

  • Everyday UPI payments — the fake sticker slapped over the parking attendant's or fruit vendor's real QR. Catch it before the money moves.
  • Donation drives — cloned charity QR codes spike around festivals and disaster relief. This flags the lookalike domain before someone donates to a scammer.
  • Phishing and malware interception — QR codes that redirect to fake bank login pages or kick off an unsolicited APK download.
  • Digital literacy programs — colleges, NGOs, and bank branches running awareness sessions can hand people something they can actually try.
  • An embeddable safety layer — the scoring API is standalone and device-id based, so a payment app or bank could put its own scanner in front of the same verdict engine without touching QuishGuard's UI.
  • Crowdsourced threat intel — a live user base surfaces new scam VPAs faster than any manual feed would.

What's Hard and What's Easier Than It Looks

The honest hard part: the domain intelligence layer. You're making network calls to RDAP, TLS endpoints, and the Safe Browsing API from your own server, which means you have to fetch untrusted URLs safely — the project ships an SSRF-safe fetcher for exactly this reason, and understanding why it exists takes a bit of reading. Layer Celery on top for background refresh and there's genuine engineering in there. Which is great for your viva, and slightly annoying on a Tuesday night.

The easier part will surprise you. The whole risk engine is a weighted rule table in the database. Want to make expired certificates count for more? Change one number in the Django admin and rescan. No code edit, no redeploy, nothing. And Redis is optional in development — Celery falls back to eager mode, so tasks just run inline and you can build the entire thing without ever installing Redis. If you've built a Django CRUD app before, you already know 60% of this backend.

Who Should Buy This

If you're a student who needs a working project for your college submission, final-year project, semester project, internship, or academic demonstration, this is for you. Whether you're studying BCA, B.Tech, MCA, M.Tech, Computer Science, IT, AI, Data Science, or another related field, you can choose a project that fits your requirements. If you need the source code, project report, documentation, or help setting up and running the project, CodeAj gives you the resources and support to get started faster.

Specifically worth it if your department wants a mobile app and a real backend, if "cyber security" is on your syllabus and you're tired of seeing the same keylogger and caesar-cipher submissions, or if you want something you can demo live in front of a panel by generating a QR pointing at a sketchy domain and watching the app light up red.

Why CodeAj

You get the complete monorepo — the Django backend and the Flutter app, both finished, both tested, with their own READMEs. Plus the project report and documentation written to match what Indian universities actually ask for: abstract, literature survey, system design, methodology, results, future scope. If it won't run on your machine, the setup support is real support, not a link to a generic FAQ. Browse more cyber security final year projects if you want to compare, or check the Flutter projects with source code collection for other mobile builds. The backend side sits comfortably alongside our other Django final year projects if your guide insisted on Python.

Frequently Asked Questions

You will get the complete source code along with an installation guide and chat support to help you set up and understand the project.
All our projects are thoroughly tested multiple times, so the code is completely error-free. But in case you still face any issue, you can reach out to us on WhatsApp (+91 8603862290) and we will fix it and provide you the updated code.
You can book a 1-on-1 Setup & Explanation Session where we connect via AnyDesk and Google Meet, set up the project on your laptop, and explain the complete code working and flow.
No, you cannot re-sell the project. This is completely illegal and a violation of our terms. If we find any such activity, we will take legal action.
No, and please don't go hunting for one. Generate your own QR pointing at a freshly registered domain or a bit.ly link and the app will flag it, because domain age and shortener use are both scored rules. There's also a seeded blacklist entry in the fixtures you can point a test QR at if you want a guaranteed dangerous verdict during the demo. Practice it twice before the viva.
Yeah. The LLM only writes the friendly explanation paragraph at the bottom of the verdict screen. All the scoring, the verdict, the findings list — that's pure Python running on your own server, no AI service involved. Without a key, a template explainer fills in the text instead, so the screen never looks broken.
Nothing, that's just the default. The app ships pointing at http://10.0.2.2:8000/api/v1/, which is the Android emulator's alias for your laptop. On a real phone it means nothing. Open lib/core/network/dio_client.dart, put your laptop's LAN IP there instead — something like http://192.168.1.7:8000/api/v1/ — and add that same IP to ALLOWED_HOSTS in Django settings. Both machines on the same WiFi, obviously.
Skip it while you're developing. Celery falls back to eager mode with no broker configured, which just means background tasks run inline instead of in a queue. Everything works. First scan of a brand-new domain takes a second longer, that's the whole cost. Install Redis when you deploy, or if your report needs a screenshot of actual async workers.
Open the risk rule table in Django admin during your presentation and walk through it. Every rule has a name, a weight, a severity. The verdict is the weighted sum, except critical rules like an APK download that force dangerous on their own. Then change a weight live, rescan the same QR, and show the score move. Panels stop asking follow-up questions after that.
No. Decoding happens entirely on the device, and only the decoded text string goes to the backend. So a photo of your friend's UPI QR never leaves the phone. Put that in your system design chapter — privacy-by-design is an easy mark to pick up.
Technically yes, but you'd be throwing away the interesting half. The scoring engine, the analyzers, the moderation queue — that's all backend. If your college only accepts a mobile submission, run the backend locally and present it as your API layer. A two-tier system gives you architecture diagrams to fill pages with anyway.
Both projects in full — backend and mobile, with their own READMEs. The project report and documentation formatted the way Indian universities want it, abstract through future scope. And setup support, meaning an actual human helping when your flutter run throws something weird, not a link to a help article.
Installation Guide

Extra Add-Ons Available – Elevate Your Project

Add any of these professional upgrades to save time and impress your evaluators.

Live 1-on-1 Mentorship

Personal session with an expert developer

Project Setup

We'll install and configure the project on your PC via remote session (Google Meet, Zoom, or AnyDesk).

Source Code Explanation

1-hour live session to explain logic, flow, database design, and key features.

Want to know exactly how the setup works? Review our detailed step-by-step process before scheduling your session.

1999

Custom Documents (College-Tailored)

  • Custom Project Report: ₹1,500
  • Custom Research Paper: ₹1,000
  • Custom PPT: ₹800

Fully customized to match your college format, guidelines, and submission standards.

Project Modification

Need feature changes, UI updates, or new features added?

Charges vary based on complexity.

We'll review your request and provide a clear quote before starting work.

Project Files

GoogleReviews

What Our Students Say

4.9(38+ reviews)
Google review 1
Google review 2
Google review 3
Google review 4
Google review 5
Google review 6
Google review 7
Google review 8
Google review 9
Google review 10
Google review 11
Google review 12
Google review 13
Google review 14
Google review 15
Google review 16
Google review 17
Google review 18
Google review 19
Google review 20
Google review 21
Google review 22
Google review 23
Google review 24
Google review 25
Google review 26
Google review 27
Google review 28
Google review 29
Google review 30
Google review 31
Google review 32
Google review 33
Google review 34
Google review 35
Google review 36
Google review 37
Google review 38
⭐ 98% SUCCESS RATE
  • Full Development
  • Documentation
  • Presentation Prep
  • 24/7 Support