Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
datadome-vm-internals | Kitploit
Tools/GitHubGitHub/manjustice/datadome-vm-internals
Reverse EngineeringMalware AnalysisBinary AnalysisPapers & ResearchLearning & EducationAnti-Bot
GitHubmanjustice/datadome-vm-internals

datadome-vm-internals

View Repository
2754 months agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

DataDome VM

DataDome embeds a custom VM in their bundle to hide what they're actually doing. I got curious and pulled it apart. Sharing it here for anyone who's interested in the same kind of reverse engineering puzzle.

DataDome ships a heavily obfuscated JavaScript bundle to your browser. Inside it, there's a custom virtual machine — they compile their actual fingerprinting logic into a private bytecode format, then run it inside that VM at runtime. This analysis of the latest version at the time of writing.

No DataDome code is included in this repo — only my own analysis and tooling.

Please read the note at the bottom before using this.


What's interesting inside

Once you can read the bytecode, a few things stand out.

String encryption. All strings are stored in a single encrypted blob at the top of the bytecode. Each string is decoded at runtime using a per-entry XOR key combined with a seed baked into the table header. So even reading raw bytes tells you nothing without knowing the seed.

S-box tables everywhere. The first ~20KB of bytecode is almost entirely PUSH_N_IMM + ARRAY_FROM_STACK sequences building 256-byte lookup tables. These are S-boxes, likely for a custom cipher or AES rounds used to hash the collected signals before sending them.

Fingerprinting signals you can actually see after decoding the strings:

  • Canvas: draws a rect and reads back pixel values
  • WebGL: the full shader source is sitting there in plain text once decoded
  • Timing: basically the full navigation timeline
  • Memory: current JS heap usage
  • Screen: dimensions and pixel ratio
  • DOM tricks: injects hidden elements to measure font rendering and layout
  • Automation check: the classic one webdriver

NOTE

This project exists purely to satisfy curiosity about how custom VM obfuscation works in practice. It's a learning exercise in reverse engineering, not a tool for bypassing bot detection.

What you do with this knowledge is on you.

Download Tool