
DataDome의 커스텀 난독화된 VM 및 바이트코드 형식 분석: 리버스 엔지니어링 교육을 위한 문자열 암호화, S-box 암호, 브라우저 핑거프린팅 신호 공개
DataDome은 번들에 커스텀 VM을 내장하여 실제로 수행하는 작업을 숨깁니다. 호기심이 생겨 분석해 보았습니다. 동일한 종류의 리버스 엔지니어링 퍼즐에 관심이 있는 사람을 위해 여기에 공유합니다.
DataDome은 심하게 난독화된 JavaScript 번들을 브라우저로 전송합니다. 그 안에는 커스텀 가상 머신이 있습니다. 실제 핑거프린팅 로직을 비공개 바이트코드 형식으로 컴파일한 다음 런타임에 해당 VM 내에서 실행합니다. 이 분석은 작성 시점의 최신 버전을 기준으로 합니다.
이 저장소에는 DataDome 코드가 포함되어 있지 않습니다. 제 분석과 도구만 있습니다.
사용하기 전에 하단의 참고 사항을 꼭 읽어 주세요.
바이트코드를 읽을 수 있게 되면 몇 가지 눈에 띄는 것들이 있습니다.
문자열 암호화. 모든 문자열은 바이트코드 상단에 있는 단일 암호화된 블롭에 저장됩니다. 각 문자열은 테이블 헤더에 내장된 시드와 결합된 항목별 XOR 키를 사용하여 런타임에 디코딩됩니다. 따라서 시드를 모르면 원시 바이트를 읽어도 아무 것도 알 수 없습니다.
S-box 테이블이 모든 곳에 있습니다. 바이트코드의 처음 ~20KB는 거의 전부 PUSH_N_IMM + ARRAY_FROM_STACK 시퀀스로 256바이트 조회 테이블을 구성합니다. 이는 S-box로, 수집된 신호를 전송하기 전에 해싱하는 데 사용되는 사용자 정의 암호 또는 AES 라운드에 사용될 가능성이 높습니다.
문자열을 디코딩한 후 실제로 볼 수 있는 핑거프린팅 신호:
이 프로젝트는 순전히 커스텀 VM 난독화가 실제로 어떻게 작동하는지에 대한 호기심을 충족시키기 위해 존재합니다. 리버스 엔지니어링을 배우는 연습일 뿐, 봇 탐지를 우회하기 위한 도구가 아닙니다.
이 지식을 어떻게 사용할지는 여러분의 책임입니다.