텔레그램 채팅방 Telega 사용자 탐지기: Go 구현
VK의 Telega 클라이언트를 설치하면 사용자의 명시적 동의 없이 Telegram ID가 VK Calls 데이터베이스에 등록됩니다. 이는 calls.okcdn.ru로의 익명 로그인(anonymLogin)을 통해 발생하며, Telegram ID와 OK ID 간 매핑이 인증되지 않은 API를 통해 공개적으로 접근 가능해집니다.
Go 기반 antitelega 탐지기는 채팅방을 스캔해 멤버 ID를 추출하고 데이터베이스에 있는지 확인합니다. 전체 과정은 단 세 번의 HTTP 요청으로 완료됩니다: 익명 로그인, 외부 ID로 OK ID 조회, 응답 파싱.
POST https://calls.okcdn.ru/api/auth/anonymLogin
application_key=CHKIPMKGDIHBABABA
session_data={"device_id":"antitelega","version":2,...}
CHKIPMKGDIHBABABA 키는 Telega APK(appId: 512001570726)에서 추출됩니다. 서버는 후속 요청에 사용할 session_key를 응답으로 줍니다.
POST https://calls.okcdn.ru/api/vchat/getOkIdByExternalId
application_key=CHKIPMKGDIHBABABA
session_key=<1단계에서 받은 값>
externalId=123456789
응답에 ok_id가 있으면 등록 확인; 300 에러는 기록 없음.
스캐너 아키텍처: /scan 명령부터 보고서까지
봇은 저장된 메시지(Saved Messages)에서 /scan @채팅방이름으로 시작합니다. 파이프라인은 다음과 같습니다:
- 열거(Enumeration):
ChannelsGetParticipants로 멤버 추출, 페이지네이션, 지터(jitter), 봇/삭제된 계정 필터링. - 캐시 조회: SQLite 캐시 확인(TTL 6시간).
- 일괄 확인: 워커 풀 분산, 속도 제한 및 지터 적용.
- 보고서: 저장된 메시지에 포맷팅 출력, 3800자 초과 시 청크 분할.
바이너리 크기는 약 26MB, 순수 Go에 modernc.org/sqlite 사용, CGO 없음. ARM 지원 포함.
위험 수준(Risk_level): 밴 피하기 위한 프리셋
func jitteredDuration(d time.Duration, jitterPct float64) time.Duration {
factor := 1.0 + jitterPct*(2*rand.Float64()-1)
return time.Duration(float64(d) * factor)
}
지터는 인간 행동을 모방해 탐지를 피합니다. 위험 수준 프리셋:
- 극도로 신중(paranoid): 1 워커, 1 req/s, 30명/페이지, ±50% 지터 (700명 기준 16분).
- 신중(careful, 기본값): 2 워커, 3 req/s, 80명/페이지, ±40% (5분).
- 보통(normal): 4 워커, 6 req/s, 150명/페이지, ±30% (2.5분).
- 공격적(aggressive): 지터 없음, 최대 속도 (밴 위험 높음).
유저봇 개발 흔한 실수
- 잘못된 DeviceConfig: gotgproto 기본값
GoTGProto, Helsinki는 밴 유발. 해결: Telegram Desktop 모방DeviceConfig사용. - 고정 간격: 정확히 350ms는 안티스팸에 걸림. 지터 필수.
- API 변경: 엔드포인트가
getOkIdsByExternalIds에서 단수형으로 변경; 키는 OK에 의해 무효화될 수 있음.application_key구성 가능하게.
방법의 한계
양성 ok_id는 과거 Telega 설치만 나타내며, 현재 사용 여부는 아님. Telega 프로토콜을 정확히 복제—no 익스플로잇.
주요 포인트:
- 첫 Telega
anonymLogin시 매핑 생성. - API 공개; 키는 APK에서.
- 유저봇은 밴 위험—일회용 계정 사용.
- 캐시와 지터로 탐지 확률 ↓.
- Go 코드 약 2000줄, MIT 라이선스.
— Editorial Team
아직 댓글이 없습니다.