- Electron 기반 데스크톱 앱인 디스코드는 내부적으로 Chromium 창으로 동작해 웹 개발자 도구를 열 수 있으며, 이를 통해 클라이언트 측 코드 수정이 가능
- 일부 모드 클라이언트와 플러그인은 Nitro 유료 구독이 필요한 기능 일부를 클라이언트 단에서 해제
- Webpack code splitting으로 분할된 모듈을
webpackChunkdiscord_app변수에 주입해 내부 함수를 탐색·교체하는 방식이 핵심 - 화면 공유 화질 검사 함수는 클라이언트에서만 검증돼 우회 가능하지만, 프리미엄 테마는 서버 동기화 검증이 추가로 작동
- 데모 기법은 모두 디스코드 이용약관 위반이며 계정 정지 위험과 미검증 코드 실행에 따른 계정 탈취 위험 존재
개요
- 외형을 변경하거나 기능을 추가하는 모드 디스코드 클라이언트가 다수 존재하며, 일부 플러그인은 Nitro 유료 구독이 필요한 기능까지 해제
- 이러한 동작이 가능한 기술적 원리를 클라이언트 구조 분석을 통해 설명
개발자 도구 활성화
- 디스코드는 웹 기술로 크로스플랫폼 앱을 만드는 Electron 프레임워크로 개발되어, 웹 브라우저 안에서 실행되는 웹사이트와 유사
- 본질적으로 Chromium 창이므로 개발자 도구를 열 수 있으나, 기본적으로 비활성화 상태
- 다수 사용자가 위협 행위자의 사회공학적 유도로 악성 명령어를 붙여넣어 계정이 탈취된 사례가 있어 차단됨
- 위험을 이해한 경우
%appdata%/discord/settings.json설정 파일에DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING값을true로 추가해 활성화- 이후
ctrl + shift + i로 개발 콘솔 실행
- 이후
디스코드 함수 패칭
- 초기 로딩 최적화를 위해 코드가 여러 청크로 분할되어 병렬 또는 지연 로딩(lazy-loaded)되며, Webpack의 code splitting 기능 사용
- 로드된 모든 청크는
webpackChunkdiscord_app변수에 저장 - 디스코드 변수·함수를 사용하는 코드를 실행하려면 이 변수에 코드를 주입(inject) 해야 함
a.c는 모든 모듈을 담은 객체이며, 각 모듈은chunk_id,loaded,exports형태로 구성exports에는 모듈에서 내보낸 함수·객체·원시값이 포함
- 여러 JavaScript 모듈을 순회하는
find함수를 만들어 특정 함수를 탐색하고 호출 가능- 예:
getCurrentUser()함수를 찾아 호출
- 예:
- 원본 함수를 다른 함수로 교체(replace) 해 동작을 변경할 수 있어, 직접적인 코드 수정이 가능
고화질 스트리밍 해제
- 이 시점 이후의 내용은 디스코드 이용약관에 명백히 위배되며 계정 정지로 이어질 수 있어 위험을 감수해야 함
- 사용자의 구독 등급을 확인하는
canStreamMidQuality,canStreamHighQuality두 함수가 화면 공유 화질 선택 화면 직전에 호출됨- 두 함수의 반환값을
true로 강제하면, Nitro 미구독 상태에서도 원본 해상도 60 FPS 화면 공유 선택 가능
- 두 함수의 반환값을
- 현재 디스코드는 전송되는 스트림이 미구독자 기준을 실제로 준수하는지 서버에서 검증하지 않는 것으로 보임
- 다만 디스코드는 아직 종단간 암호화(End-to-End encryption) 를 사용하지 않아 탐지 가능성 존재
- 참조 글에 따르면 디스코드는 이미 사용자의 오디오·비디오 콘텐츠를 검사하며, 향후 화면 공유 전 서버 측 검증을 추가할 수 있음
프리미엄 테마 해제
- 사용자가 Nitro 테마를 사용할 수 있는지를 반환하는
canUseClientThemes함수의 값을true로 바꾸면 프리미엄 테마 선택 버튼이 해제됨 - 그러나 테마가 잠깐 적용된 뒤 곧바로 기본 테마로 되돌아감
- 클라이언트가 테마 변경을 저장하려 하지만 서버가 권한 없음을 검증하고, 응답 수신 시 기본 테마를 재적용하기 때문
- 외형 설정 동기화만 차단하도록
shouldSync함수를 패칭해appearance값일 때false를 반환시키면 테마 변경이 유지됨 - 테마는 전적으로 클라이언트 측에서 관리되고 CSS를 직접 수정하는 것도 항상 가능해, 디스코드가 이를 막기는 어려움
결론
- 시연된 해킹을 손쉽게 적용하는 코드가 있으나, 클라이언트 수정이나 모드 사용 전 신중함이 중요
- 디스코드는 이용약관 위반 계정을 언제든 정지할 수 있으며, 계정 접근 권한을 가진 미검증 코드 실행은 매우 위험
- 글 내 인코딩된 메시지: "이해하지 못한 코드를 개발 콘솔에 붙여넣지 말 것 — 계정을 탈취당하는 가장 쉬운 방법"