A browser-based tool that decrypts happ:// deep links (all five generations: crypt through crypt5) http://leeeet.dev/happ-decryptor/
  • JavaScript 97.7%
  • CSS 1.5%
  • HTML 0.7%
Find a file
2026-07-15 08:00:11 -04:00
.github/workflows Initial commit: happ link decryptor web app 2026-04-15 16:39:38 -08:00
public Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
src Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
test Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
.gitignore Initial commit: happ link decryptor web app 2026-04-15 16:39:38 -08:00
flake.lock Add Nix dev shell and fix crypt5 selector docs 2026-05-09 17:03:38 -04:00
flake.nix Add Nix dev shell and fix crypt5 selector docs 2026-05-09 17:03:38 -04:00
index.html Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
package-lock.json Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
package.json Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
README.md Use direct crypt5 decryption with emulator fallback 2026-07-15 08:00:11 -04:00
vite.config.js Initial commit: happ link decryptor web app 2026-04-15 16:39:38 -08:00

Happ Link Decryptor

Browser-based decryptor for supported happ:// deep links.

The app runs entirely client-side and supports all currently bundled formats: crypt, crypt2, crypt3, crypt4, and crypt5.

Highlights

  • Decryption happens locally in the browser — no server
  • Legacy RSA-wrapped links (cryptcrypt4) decrypt directly in JavaScript
  • crypt5 decrypts directly with RSA + ChaCha20-Poly1305, including both the legacy and newer salted/XOR layouts
  • The original native-library CPU emulator remains as an automatic fallback
  • 36 bundled crypt5 marker keys + the fallback emulation assets are committed under public/

Development

npm install
npm run dev
npm test
npm run build
npm run preview

How it works

  • src/decrypt.js — top-level decode for every generation.
  • src/crypt5.js — lightweight direct crypt5 parsing, RSA key recovery, salt/XOR handling, and authenticated ChaCha20-Poly1305 decryption.
  • src/emu/ — fallback that loads liberror-code.so onto unicorn.js (Unicorn 2.1.4, asm.js) with a mock JNI/libc host and its existing JavaScript BigInt RSA fast path.
  • public/data/crypt5-keys.json — PKCS#8 keys for direct decryption; public/data/keytable.json — key strings used by the native fallback.

The detailed reverse-engineering write-up is in the in-page dossier (index.html).

Runtime Dependencies

  • node-forge — RSA PKCS#1 v1.5 decryption.
  • @noble/ciphers — audited ChaCha20-Poly1305 implementation for direct crypt5 decryption.

Privacy

Decryption happens locally in the browser tab. The app does not upload links or decrypted results to a server.