Skip to content
Projects

Full-stack web app · 2025

VMProtect License Manager

Self-hosted license generation for VMProtect, delegated to resellers

A full-stack Next.js + Supabase platform that generates VMProtect-compatible RSA license keys and lets admins hand out credit-based quotas to resellers, with approval workflows and a full audit trail.

  • Next.js
  • TypeScript
  • Supabase
  • RSA
  • Tailwind CSS
GitHub stars
14
Open source, MIT.
Forks
4
Self-hosted by others.

Why it exists

Generating VMProtect license keys needs your private RSA key and an understanding of VMProtect's binary serial format. That makes the developer a bottleneck: every purchase, every hardware ID (HWID), and every reseller request has to go through them.

VMProtect License Manager moves that work to a web platform:

  1. The admin imports VMProtect product keys once.
  2. Sellers generate licenses on their own, using credits the admin gives them.
  3. Customers send their HWID straight to the seller.
  4. Every action is tracked, with approval workflows for refunds and HWID changes.

What I built

  • VMProtect-compatible key generation: the serial payload is encrypted with the RSA private key using PKCS#1 v1.5 padding, then Base64-encoded, so licenses verify offline with no phone-home.
  • Admin and seller roles with decimal credit balances, from a 7-day trial (0.3 credits) to 6 months.
  • Multiple products, each with its own RSA key pair, imported directly from VMProtect's XML export.
  • Renewals, refunds, and HWID changes: one free HWID change a month, a paid instant change, or a request for the admin to approve. Original keys are kept so they can go on a blocklist.
  • Sortable tables, CSV bulk generation, and export, plus full English and Chinese UI and a mobile layout.

Security

Row Level Security is on, and the database is only reachable with the service role. Every API route checks authentication and role. Sessions use HTTP-only cookies. Private keys are only read server-side, and credit balances are updated atomically on the server so concurrent requests can't race each other.

Stack

Next.js 14 (App Router), TypeScript, Supabase (Postgres), Tailwind CSS, Lucide, date-fns, and PapaParse. It deploys to Vercel in one click.