- 2
- 이니스프리
- 조회 수 2709
안녕하세요?
https://studyforus.com/help/626417 에 대한 허접한 자답입니다.
그누보드의 Kcapcha의 이미지를 적절히 프로세싱하여 아래와 같은 방법으로 카카오 OCR API를 돌려보았습니다.
def OCR(filename, boxes): API_URL = 'https://kapi.kakao.com/v1/vision/text/recognize?boxes={}'.format(boxes) headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)} data = {'boxes': boxes} print(data) try: files = { 'file' : open(filename, 'rb')} resp = requests.post(url=API_URL, headers=headers, files=files) resp.raise_for_status() result = resp.json()['result']['recognition_words'] print(json.dumps(result, ensure_ascii=False)) # 이 부분은 캡챠만을 위한 소스가 아니기 때문에 들어갔습니다. except Exception as e: print(str(e)) sys.exit(0)
결과적으로 사실상 그누보드의 Kcaptcha가 무력화되는 취약점(?)을 발견했습니다.
Tesseract에서 여러 옵션을 주면서 시도해봐도 대체로 잘 인식이 되지 않았는데,
카카오 OCR API에서는 특별한 옵션을 지정할 수 없음에도 불구하고 상당히 강력하다는 느낌을 받았습니다.
예컨대 다음과 같은 숫자를 잘 인식했고, 전반적으로 높은 확률로 성공하였습니다.
제가 사용한 이미지 프로세싱과 관련된 방법을 그대로 공개하면 문제의 소지가 될 수 있을 것 같아서 여기에는 적지 않겠습니다.
사실 제가 대단한 이미지 프로세싱을 사용한 것도 아니고 Pillow로 간단히 전처리한 것이어서 더욱 놀랐습니다.
그누보드로 사이트를 운영하시는 분들께서는 카카오 OCR을 이용한 스팸 글 작성에 각별히 주의하셔야 될 것 같습니다 ㅠㅠ
사견으로는 보다 뚫기 오려운 구글 리캡차 등으로 변경하시는 것을 권해드립니다.
님 포함 1명이 추천
제가 개인적으로 테스트했을 때 특별한 이미지 프로세싱을 하지 않고서도 평균적으로 약 35~40% 정도의 성공률을 보였습니다.
이 정도라면 캡차가 사실상 무력화될 수 있으니 사이트 운영에 참고하세요.