자동화 파이프라인6 분 읽기

무인 팔로우봇이 CAPTCHA 밴을 맞았다 — 기계가 아니라고 설득하는 법

adb로 폰을 직접 조종하는 무인 팔로우봇이 어느 날 CAPTCHA 체크포인트에 걸렸습니다. 문제는 '사람 흉내'가 아니라 '속도와 무차별'이었습니다. 뭘 껐고 뭘 늦췄는지.

#social-automation#adb#reality-check#automation
개념 도식: 빠른 버스트와 콜드 팔로우가 CAPTCHA 밴을 부르고, 느리게·사람처럼이 해법
목표는 '많이'가 아니라 '안 걸리고 꾸준히'였다.

소셜 계정을 키우려고 무인 팔로우봇을 돌리고 있었습니다. API로 앱을 조종하는 게 아니라, adb로 실제 폰의 화면을 직접 터치하는 방식입니다 — 검색 화면 열고, 결과 탭하고, 아바타 팝업 경유해 팔로우 버튼을 누릅니다. 매시간 정해진 시간대에 버스트로. 예전 글에서 이 adb 직접 조종 구조를 다뤘고, 터치를 픽셀 단위로 흔들어 지문을 지우는 것까지 해뒀습니다.

그런데 어느 날 인스타그램이 계정에 CAPTCHA 체크포인트를 걸었습니다. 밴. 사람처럼 보이려고 그렇게 공을 들였는데도요.

질문 하나. 당신의 자동화가 "사람처럼 보이게" 만들어졌다면 — 그 사람은 얼마나 빨리, 얼마나 무차별적으로 행동합니까? 저는 터치의 생김새는 사람처럼 만들었지만, 행동의 리듬은 전혀 사람이 아니었습니다.

뭘 하고 있었나

두 갈래였습니다. 하나는 쓰레드에서 특정 키워드를 검색해 타겟을 팔로우, 다른 하나는 인스타 4개 계정을 전환기 경유로 순환하며 돌리는 것. 터치 지터, 세이프존, 포그라운드 가드 — 사람 흉내 장치는 이미 다 넣었습니다.

그래서 저는 "사람처럼 생긴 터치"가 방어의 핵심이라고 착각하고 있었습니다. 아니었습니다.

밴의 진짜 원인

당신이라면 뭘 의심하시겠습니까? 터치 좌표? 화면 이동 속도? 저는 로그를 되짚으며 세 가지를 골라냈습니다.

  • 콜드 팔로우. 모르는 계정을 무차별로 팔로우하는 것. 사람은 대개 맥락(내가 검색한 것, 아는 사람) 안에서 팔로우합니다. 무차별 팔로우는 그 자체가 봇 시그널입니다.
  • 연타 속도. 버스트 안에서 액션 간격이 너무 촘촘했습니다.
  • 양. 시간당 팔로우 상한이 사람 기준으로 너무 높았습니다.

터치를 아무리 흔들어도, 리듬과 무차별성이 기계였습니다.

뭘 바꿨나

  • 콜드 팔로우 OFF (DISCOVER=False): 모르는 계정 무차별 팔로우를 끔. 검색 타겟처럼 맥락 있는 것만.
  • 연타 스로틀 가드 + 간격 확대: 액션 사이를 사람 리듬으로 벌림.
  • 시간당 상한 축소 (cap 6): 양을 줄임.
  • 터치 지터 유지: 좌표 흔들기는 그대로.
  • 밴 대응 게이트: .ig_paused 파일을 touch하면 인스타만 멈추고 쓰레드는 계속. rm하면 재개. CAPTCHA는 계정·기기별이라 자동 해제가 안 됩니다 — 폰에서 직접 풀어야 합니다.

그리고 함정 하나. 프로세스를 멈추려고 kill $(cat .lock)을 하면 진행 중인 버스트를 통째로 죽입니다. 락 파일은 중복 실행 방지용이지 kill 스위치가 아닙니다. 멈춤은 반드시 .ig_paused 게이트로.

자가진단 3줄

무인 소셜 자동화를 돌린다면, 이 세 가지부터 보세요.

  1. 콜드 팔로우를 하고 있습니까? (맥락 없는 무차별 액션 = 1순위 봇 시그널)
  2. 터치·액션의 간격이 매번 똑같습니까? (좌표뿐 아니라 리듬도 지문입니다)
  3. 계정이 걸렸을 때 딱 그 계정만 멈추는 게이트가 있습니까? (전체를 죽이지 않고)

솔직한 결론

자동화의 목표를 "얼마나 많이"로 잡으면, 그 순간부터 밴을 향해 달립니다. 진짜 목표는 "안 걸리고 꾸준히" 였습니다. 사람처럼 보이는 건 터치의 생김새가 아니라 행동의 절제 — 모르는 사람을 무작정 팔로우하지 않고, 서두르지 않고, 적당히 하는 것 — 였습니다.

밴이 텔레그램으로 바로 알림 왔던 것이 그나마 다행이었습니다. 그게 없었으면 죽은 계정을 며칠 더 방치했을 겁니다.

관련 글