
Analisi della VM offuscata personalizzata di DataDome e del formato bytecode, che rivela crittografia delle stringhe, cifrari S-box e segnali di fingerprinting del browser per l'educazione al reverse engineering.
DataDome incorpora una VM personalizzata nel proprio bundle per nascondere ciò che effettivamente fa. Sono diventato curioso e l'ho smontata. Condivido qui per chiunque sia interessato allo stesso tipo di puzzle di reverse engineering.
DataDome invia un bundle JavaScript pesantemente offuscato al tuo browser. Al suo interno c'è una macchina virtuale personalizzata — compilano la loro logica effettiva di fingerprinting in un formato bytecode privato, poi la eseguono all'interno di quella VM in fase di runtime. Questa analisi si riferisce all'ultima versione al momento della scrittura.
Nessun codice di DataDome è incluso in questo repository — solo la mia analisi e i miei strumenti.
Per favore, leggi la nota in fondo prima di utilizzare questo.
Una volta che riesci a leggere il bytecode, alcune cose risaltano.
Crittografia delle stringhe. Tutte le stringhe sono memorizzate in un unico blob crittografato all'inizio del bytecode. Ogni stringa viene decodificata a runtime usando una chiave XOR per entry combinata con un seed incorporato nell'intestazione della tabella. Quindi anche leggere i byte grezzi non ti dice nulla senza conoscere il seed.
Tabelle S-box ovunque. I primi ~20KB di bytecode sono quasi interamente sequenze PUSH_N_IMM + ARRAY_FROM_STACK che costruiscono tabelle di lookup da 256 byte. Queste sono S-box, probabilmente per un cifrario personalizzato o round AES usati per fare hash dei segnali raccolti prima di inviarli.
Segnali di fingerprinting che puoi effettivamente vedere dopo aver decodificato le stringhe:
Questo progetto esiste puramente per soddisfare la curiosità su come funziona nella pratica l'offuscamento tramite VM personalizzata. È un esercizio di apprendimento nel reverse engineering, non uno strumento per bypassare il rilevamento dei bot.
Quello che fai con questa conoscenza dipende da te.