Skip to content

Latest commit

ย 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ•ต๏ธ Iffy_Offer โ€” Job Offer Email Legitimacy Checker

Version License: MIT Python 3.10+ Platform UI: Tkinter

A desktop tool that analyzes a job-offer email and estimates whether it's from a legitimate company or a phishing/scam attempt.

Enter the company name and the sender's email address (and optionally paste the raw email headers), click Analyze, and get a risk verdict in seconds.


๐Ÿ’ก Why I built this

I kept getting job-offer emails that felt off โ€” free-provider addresses claiming to be from Fortune 500 companies, brand-new domains with no email infrastructure, display names that didn't match the actual sender. I wanted a quick way to sanity-check them without manually digging through DNS records and WHOIS every time. Iffy Offer automates those checks and gives a plain-English verdict in a few seconds. It won't catch every scam, but it catches the obvious ones fast.


โœจ Features

  • Domain analysis โ€” detects homoglyph substitutions (amaz0n.com) and typosquatted domains (amzon-careers.com)
  • Free-provider detection โ€” flags addresses from Gmail, Yahoo, Hotmail, etc.
  • ATS platform recognition โ€” recognizes legitimate recruiting platforms (Greenhouse, Workday, Lever, LinkedIn, etc.)
  • Domain age check โ€” RDAP lookup flags brand-new domains (< 30 days)
  • DNS record checks โ€” verifies MX, SPF, and DMARC records
  • Header analysis โ€” detects display-name spoofing and Reply-To hijacking (when raw headers are provided)
  • Email body language analysis โ€” flags scam-language patterns in the pasted message text: upfront payment requests, premature PII/financial-info asks, pushes to move to WhatsApp/Telegram, urgency/pressure phrasing, instant-hire claims, and generic greetings (all offline, no data leaves your machine)
  • Attachment analysis โ€” flags dangerous or double file extensions, file-signature/extension mismatches, VBA/XLM macros with auto-exec or suspicious API use (via static parsing, never executed), embedded PDF actions, archives smuggling an executable, and disk-image containers
  • Risk score โ€” all signals combine into a single score with a color-coded verdict
  • Dark & light mode โ€” toggle with one click; high-contrast palette with Matrix-green pass indicators in both modes
  • Larger default window โ€” results panel sized to show all checks without scrolling

๐Ÿ“ธ Screenshots

Dark Mode Light Mode
Dark mode Light mode

๐Ÿ› ๏ธ Installation

Requirements: Python 3.10 or newer

1. ๐Ÿ Verify your Python version

python3 --version

If the output is below 3.10, download a newer release from python.org before continuing.

2. ๐Ÿ“ฅ Clone the repository

git clone https://github.com/cainepavl/Iffy_Offer.git
cd Iffy_Offer

3. ๐Ÿ“ฆ Create and activate a virtual environment (recommended)

python3 -m venv venv
# Linux / macOS
source venv/bin/activate

# Windows โ€” PowerShell
venv\Scripts\Activate.ps1

# Windows โ€” Command Prompt
venv\Scripts\activate.bat

Your prompt will change to show (venv) when the environment is active.

4. โฌ‡๏ธ Install dependencies

pip install -r requirements.txt

5. โ–ถ๏ธ Launch the app

python main.py

๐Ÿ“ Tkinter note

Tkinter is part of the Python standard library and is included automatically on Windows (via the python.org installer) and macOS. On Linux it may need to be installed separately:

# Debian / Ubuntu
sudo apt install python3-tk

# Fedora
sudo dnf install python3-tkinter

# macOS (if missing after a Homebrew Python install)
brew install python-tk

๐Ÿง WSL (Windows Subsystem for Linux)

Iffy Offer opens a GUI window, so WSL needs a display backend to render it.

Windows 11 โ€” WSL 2 with WSLg (recommended)
WSLg ships built into Windows 11 (21H2 and later) and handles GUI apps automatically. Follow the Linux installation steps above โ€” no extra display setup needed.

Windows 10 โ€” WSL 2 without WSLg
Install an X server on the Windows side (e.g. VcXsrv), launch it with "Disable access control" checked, then export the display variable before running the app:

export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0
python main.py

Also make sure python3-tk or python3-tkinter is installed inside your WSL distro โ€” see the Tkinter note above.


๐Ÿš€ Usage

  1. Company Name โ€” type the name of the company that supposedly sent the email (e.g. Amazon, Google, Acme Corp)

  2. Sender Email โ€” paste the full From address, including display name if shown (e.g. Amazon Recruiting <hr@amaz0n-careers.net>)

  3. Raw Headers โ€” paste the full header block from your email client ("Show Original" / "View Source") into the text area. This is optional but enables display-name spoofing and Reply-To mismatch checks.

  4. Email Body โ€” paste the message text. This is optional but enables the scam-language checks (upfront payment requests, urgency language, etc.).

  5. Attachment โ€” click Browseโ€ฆ to select any attachment that came with the email. This is optional but enables the static attachment analysis. The file is only ever read as bytes โ€” Iffy Offer never opens or executes it.

  6. Click Analyze Email and wait a few seconds for DNS/RDAP lookups and attachment analysis to complete.


๐Ÿ” Finding the Raw Header Block

The raw header block is the machine-readable metadata that sits above the email body. Every email has one; it's just hidden by default.

๐Ÿ“ฌ How to open it in common clients

Client Steps
Gmail (web) Open the email โ†’ click the โ‹ฎ (three-dot) menu at the top right โ†’ Show original
Outlook (web) Open the email โ†’ click โ‹ฏ โ†’ View โ†’ View message source
Outlook (desktop) Open the email in its own window โ†’ File โ†’ Properties โ†’ look in the Internet headers box
Apple Mail Open the email โ†’ View menu โ†’ Message โ†’ Raw Source
Thunderbird Open the email โ†’ View menu โ†’ Message Source (or Ctrl+U)
Yahoo Mail Open the email โ†’ click the โ‹ฏ menu โ†’ View Raw Message

โœ‚๏ธ What to copy

Once the raw source is open you will see something like this at the very top:

Delivered-To: you@example.com
Received: from mail.sender.com ...
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sender.com;
        h=from:to:subject:date; bh=...; b=...
From: "HR Team" <hr@sender.com>
To: you@example.com
Subject: Exciting Opportunity
Date: Fri, 06 Jun 2026 10:00:00 +0000
Reply-To: different@otherdomain.com
...

Copy everything from the very first line down to (but not including) the blank line that separates the headers from the email body. Paste that block into the Raw Headers field in Iffy Offer.

Tip: The header block always ends at the first completely blank line. Everything after that blank line is the body of the email โ€” you don't need it.


๐Ÿ“Š How Scoring Works

Each check contributes a signed integer delta to a cumulative risk score.

Check Score delta
Free email provider (gmail, etc) โ€“40
Known ATS / recruiter platform +20
Homoglyph characters in domain โ€“30
Typosquatting detected โ€“25
Domain < 30 days old โ€“30
Domain 30โ€“180 days old โ€“15
Domain > 2 years old +10
No MX records โ€“20
No SPF record โ€“10
No DMARC record โ€“10
Reply-To domain mismatch โ€“20
Display name spoofing โ€“15
Body: upfront payment request โ€“35
Body: premature PII/financial ask โ€“25
Body: instant hire, no interview โ€“15
Body: off-platform comms push โ€“15
Body: urgency/pressure language โ€“10
Body: generic greeting โ€“5
Attachment: dangerous/double extension โ€“35
Attachment: signature mismatch โ€“30
Attachment: archive has executable โ€“30
Attachment: macros, high risk โ€“40
Attachment: macros, medium risk โ€“25
Attachment: macros, low risk โ€“15
Attachment: PDF embedded action/JS โ€“25
Attachment: disk-image container โ€“20

Verdict bands:

Score Verdict
โ‰ฅ 0 ๐ŸŸข Looks Legit
โ€“1 to โ€“29 ๐ŸŸก Iffy
โ‰ค โ€“30 ๐Ÿ”ด Yikes!

๐Ÿšซ What This Tool Does NOT Do

  • Never opens or executes an attachment โ€” analysis is purely static, reading bytes and file structure only. Nothing you attach is ever launched, opened with its associated app, or run in any way.
  • Is not an antivirus โ€” attachment analysis flags structural red flags (macros, suspicious file types, etc.), not known-malware signatures.
  • Does not follow or analyze links in the email body.
  • Does not contact the company to verify the recruiter's identity.
  • Does not send your data anywhere โ€” the only outbound network calls are standard DNS and RDAP queries for the domain you enter. No email content, no attachment content, no personal information, and no usage data is ever transmitted.
  • Cannot guarantee accuracy โ€” a well-resourced attacker can pass some of these checks (e.g. by setting up SPF/DMARC on a fake domain). Use this tool as one input among several, not as a definitive verdict.

โš ๏ธ Limitations

  • RDAP lookups can fail for some TLDs (privacy redaction, unsupported registries). The tool will show "unknown" for age rather than error out.
  • DNS and RDAP checks require an internet connection.
  • The ATS platform and free-provider lists are curated manually โ€” they may not cover every service.
  • The email body and attachment checks are heuristic โ€” a well-crafted scam can avoid every keyword pattern, and a legitimate email can occasionally trip a weak signal (like a generic greeting). Treat every check as one signal among several, not a standalone verdict.

๐Ÿ”ง Extending

To add a new free provider or ATS platform, just add a line to data/free_providers.txt or data/ats_platforms.txt. No code changes required.

To add a new check, see the Adding a New Check section in CLAUDE.md.


๐Ÿ“„ License

MIT License โ€” Copyright (c) 2026 Caine Pavlosky

You are free to use, copy, modify, and distribute this software for any purpose, with or without modification, as long as the copyright notice and permission notice are preserved. See the LICENSE file for the full license text.


๐Ÿ”” Disclaimer

Iffy Offer is provided for educational and personal use only. It is a heuristic tool and is not 100% accurate โ€” a sophisticated attacker can pass some checks (e.g. by registering a domain with proper SPF/DMARC records). Always verify suspicious emails through official company channels before taking any action. This tool does not constitute legal, security, or professional advice.


๐Ÿ“ฉ Contact/Connect

Caine Pavlosky

About

A desktop tool that analyses a job-offer email and estimates whether it's from a legitimate company or a phishing/scam attempt.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages